僕の頁 <SASと臨床試験と雑談と>

徒然なるままにSAS暮らし

0211

逆累積分布曲線(Reverse Cumulative Distribution Plot)  

逆累積分布曲線(Reverse Cumulative Distribution(RCD)プロット)を作成
したのでメモしておきます。RCDプロットは、ワクチンの抗体価の分布を
比較する際などに用いられます。作り方は色々あるかと思いますが、
ここではFREQプロシジャで累積パーセントを算出した後にDATAステップ
で逆累積パーセントに変換し、SGプロシジャのSTEPステートメントで
グラフを作成します。
*** テストデータ(連続量で乱数生成) ;
data _TEST ;
do ID = 1 to 100 ;
GRP = rantbl(100,1/2,1/2) ;
VAL = 20 + 2*GRP + 5*rannor(100) ;
output ;
end ;
run ;
proc sort data=_TEST ; by GRP ; run ;
*** 累積パーセント算出 ;
ods listing close ;
ods output Onewayfreqs=_OUT1(keep=GRP VAL Cumpercent) ;
proc freq data=_TEST ;
by GRP ;
table VAL ;
run ;
ods output close ;
ods listing ;
*** 逆累積パーセント算出 ;
data _OUT1 ;
set _OUT1 ;
by GRP ;
_CDF = 100-Cumpercent ; *--- 逆累積パーセント ;
output ;
*--- 始点から一つ目のデータまでの描画用 ;
if last.GRP then do ;
_CDF = 100 ;
VAL = 0 ;
output ;
end ;

run ;
proc sort data=_OUT1 out=_OUT1_S ;
by descending _CDF ;
run ;
*** 各群のデータを転置 ;
proc transpose data=_OUT1_S out=_OUT1_ST(drop=_NAME_) prefix=_G ;
by descending _CDF ;
var VAL ;
id GRP ;
run ;
*** RCDプロット作成(justify=leftがデフォルト) ;
proc sgplot data=_OUT1_ST ;
step x=_G1 y=_CDF / justify=left name="Treat 1"
legendlabel="Treat 1" ;
step x=_G2 y=_CDF / justify=left name="Treat 2"
legendlabel="Treat 2" ;

keylegend "Treat 1" "Treat 2" ;
xaxis label="Test Value" values=(0 to 40 by 5) ;
yaxis label="Percent" values=(0 to 100 by 10) ;
run ;

・テストデータセット_TEST
_test.png

・描画用データセット_OUT1_ST
_rcd_dt.png

・逆累積分布曲線
RCD.png

LIFETESTプロシジャのカップランマイヤー図でも同じように描けそうですが、
カスタマイズが簡単にはできないのでしばらくこれを使おうかと思います。
スポンサーサイト

Posted on 2014/02/11 Tue. 23:31 [edit]

CM: 2
TB: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top