2019年9月1日日曜日

Kaplan-Meier Curveを作成してみる(SGPLOT)③

こんにちは。
第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曲線についての発表も行いますので、
もしよろしければちらっと見ていってください。
何かネタが出てきたらまた更新したいと思います。

おわり

Kaplan-Meier Curveを作成してみる(SGPLOT)③

こんにちは。 第3回です。今回は前回色をつけたKM曲線に、信頼区間の帯も付け加えたいと思います。 信頼区間の帯については、BANDステートメントを使用いたします。 前回同様、サンプルデータの作成、RGBマクロは同じですので、第1回、第2回をご参照ください。 ここからは少...