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

徒然なるままにSAS暮らし

0210

FCMPプロシジャによる生存時間解析の症例数設計  

FCMPプロシジャで生存時間解析の症例数設計を行います。
Schoenfeldの式と呼ばれる計算式で必要イベント数と症例数を
算出します。

想定する状況:
2つの投与群の生存関数を比較する際に、各群の対数ハザード
(ハザード:瞬間死亡率)が正規分布に従うと仮定しています。
λ1,λ2: 各群のハザード
S(t1), S(t2): 各群の時間tにおける生存率
d: 各群の必要イベント数
N: 各群の必要症例数
CALCS.png

関数の引数は、各群の生存率、時間、AlphaとPower(検出力)となります。
FCMPに「$」を指定することで、戻り値を文字変数とすることができます。
*** 生存関数の比較における各群の症例数算出(Schoenfeldの式) ;
proc fcmp outlib=WORK.FUNCDT.DIFFS ;
function _CALCS(S1,S2,T,Power,Alpha) $ 30 ; *--- 戻り値は文字 ;
H1 = (-1)*log(S1)/T ; *--- A群のハザード ;
H2 = (-1)*log(S2)/T ; *--- B群のハザード ;
HR = H2/H1 ; *--- ハザード比 ;
Za = probit(1-Alpha/2) ; *--- 上側(1-Alpha/2)*100%点 ;
Zb = probit(Power) ; *--- 上側(1-Beta)*100%点 ;
dSchoen = 2*(Za+Zb)**2/(log(HR)**2) ; *--- 各群の必要イベント数 ;
N_S = ceil(2*dSchoen/(2-S1-S2)) ; *--- 各群の必要症例数 ;
*--- 必要イベント数と必要症例数を文字変数で返す ;
D_N = "#Events: "||compress(put(dSchoen,6.))
||' N/group: '||compress(put(N_S,best.)) ;

return(D_N) ;
endsub ;
run ;
*** 関数の実行 ;
options cmplib=WORK.FUNCDT ;
data RES ;
length NN $30. ;
NN = _CALCS(0.6,0.7,4,0.05,0.8) ;
run ;
proc print data=RES ; run ;


結果を見てみましょう。各群の必要イベント数と必要症例数が文字列として
格納されています。
SS2.png


スポンサーサイト

Posted on 2014/02/10 Mon. 23:42 [edit]

CM: 0
TB: 0

0209

平均値の差における必要症例数を計算する関数  

FCMPプロシジャで平均値の差を検証する際の症例数設計を
行う関数を作成してみます。得られるデータに正規分布を
仮定した場合の各群の必要症例数は以下の式で与えられます。
CALCN.png
有意水準(片側2.5%)、検出力、バラツキ、平均値の差を与えることで
症例数を計算することができます。
*** 平均値の比較における各群の症例数算出 ;
proc fcmp outlib=WORK.FUNCDT.DIFF ;
function _CALCN(Diff,Stddev,Power,Alpha) ;
Za = probit(1-Alpha/2) ; *--- 上側(1-Alpha/2)*100%点 ;
Zb = probit(Power) ; *--- 上側(1-Beta)*100%点 ;
N = ceil(2*(Za + Zb)**2*Stddev**2/Diff**2) ; *--- 各群の必要症例数 ;
return(N) ;
endsub ;
run ;
*** 関数の実行 ;
options cmplib=WORK.FUNCDT ;
data RES ;
NN = _CALCN(2.0,3.5,0.9,0.05) ;
run ;
proc print data=RES ; run ;

結果は以下になります。各群の必要症例数は65例となります。
SS1.png

Posted on 2014/02/09 Sun. 21:43 [edit]

CM: 0
TB: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top