生存時間解析をもう一度丁寧に勉強しなおしているところで、以前に作成したカプランマイヤー曲線に関する記事だと少し内容が物足りないところがあるかなということで、内容を補足していこうと思います。なお生存時間解析自体の理論的な話については、下記の記事でシリーズものとしてまとめているのでそちらを参照いただけると幸いです。
LIFETEST プロシジャについて
生存時間解析を行うことができるプロシジャには他にもPHREGなどがありますが、今回はLIFETESTプロシジャを用います。基本的な構文はこんな感じ。
必須となるステートメントはTIMEで、このステートメントでは生存期間と打ち切りを示す変数を用います。生存期間を表す変数の後にアスタリスク、打ち切り変数(打ち切りを意味する値)とすることで基本的なステートメントはOKです。また細かいオプションもいくつかあるので、ぜひ後述のHelp Centerを参考にしてみてください。
例えばTという変数が生存期間を、Statusという変数がイベントと右側打ち切りの情報を示しているとした場合(イベント発生なら1、打ち切りなら0)には次のようにステートメントは記載します。
ポイントとしてはここでは打ち切りを示す値のみ(今回だと0)を記載すればOKで、それ以外の値に関してはすべてイベント発生として処理が行われます。
今回の例では、これ以上の知識は必要としないのでより詳細に知りたい場合には以下のSASのHELPを参照ください。
分析例紹介
今回の分析例ではSASHELP内にあるBMTデータを用いて生存時間解析の例を簡単にやっていこうかなと思います。データの特性上、共変量調整などは行ってはいないのであくまでSASLIFETESTプロシジャを使って生存時間をやってみたよという立ち位置であることをご理解ください。
使用データ説明
使用するデータは、SASHELPにあるBMT(Bone Marrow Transplant Data)データです。これはKlein and Moeschberger(1997)で生存時間解析の手法紹介のために用いられたものであり、オブザベーション数が137、項目数が3のデータとなっています。
Groupという列には対象患者のリスクカテゴリーが記載されています。データに含まれる骨髄移植を受けた被験者は観察開始時点で、次の三つのカテゴリーグループに分かれます。
137例中の割合としては下記の通りです。
このALLとかAMLっていうのが一体なんぞや?となるかなと思いますが、ファイザーがかなり分かりやすくまとめていたので、以下を参考にください。
ちなみにこういった医学分野のことも興味深いので、実は医学部にも行きたかったりも実はしています。
この研究のエンドポイントは白血病による死亡・再発で、Tという列は各個人の生存期間を示しています。そして最後にStatusという列は各個人のイベント発生に関する二値変数です。これはイベントが発生した場合には1を、イベントが発生せず打ち切りとなった場合には0を取ります。
解析内容
今回の解析では、患者のグループごとの生存関数が異なるかどうかを検討します。
まずは各群における要約指標を確認します。
これを見ると、AML-Low Risk, ALL, AML-High Riskの順に期間中にイベントを発生する人が多いことがうかがえます。
ログランク検定、Wilcoxson検定の検定統計量、検定結果は
となっており、この結果から帰無仮説H0「群の生存関数は同等なものである」を棄却し、統計的に優位に異なると結論付けます。
カプランマイヤー曲線は
デフォルトから少しいじって次のようなものを表示させています。
- logrank検定の結果
- Hall wellner信頼バンド
- 各生存期間(500区切り)における各群のリスク集団の人数
こういった検定方法、諸情報についての解説は記事の冒頭で記載した別の記事シリーズで紹介していく予定でいるので、ぜひそちらも参照ください。
コード
title 'Bone Marrow Transplant Data';
proc contents data=sashelp.BMT varnum;
ods select position;
run;
title 'The Risk Group Variable';
proc freq data=sashelp.BMT;
tables group;
run;
title 'The First Five Observations Out of 137';
proc print data=sashelp.BMT;
run;
proc lifetest data=sashelp.BMT
plots=survival(cb=hw test atrisk(outside(0.15)));
time T*Status(0);
strata Group / order=internal;
run;