こんにちは。
第3回です。今回は前回色をつけたKM曲線に、信頼区間の帯も付け加えたいと思います。
信頼区間の帯については、BANDステートメントを使用いたします。
前回同様、サンプルデータの作成、RGBマクロは同じですので、第1回、第2回をご参照ください。
ここからは少しずつ追加があります。
まずLIFETESTですが、いままで出力していたods outputのデータセットには、
生存割合の信頼区間の情報がございません。
なのでoutsurv=で信頼区間の情報が入ったデータセットも出力いたします。
ods output Survivalplot = sgplot ;
proc lifetest data=adtte METHOD= KM atrisk maxtime = 24 outsurv=out
plots = survival (outside atrisk = 0 to 24 by 3 atrisktick );
time AVAL*CNSR(0);
strata TRTPN / test = logrank;
run;
データ加工ですが、At risk用の加工の前に、sgplotとoutをmergeしていきます。
mergeした後は、今まで通りAt riskの欠測の補完と、
信頼区間の欠測(KM曲線の最後の方)の補完を行い、グラフ出力に移ります。
data out1(keep = Time SURVIVAL SDF_LCL SDF_UCL STRATUMNUM);
set out;
rename AVAL = Time
STRATUM = STRATUMNUM;
run;
proc sort data = out1; by Time SURVIVAL STRATUMNUM; run;
proc sort data = sgplot; by Time SURVIVAL STRATUMNUM; run;
data _sgplot;
merge sgplot out1;
by Time SURVIVAL STRATUMNUM;
if AtRisk = . then delete;
run;
data form ;
do StratumNum = 1 to 2 ;
do time = 0 to 24 by 3;
tAtRisk = time; output;
end;
end;
run;
proc sort data = form; by StratumNum time; run;
proc sort data = _sgplot; by StratumNum time; run;
data atrisk0;
merge form _sgplot;
by StratumNum time ;
run;
data sgplot2;
set atrisk0;
if AtRisk = . then do;
AtRisk = 0;
tAtRisk = time;
end;
retain SDF_UCL1;
if SDF_UCL^=. then SDF_UCL1 = SDF_UCL;
retain SDF_LCL1;
if SDF_LCL^=. then SDF_LCL1 = SDF_LCL;
if Time = 0 and tAtRisk = 0 then do;
SDF_UCL1 = .; SDF_LCL1 = .;
end;
Stratumnumci=Stratumnum;
run;
proc sort data = sgplot2; by StratumNum time; run;
これで出力前のデータセットは完成です。
今回は信頼区間のformatも追加します。
proc format;
value ci 1 = '95% CI(Active)' 2 = '95% CI(Control)';
run;
それでは前回のSGPLOTにBANDとformatを追加して出力を行っていきます。
proc sgplot data = sgplot2 noautolegend;
styleattrs datacontrastcolors=(%RGB(0,191,196) %RGB(248,118,109))
datalinepatterns=(1 20)
datasymbols=(triangle circle));
step x=Time y=Survival / group=StratumNum
lineattrs=(thickness=2) name="a" ;
band x = Time upper = SDF_UCL1 lower = SDF_LCL1 /
type = step group = Stratumnumci transparency=0.8 name = "b";
scatter x=Time y=Censored / group=StratumNum
markerattrs=(size=15) ;
xaxistable AtRisk / x=tAtRisk class=StratumNum
valueattrs=(size=13) labelattrs=(size=13)
title="No. at Risk" titleattrs=(size=13);
yaxis values=(0 to 1 by 0.1)
label="Probability of Overall Survival"
valueattrs=(size=13) labelattrs=(size=13);
xaxis values=(0 to 24 by 3) offsetmin=0.03 offsetmax=0.02
label="Time(Months)" valueattrs=(size=13)
labelattrs=(size=13);
keylegend "a" / location = inside position = topright
titleattrs=(size=13)valueattrs=(size=13)
acros=1 noborder ;
format StratumNum treat. ;
run;
完成図は以下になります。
ということでそれなりに綺麗めのKM曲線が出来上がりました。
検定結果や、ハザード比、中央値はINSETとかでお好みで載せてください。
ちなみにですが、ここのBANDステートメントで、
upper=Survival、lower=0で出力すると、曲線下面積を図示することもできそうですね。
もしメーカー勤務、常駐の方で発表資料に使う機会があれば是非。
ということでKM曲線シリーズは終わりです。
今年のユーザー総会でKM曲線についての発表も行いますので、
もしよろしければちらっと見ていってください。
何かネタが出てきたらまた更新したいと思います。
おわり
SAS Programming Beginner
2019年9月1日日曜日
2019年8月22日木曜日
Kaplan-Meier Curveを作成してみる(SGPLOT)②
こんにちは。
前回はモノクロのKM曲線作成について投稿を行いました。
その際最後の方でも触れましたが、第2回は色、シンボル、線種を群ごとに指定する方法、
また好きな色を使用する簡単な方法を紹介したいと思います。
サンプルデータ作成と、At risk用のデータ加工については前回の投稿と全く同じになりますので、
そちらをご覧ください。
SGPLOTでグラフを作成する際、群やグループごとにATTRSの指定を行うステートメント
として、STYLEATTRSステートメントがあります。
このステートメントでは以下の指定ができます。
*DATACOLORS=(color-list)
*DATACONTRASTCOLORS=(color-list)
*DATALINEPATTERNS=(line-pattern-list)
*DATASYMBOLS=(marker-symbol-list)
プログラム例
proc sgplotdata=class;
styleattrs
datacontrastcolors=(red green)
datalinepatterns=(dot solid)
datasymbols=(circlefilled x);
series x=height y=weight / group=age;
run;
ということなので、前回のSGPLOTのプログラム部分に、
styleattrs datacontrastcolors=(red green) datalinepatterns=(dot solid) datasymbols=(circlefilled x);
を試しに入れてみましょう(ただし、ATTRSにおいてcolor=やsymbol=で指定している部分は削除すること)。
ods graphics / width=1100px height=700px border=off
reset=index imagename= "KMcurve" imagefmt=tiff ;
proc sgplot data = sgplot2 noautolegend;
styleattrs datacontrastcolors=(red green)
datalinepatterns=(dot solid)
datasymbols=(circlefilled x);
step x=Time y=Survival / group=StratumNum
lineattrs=(thickness=2) name="a" ;
scatter x=Time y=Censored / group=StratumNum
markerattrs=(size=15) ;
xaxistable AtRisk / x=tAtRisk class=StratumNum
valueattrs=(size=13) labelattrs=(size=13)
title="No. at Risk" titleattrs=(size=13);
yaxis values=(0 to 1 by 0.1)
label="Probability of Overall Survival"
valueattrs=(size=13) labelattrs=(size=13);
xaxis values=(0 to 24 by 3) offsetmin=0.03 offsetmax=0.02
label="Time(Months)" valueattrs=(size=13)
labelattrs=(size=13);
keylegend "a" / location = inside position = topright
titleattrs=(size=13)valueattrs=(size=13)
acros=1 noborder ;
format StratumNum treat. ;
run;
完成図は以下になります。
これでActiveとControlの体裁を分けることが出来ました。
さて、ここからは色をもっと自由に指定してみようという話になります。
SASでの色の指定は以下のようにいくつか方法があります。
・Color(Red,Green,Blue)
・RGB (CXFF0000,CX00FF00,CX0000FF)
・CMYK (00FFFF00,FF00FF00,FFFF0000)
・HLS (H07880FF,H0F080FF,H00080FF)
・HSV , またはHSB (V000FFFF,V078FFFF,V0F0FFFF)
・Gray scale (GRAYFF,GRAYC0,GRAY40)
ここで、それなりに馴染みがあって自由度が高そうなRGB値というものがあります。
CXFF0000など例を挙げていますが、16進数の値になっており、
もちろんこれはRGB値から変換された値になります。
それではこのRGB値から変換してもらうマクロを作れば様々な色に対応できる!
ということで、実際このマクロを作成している方がいらっしゃいました。
それがRickさんのRGBマクロになります。以下そのブログのリンクです。
https://blogs.sas.com/content/iml/2012/10/22/whats-in-a-name.html
%macro hex2(n);
%local digits n1 n2;
%let digits = 0123456789ABCDEF;
%let n1 = %substr(&digits, &n / 16 + 1, 1);
%let n2 = %substr(&digits, &n - &n / 16 * 16 + 1, 1); &n1&n2
%mend hex2;
%macro RGB(r,g,b);
%cmpres(CX%hex2(&r)%hex2(&g)%hex2(&b))
%mend RGB;
こんな短いプログラムになっています。
それではこのマクロを実行して、好みの?KM曲線にしてみます。
proc sgplot data = sgplot2 noautolegend;
styleattrs datacontrastcolors=(%RGB(0,191,196) %RGB(248,118,109))
datalinepatterns=(1 20)
datasymbols=(triangle circle));
step x=Time y=Survival / group=StratumNum
lineattrs=(thickness=2) name="a" ;
scatter x=Time y=Censored / group=StratumNum
markerattrs=(size=15) ;
xaxistable AtRisk / x=tAtRisk class=StratumNum
valueattrs=(size=13) labelattrs=(size=13)
title="No. at Risk" titleattrs=(size=13);
yaxis values=(0 to 1 by 0.1)
label="Probability of Overall Survival"
valueattrs=(size=13) labelattrs=(size=13);
xaxis values=(0 to 24 by 3) offsetmin=0.03 offsetmax=0.02
label="Time(Months)" valueattrs=(size=13)
labelattrs=(size=13);
keylegend "a" / location = inside position = topright
titleattrs=(size=13)valueattrs=(size=13)
acros=1 noborder ;
format StratumNum treat. ;
run;
完成図は以下になります。
とこんな体裁になります!
今回の投稿はどのグラフにも応用できるので、推移図やvar plotにもお試しください。
次回でKMは最後になります!
信頼区間の帯のプロットについてです。
おわり
前回はモノクロのKM曲線作成について投稿を行いました。
その際最後の方でも触れましたが、第2回は色、シンボル、線種を群ごとに指定する方法、
また好きな色を使用する簡単な方法を紹介したいと思います。
サンプルデータ作成と、At risk用のデータ加工については前回の投稿と全く同じになりますので、
そちらをご覧ください。
SGPLOTでグラフを作成する際、群やグループごとにATTRSの指定を行うステートメント
として、STYLEATTRSステートメントがあります。
このステートメントでは以下の指定ができます。
*DATACOLORS=(color-list)
*DATACONTRASTCOLORS=(color-list)
*DATALINEPATTERNS=(line-pattern-list)
*DATASYMBOLS=(marker-symbol-list)
プログラム例
proc sgplotdata=class;
styleattrs
datacontrastcolors=(red green)
datalinepatterns=(dot solid)
datasymbols=(circlefilled x);
series x=height y=weight / group=age;
run;
ということなので、前回のSGPLOTのプログラム部分に、
styleattrs datacontrastcolors=(red green) datalinepatterns=(dot solid) datasymbols=(circlefilled x);
を試しに入れてみましょう(ただし、ATTRSにおいてcolor=やsymbol=で指定している部分は削除すること)。
ods graphics / width=1100px height=700px border=off
reset=index imagename= "KMcurve" imagefmt=tiff ;
proc sgplot data = sgplot2 noautolegend;
styleattrs datacontrastcolors=(red green)
datalinepatterns=(dot solid)
datasymbols=(circlefilled x);
step x=Time y=Survival / group=StratumNum
lineattrs=(thickness=2) name="a" ;
scatter x=Time y=Censored / group=StratumNum
markerattrs=(size=15) ;
xaxistable AtRisk / x=tAtRisk class=StratumNum
valueattrs=(size=13) labelattrs=(size=13)
title="No. at Risk" titleattrs=(size=13);
yaxis values=(0 to 1 by 0.1)
label="Probability of Overall Survival"
valueattrs=(size=13) labelattrs=(size=13);
xaxis values=(0 to 24 by 3) offsetmin=0.03 offsetmax=0.02
label="Time(Months)" valueattrs=(size=13)
labelattrs=(size=13);
keylegend "a" / location = inside position = topright
titleattrs=(size=13)valueattrs=(size=13)
acros=1 noborder ;
format StratumNum treat. ;
run;
完成図は以下になります。
これでActiveとControlの体裁を分けることが出来ました。
さて、ここからは色をもっと自由に指定してみようという話になります。
SASでの色の指定は以下のようにいくつか方法があります。
・Color(Red,Green,Blue)
・RGB (CXFF0000,CX00FF00,CX0000FF)
・CMYK (00FFFF00,FF00FF00,FFFF0000)
・HLS (H07880FF,H0F080FF,H00080FF)
・HSV , またはHSB (V000FFFF,V078FFFF,V0F0FFFF)
・Gray scale (GRAYFF,GRAYC0,GRAY40)
ここで、それなりに馴染みがあって自由度が高そうなRGB値というものがあります。
CXFF0000など例を挙げていますが、16進数の値になっており、
もちろんこれはRGB値から変換された値になります。
それではこのRGB値から変換してもらうマクロを作れば様々な色に対応できる!
ということで、実際このマクロを作成している方がいらっしゃいました。
それがRickさんのRGBマクロになります。以下そのブログのリンクです。
https://blogs.sas.com/content/iml/2012/10/22/whats-in-a-name.html
%macro hex2(n);
%local digits n1 n2;
%let digits = 0123456789ABCDEF;
%let n1 = %substr(&digits, &n / 16 + 1, 1);
%let n2 = %substr(&digits, &n - &n / 16 * 16 + 1, 1); &n1&n2
%mend hex2;
%macro RGB(r,g,b);
%cmpres(CX%hex2(&r)%hex2(&g)%hex2(&b))
%mend RGB;
こんな短いプログラムになっています。
それではこのマクロを実行して、好みの?KM曲線にしてみます。
proc sgplot data = sgplot2 noautolegend;
styleattrs datacontrastcolors=(%RGB(0,191,196) %RGB(248,118,109))
datalinepatterns=(1 20)
datasymbols=(triangle circle));
step x=Time y=Survival / group=StratumNum
lineattrs=(thickness=2) name="a" ;
scatter x=Time y=Censored / group=StratumNum
markerattrs=(size=15) ;
xaxistable AtRisk / x=tAtRisk class=StratumNum
valueattrs=(size=13) labelattrs=(size=13)
title="No. at Risk" titleattrs=(size=13);
yaxis values=(0 to 1 by 0.1)
label="Probability of Overall Survival"
valueattrs=(size=13) labelattrs=(size=13);
xaxis values=(0 to 24 by 3) offsetmin=0.03 offsetmax=0.02
label="Time(Months)" valueattrs=(size=13)
labelattrs=(size=13);
keylegend "a" / location = inside position = topright
titleattrs=(size=13)valueattrs=(size=13)
acros=1 noborder ;
format StratumNum treat. ;
run;
完成図は以下になります。
とこんな体裁になります!
今回の投稿はどのグラフにも応用できるので、推移図やvar plotにもお試しください。
次回でKMは最後になります!
信頼区間の帯のプロットについてです。
おわり
登録:
投稿 (Atom)
Kaplan-Meier Curveを作成してみる(SGPLOT)③
こんにちは。 第3回です。今回は前回色をつけたKM曲線に、信頼区間の帯も付け加えたいと思います。 信頼区間の帯については、BANDステートメントを使用いたします。 前回同様、サンプルデータの作成、RGBマクロは同じですので、第1回、第2回をご参照ください。 ここからは少...
-
初めまして。beginnerです。その名の通りSAS programmingは駆け出しレベルです。これから自分のプログラム(医薬系)保存用として、ブログを活用していこうかと思います。 そんなに頻繁に更新するつもりはありません。 小ネタより、長めの実用的なプログラムの紹介が多い...
-
こんにちは。 第3回です。今回は前回色をつけたKM曲線に、信頼区間の帯も付け加えたいと思います。 信頼区間の帯については、BANDステートメントを使用いたします。 前回同様、サンプルデータの作成、RGBマクロは同じですので、第1回、第2回をご参照ください。 ここからは少...