2018年11月1日木曜日

SASで一元配置分散分析

glmプロシジャの紹介です.
ざっくり言うと平均からのズレを見たい時に使うと思います.
実行はSAS9.4,SAS/STAT 14.3で行いました.

quitをつけで実行をしてください.
色々ステートメントがありますが,必須なのはmodelステートメントだけです.
つまり他のステートメントは必要に応じて追加する形です.
またこのページでは以下のステートメントの全てを紹介はしません.すみません.

まず使うデータはSASHELPのFailureです.
これは失敗の数がCOUNTに,失敗した理由がCAUSEに,
失敗したときの方法がPROCESSに格納されています.

今たとえば,プロセスAとBで,どちらの失敗が多いかを調べたいとします.(1要因,2群の比較)
/*1要因,2群の比較*/
proc glm data = SASHELP.FAILURE outstat = OUT plots = none alpha = 0.05;
    class PROCESS ;                                /*群変数を指定*/
    model COUNT = PROCESS / ss3;     /*測定値 = 群 ss3オプションをつけているのでtype3のみ出力*/
    means PROCESS ;                      /*各群の平均値を出力*/
    ods output  FitStatistics = FIT ;   
    ods output  ModelANOVA    = MODEL ; 
    ods output  Means         = MEANS ; 
quit;

--model出力例----
 要因                    自由度          平方和        平均平方       F 値    Pr > F
 Process                      1     44.80000000     44.80000000       1.95    0.1670
--means出力例----
 水準                 ------------Count------------
 Process        N             平均         標準偏差
 Process A     35       4.62857143       6.01510703
 Process B     35       3.02857143       3.12000862

FitStatisticsに適合度統計量,ModelANOVAにanovaのモデル(今回はss3オプションを指定しているのでtype3のみ)ですね.
Meansに各群の値の平均値が出ています.
ods outputしているので,それぞれをデータセットに出力しています.

glmのところのOUTSTATオプションですが,ここに指定した名前のデータセットに結果のMODELを出力します.
ですのでそのデータセットの中身はModelANOVAとほとんど一致します.
違うところはOUTSTATで出力したデータセットには,p-値,F値が丸められていないものが出ます.
ERROR時の平方和も出してくれますが,平均平方は出してくれません.

一方ods outputのModelANOVAではp-値とF値は四捨五入された値が出ます.
こちらはMODELの平均平方もデータセットに出力してくれます.
proc glmのplotsオプションにnoneを指定しているので何もグラフが出ない設定です.
何も指定しないと2群の箱ひげ図が出てきます.
またproc glmのalphaオプションには有意水準を指定します.(0から1の間)
何も指定しなかったら0.05=有意水準95%が指定されます.
ここまでは2群の比較です.(群変数のPROCESSにはAとBの二つが格納されている状態)


3群以上の時は上記に加えて多重比較を行ってくれます.
仮にA,B,C群の3群があった時にAC,AB,BCの比較をします.
3群の比較はデータを変えて,SASHELPのcarsを使います.
このデータセットの内,車種を格納したTYPE,ガソリン1リットルあたりの高速道路走行距離を格納したMPG_Highwayを使います.
/*1要因,3群以上の比較(この例は6群)*/
proc glm data = SASHELP.CARS outstat = OUT plots = none;
    class TYPE ;                     
    model MPG_Highway = TYPE / ss3 ;  
    means TYPE / tukey bon ;           /*オプションにて群間の比較をする際の検定方法を指定(複数可)*/
    ods output  FitStatistics = FIT ;   
    ods output  ModelANOVA    = MODEL ; 
    ods output  CLDiffs       = DIFF ; 
quit;

--means出力例(一部)-----
  有意水準 0.05 で有意に差があることを *** で示しています。

       Type
       比較           平均の差     同時 95% 信頼限界
  Hybrid - Sedan       27.3702      20.4417   34.2987  ***
  Hybrid - Wagon       28.1000      20.8746   35.3254  ***
  Hybrid - Sports      30.5102      23.4133   37.6071  ***
  Hybrid - Truck       35.0000      27.6929   42.3071  ***
  Hybrid - SUV         35.5000      28.4407   42.5593  ***
  Sedan  - Hybrid     -27.3702     -34.2987  -20.4417  ***
  Sedan  - Wagon        0.7298      -1.5701    3.0297

出力結果は基本的には2群のときと同じです.
2群のときの内容に加えて群間の比較を行います.
その内容を,ods outputを使ってDIFFの名前でデータセットにしています.
どの群の比較をしたかをComparison,95%信頼区間をLowerCL/UpperCL,平均の差をDiffrence,
有意であればSignificanceに1を格納されています.有意でなければSignificanceには0が入ります.
output windowでは有意な組み合わせに***が付いてます.
今はmeansステートメントにtukeyオプションを指定していますが,このオプションは複数指定できます.
指定した方法で群間の比較を行うので,複数指定すると複数の方法で比較してくれます.
tukey(tukeyの方法),t(pair t test),bon(bonferroni)などです.

ここまでは1要因の比較でしたが,複数要因の比較もglmプロシジャは行えます.
さっきと同じCARSのデータを用います.群の数が多いのでwhereで少し絞っています.

proc glm data = SASHELP.CARS outstat = OUT plots = none;
    where TYPE in("Sedan","SUV","Sports") ;
    class TYPE ORIGIN ;
    model MPG_Highway = TYPE ORIGIN TYPE * ORIGIN  / ss3 ;  
    lsmeans TYPE * ORIGIN / pdiff cl ;
    ods output  FitStatistics = FIT ;   
    ods output  ModelANOVA    = MODEL ; 
    ods output  LSMeanCL      = LSCL ; 
quit;

--model出力例--
   要因            自由度     平方和         平均平方       F 値    Pr > F
   Type            2          3089.294384    1544.647192    96.25   <.0001
   Origin          2          229.974936     114.987468     7.16    0.0009
   Type*Origin     4          34.950460      8.737615       0.54    0.7032

--LSMeanCL出力例--
   Type      Origin            平均           95% 信頼限界
   SUV       Asia         21.680000       20.104362    23.255638
   SUV       Europe       18.700000       16.208698    21.191302
   SUV       USA          20.040000       18.464362    21.615638
   Sedan     Asia         29.968085       29.155512    30.780658
   Sedan     Europe       27.115385       26.223355    28.007414
   Sedan     USA          28.544444       27.714010    29.374878
   Sports    Asia         26.647059       24.736317    28.557800
   Sports    Europe       25.130435       23.487719    26.773151
   Sports    USA          24.222222       21.596159    26.848285

これは出力が多いので絞っています.
MODELにはmodelで指定した組み合わせのモデルが出力されます.ここで有意
LSCLには,組み合わせごとの95%信頼区間が出ます.LSMEANが平均,LowerCLが下限,UpperCLが上限です.
今回はType*Originのp-値が0.05より大きいので有意ではありません.ですので混合効果はありませんね.
Typeの時には有意であるとなっているので,TypeによってMPG_Highwayの値に差があると言えそうです.

正直指定できるオプションやらステートメントが多いので,リファレンス見るのが一番ですかね.

0 件のコメント:

コメントを投稿