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 件のコメント:
コメントを投稿