SAS

GTLでモザイクプロットを作図する

モザイクプロットは多次元の分割表をグラフィカルに表示するのに用いられます。あまりなじみのないグラフですが、集計結果と全体の割合をわかりやすく表示するのに有用なので、作図できて損はないかと思います。

mosaicplotparmステートメント

GTLでモザイクプロットを作図するときはmosaicplotparmステートメントを使用します。モザイクプロットは軸のないグラフのため、OVERLAYレイアウトではなくREGIONレイアウト内で使用します。なおsgplotプロシジャにはモザイクプロットを作図するステートメントはありません。

mosaicplotparm category=(variable list) count=度数 / < option >;

カテゴリ変数が複数ある場合はスペースで区切ります。countは度数を格納した変数を指定します。

モザイクプロットの作図例はなぜか関節炎のデータを用いて紹介されていることが多いようなので、GTLも同様にやってみます。

実薬群とプラセボ群で関節炎の改善効果の結果を格納したデータセットを
freqプロシジャで各薬剤と改善結果毎に人数を集計し、その結果をGTLで作図します。

proc freq data=raw noprint; 
tables Treatment*improved / out=ds1;
run;

proc template;
define statgraph mosaic;
begingraph;

   layout region;
      mosaicplotparm category=(treatment improved) count=count;
   endlayout;
endgraph;
end;
run; 

proc sgrender data=ds1 template=mosaic;
run;
実行結果

集計結果を表にするとこのようになります。

 
表 : Improved * Treatment
ImprovedTreatment
PlaceboTreated合計
Marked
7
21
28
None
29
13
42
Some
7
7
14
合計
43
41
84

この表からプラセボ群は全体(84人)のうちの51%(43人)、実薬群は49%(41人)だとわかります。

プラセボ群の全体に対する各判定区分(marked, none, some)の割合はそれぞれ16.3% 67.4%, 51.2%であり、実薬群の全体に対するそれは、それぞれ51.2%, 31.7%, 17.1%となります。

この割合はモザイクプロットの各タイルの辺の長さの比率に相当します。具体的には以下の通りとなります。


ピアソン残差をプロットする

モザイクプロットはカラースケールを設置して、特定の変数の値に応じて各タイルを色分けすることができます。試しに先ほどのグラフをピアソン残差に基づいて色分けします。

カイ二乗検定で独立性を検定し、関連があると判断されたとき、ピアソン残差を算出して期待度数とのずれが大きい箇所を特定することがあります。

sasでピアソン残差を算出するには、freqプロシジャのcrosslistオプションを利用するか、genmodプロシジャで一般化線形モデル(ポアソン分布、リンク関数は対数)にあてはめることで算出できます。ただし両者は計算方法が異なるため厳密には値は一致しないはずです。

ここではfreqプロシジャでピアソン残差を求めて、それをカラースケールとしてモザイクプロットに適用します。

mosaicplotparmステートメントのcolorresploseオプションにピアソン残差を格納した変数を指定すればOKです。
またcontinuouslegend ステートメントを利用してカラースケールを表示します。

ods output crosslist=ds2; 
/*度数とピアソン残差を求める*/ 

proc freq data=raw ;
 tables improved*treatment / crosslist(pearsonres);
run;

data graph; 
set ds2; 
where improved^="" and treatment^="";
run;

proc template;
define statgraph mosaic; 
begingraph; 
  layout region; 
      mosaicplotparm category=(treatment improved) count=frequency/ 
         colorresponse=pearsonresidual
         name="mosaic";
      continuouslegend "mosaic" / 
         title="pearson residual" ;
   endlayout; 
endgraph;
end;
run;

proc sgrender data=graph template=mosaic;
run;
実行結果

ピアソン残差が0より大きい(観測度数が期待度数よりも大きい)場合、タイルは赤になります。逆にピアソン残差が0より小さい(観測度数が期待度数よりも小さい)場合、タイルは青になります。ピアソン残差の大きさが色のグラデーションに対応しており、どの部分が期待度数とのずれが大きくなっているかを視覚的にわかりやすくなります。

ImprovedTreatmentFrequencyPearsonResidual
MarkedPlacebo7-1.9370
MarkedTreated211.9837
NonePlacebo291.6175
NoneTreated13-1.6565
SomePlacebo7-0.0623
SomeTreated70.0638