SAS

GTLでアスタリスクを表示する scatterplotステートメント 

仮説検定で算出されたP値はグラフに表示する一般的な情報の一つです。

通常P値があらかじめ決めておいた閾値を下回る場合、グラフ上にアスタリスク(*)を表示することが多いです。旧バージョンのSASではこのような作図を行う場合annotation datasetを使わなければなりませんでしたが、現在はplotステートメントで作図することが可能です。ただしデータの前処理は工夫する必要があります。

多重比較(コントロール群に対する比較)の結果を表示する

作図内容

今回はproc mixedで3群の最小二乗平均(LS means)を求め、プラセボ群の最小二乗平均の差を多重比較で検定を実施します。
多重比較の調整方法はボンフェローニかダネットを想定しています。

最小二乗平均とその信頼区間はエラーバー付き棒グラフで表現します。

p値が0.05を下回るとき、該当する棒グラフの上部に「*」を表示します。

p値が0.01を下回るとき、該当する棒グラフに上部に「**」を表示します。

前処理

proc mixedが出力したデータセットdiffsとlsmeansをマージし、調整済みp値(adjp)の値を基にマーカーの表示位置を導出します。
表示位置はエラーバー上端+1としました。このあたりはデータに応じて調整します。

変数markはp値のマーカーとして表示する文字列を格納します。デフォルトのマーカーは1文字以上の文字列を指定することができないため、変数に格納された文字列をマーカーとして使用します。

/*grp: 群変数 
estimate: 最小二乗平均の推定値 
lower: 信頼下限 
upper: 信頼上限 
adjp: 多重比較で調整されたp値 
*/ 

data graph; 
merge lsmeans diffs(keep=grp adjp); 
by grp; 

/*p値の表示位置*/ 
if . < adjp < 0.05 then pval=upper+1; 

/*マーカー文字列*/ 

if . < adjp < 0.01 then mark="**"; 
else if . < adjp < 0.05 then mark="*"; 
run;

テンプレート

P値のマーカーはscatterplotステートメントのmarkercharacterオプションで文字列変数を指定することで、任意の文字列をマーカーとして表示します。文字の属性はmarkercharacterattrsオプションで制御します。

proc template; 
define statgraph pval; 
begingraph; 
layout overlay / 
   xaxisopts=(label="group") 
   yaxisopts=(label="LS means"); 

   barchartparm category=grp response=estimate / 
      errorlower=lower 
      errorupper=upper; 

/*アスタリスク(p<0.05未満)*/ 
   scatterplot x=grp y=pval / 
      markercharacter=mark 
      markercharacterattrs=(color=black size=11); 
endlayout; 

entryfootnote "*: p < 0.05 **: p < 0.01 "; 
endgraph; 
end; 
run; 

ods graphics / reset=index outputfmt=emf border=off imagename="画像名"; 
ods listing gpath="画像保存パス" style=styles.journal3; 

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