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

徒然なるままにSAS暮らし

0808

もうひとつのWaterfallプロット  

以前、抗がん剤の奏効率を例にとってWaterfallプロットの紹介をさせて頂きましたが、もう一つWaterfallプロットと呼ばれるプロットが存在します。SGプロシジャでwaterfallステートメントを使用して作成します。

今回のWaterfallプロットは、継時的なデータについて、一つ前の時点からの変化を棒グラフで表現するものです。特徴的なオプションとして「finalbartickvalue = "ラベル"」や「initialbarvalue=値」がありますが、これらは最終的な値を表す棒グラフが作成されるので、そのラベルを指定したり、初期値を指定したりできます。
waterfall category = 横軸の変数
response = 解析変数(縦軸の変数)
/ オプション ;

となります。
以下の例では、臨床試験等で継時的に得られたデータ(変数VAL_M)について、
・Week 0の平均値
・Week 2におけるWeek 0の平均値からの差分
・Week 4におけるWeek 2の平均値からの差分
・Week 6におけるWeek 4の平均値からの差分
を格納する変数CHG_Mを用意します。この変数の作成方法は通常のデータの加工とは異なるので新たに作成することになるでしょう。Waterfallステートメントでは、横軸にVISIT、縦軸にCHG_Mを指定して、datalabelで各時点の値を出力します。
*** VISITフォーマット ;
proc format ;
value VISITF 1 = "Week 0" 2 = "Week 2"
3 = "Week 4" 4 = "Week 6" ;
run ;

*** パターン1: 事前に各時点の直前からの変化量の平均値を格納する場合 ;
data test ;
input VISIT VAL_M @@ ; *--- 各時点の平均値 ;
retain _VAL_M ;
if VISIT = 1 then CHG_M = VAL_M ; *--- 最初の時点はそのまま値を格納 ;
else CHG_M = VAL_M - _VAL_M ; *--- 直前の時点からの変化量 ;
_VAL_M = VAL_M ;
cards;
1 100 2 80 3 120 4 90
;
run ;

*** Waterfall plot with stat=sum ;
ods listing style=analysis ;
title1 'Waterfall plot for test value 1' ;
proc sgplot data = test noautolegend ;
waterfall category = VISIT
response = CHG_M
/ datalabel
stat = sum
dataskin = sheen
finalbartickvalue = "End of the Treatment Period" ;

xaxis display = (nolabel) ;
yaxis grid
label = "Mean (Observed Value)"
offsetmin = 0
offsetmax = 0.05 ;
format CHG_M 8.1 VISIT VISITF. ;
run;

結果は以下になります。

waterfall2_1.png

各時点の各被験者のデータから、Waterfallステートメント内で変化量の平均値を計算し、Baselineの値を「0」に設定する場合は以下のように「stat=mean」や「initialbarvalue=0」を指定します。
*** パターン2: 各被験者の直前の時点からの変化量を格納する場合 ;
data test2 ;
call streaminit(100) ;
do ID = 1 to 50 ;
do VISIT = 1 to 4 ;
*--- VISITごとのテストデータ生成 ;
VAL = rand("normal",100+10*(VISIT>1)*VISIT,20) ;
CHG = VAL - VAL_PRE ;
output ;
VAL_PRE = VAL ;
end ;
end ;
format VISIT VISITF. ;
run ;

*** Waterfall plot with stat=mean and initialbarvalue ;
ods listing style=analysis ;
title1 'Waterfall plot for Change from Baseline' ;
proc sgplot data = test2 noautolegend ;
where VISIT > 1 ; *--- Week 2以降のデータに絞り込む ;
*--- initialbarvalueでBaselineの値を0に設定 ;
waterfall category = VISIT
response = CHG
/ datalabel
stat = mean
dataskin = sheen
initialbarvalue = 0
initialbartickvalue = "Baseline"
finalbartickvalue = "End of the Treatment Period" ;

xaxis display = (nolabel) ;
yaxis grid
label = "Mean (Change from Baseline)"
offsetmin = 0
offsetmax = 0.05 ;
format CHG 8.1 VISIT VISITF. ;
run;

結果は以下になります。
waterfall2_2.png




スポンサーサイト

Posted on 2015/08/08 Sat. 13:20 [edit]

CM: 0
TB: 0

0308

奏効率のWaterfallプロット  

抗癌剤の奏効率に関してウォーターフォール(waterfall)プロットと呼ばれる
グラフを作成することがあります。奏効率とは、標的病変の腫瘍の縮小率を
示す指標で、奏効率や大きさ等から、病変の評価を何段階かのカテゴリに
分けて評価します。ここでは、奏効率と各カテゴリを下記のように効果が
高いほうから単純に奏効率のみで分類・色分けしてwaterfallプロットを作成
します。詳しくはRESISTという固形がんの治療効果判定ガイドラインをご参照
ください。
・完全奏(CR)、部分奏功(PR)、安定(SD)、進行(PD)

プログラムの流れは以下になります。
奏効率とカテゴリのテストデータを生成
⇒奏効率の悪いほうから並べ替えて連番を付与
⇒SGPLOTプロシジャのvbarステートメントでグラフ作成
 (groupオプションに評価カテゴリを指定)
*** テストデータの作成 ;
data _TEST ;
call streaminit(100) ;
do ID = 1 to 40 ;
PCHG_TM = rand("normal",-50,50) ; *--- 奏効率 ;
if PCHG_TM <= -100 then PCHG_TM = -100 ; *--- 奏効率100% ;
select ; *--- 奏効率カテゴリ変数 ;
when( PCHG_TM = -100) RES = 1 ;
when(-100 < PCHG_TM <= -30 ) RES = 2 ;
when(-30 < PCHG_TM <= 20 ) RES = 3 ;
when( 20 <= PCHG_TM ) RES = 4 ;
end ;
output ;
end ;
run ;
*** 奏効率カテゴリフォーマット ;
proc format ;
value _RESF 1 = "CR"
2 = "PR"
3 = "SD"
4 = "PD" ;
run ;
*** 奏効率並べ替えと連番 ;
proc sort data=_TEST ;
by descending PCHG_TM ;
run ;
data _TEST2 ;
set _TEST ;
ID2 = _N_ ; *--- 連番 ;
run ;
*** ウォーターフォールプロットの作成 ;
proc sgplot data=_TEST2 ;
vbar ID2 / response=PCHG_TM group=RES ; *--- groupで奏効率カテゴリ色分け ;
xaxis display=none ; *--- X軸表示せず ;
yaxis label='奏効率(%)' ;
format RES _RESF. ;
run ;


結果は以下になります。簡単に作れるのでマクロ化して使いまわせそうですね。
waterfall.png

Posted on 2014/03/08 Sat. 12:40 [edit]

CM: 2
TB: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top