生存時間分析【No.2ノンパラメトリックモデル】
目次
※用いている統計ソフトはRです.
【No.1生存時間とは】を見ていない方はこちら👇
suzume-statistics-diary.hatenablog.jp
(ⅰ)ノンパラメトリックの例
まずはノンパラメトリックの例についてみていく.
下のグラフは,gehan(ゲーハン)投与群と対照群のカプランーマイヤー法による生存曲線です.
gehan(ゲーハン),カプランマイヤー曲線,生存曲線と聞き慣れない概念が出現しました🤦♀️🤦♀️🤦♀️
でも大丈夫です.順に説明していきます!
gehan(ゲーハン)とは...?
Rという統計解析ソフトのMASSパッケージ内にある42人の白血病患者に対する薬の効果を調べるために行った臨床試験データのことです.gehanは生存分析の例題としてよく用いられています.被験者は※6ーMP(6ーメルカプトプリン)の投与群と対照群(投薬していない群)のペアによって構成されています.
gehanのデータ↓↓
×:死亡(イベント発生)
△:打ち切り①(継続できなかった)
〇:打ち切り②(研究終了まで生存)
「白血病患者に薬を投与してから何日後に死亡するか」ということ.
※6ーMP(6ーメルカプトプリン)とは,抗がん剤の一種.副作用として,脱毛,貧血などが起こる.
memo:白血病
白血病は血液のがんです.血液細胞には赤血球,血小板,白血球がありますが,これらの血液細胞が骨髄でつくられる過程で、がんになります。がん化した細胞(白血病細胞)は、骨髄内で増殖し,骨髄を占拠してしまいます.そのため,正常な血液細胞が減少し,貧血,免疫系のはたらきの低下,出血傾向,脾臓(血液を貯蔵しておく臓器)の肥大などの症状があらわれます.
統計解析ソフト,Rで元のデータを確認してみる👇
pair;比較ペア
time;生存時間
cens;打ち切りか否か
treat;抗がん剤を投与したか否か
赤い文字が入力したもので,青い文字が出力された文字です.
上から何を打ち込んだのか解説していくと...
①library(survival)とlibrary(MASS)
👉library()は必要なプログラム群(パッケージ)を呼び出す指令.
イメージとしては..
libraryは図書館という意味!図書館から本を探して中身の内容を理解してプログラムの中でその本の知識を使っているようなもの.
②data(gehan);dim(gehan)
👉library(MASS)で導き出したMASSパッケージ内にあるgehanというデータを
dimで行列として表す.
gehan[ ]は42人のデータが表示されます.gehan[1:x,]と入力するとx人のデータが表示されます.
(ⅱ)カプランマイヤー曲線とは...?
Q)カプランマイヤー曲線とは?
👇
A)生存時間曲線の一種
Q)生存時間曲線とは?
👇
A)生存関数のグラフのこと
Q)生存関数とは?
👇
A)t時点までイベントが起こらない確率
=「t時点まで生きている確率」
生存関数の定義
あるイベントが起こるまでの時間を表す確率変数をT(T>0)とする。
Tの確率密度関数をf(t)、累積分布関数をF(t)とする。
生存関数 S(t)は...
生存曲線の特徴
例えば,上のような生存曲線があるとする.横軸は時間,縦軸は生存率です.
このとき,
① t=0の時、S(0)=1.0
② t=∞の時、
に収束する単調減少(非増加)関数
となります.
カプランマイヤー曲線をかいてみる
生存曲線を考えるため,7人の被験者を無作為抽出し,例として生存日数が
3 5 5 7 8 9 10
である生存時間データを考える.
step1
観察開始時0日から3日目まで,イベントは起こらず全て生存していたので,
S(t)= 1.0 ( 0 ≦ t ≦3 )
step2
3日目でイベントが発生(死亡)したので3日目が過ぎた瞬間を3+0とすると,
S(3+0)= 6/7 (7人中6人がまだ生存していますよ,という意味)
step3
3+0日目から5日目までのイベントが起こらないので,
S(t)= 6/7 ( 3 ≦ t ≦ 5 )
同様にそれ以降を続けていくと・・・
生存曲線は,
gehanのカプランマイヤー曲線をRをつかってプロット
出力結果☟
グラフの”ひげ”は打ち切りデータを表しています.「mark.t=T」はひげをつけるプログラムです.「mark.t=F」または,「mark.T」をつけないとひげがつかないグラフになります.(一番初めに取り上げたグラフと同じグラフです.)
(ⅲ)ログランク検定
下のグラフはgehanのデータをカプランマイヤー曲線で表したものです.
明らかに6-MPを投与した方の観察患者の方が長生きしているように見えます.
それを明確に数値で表すのが.. ログランク検定
(データgehanのような2群以上の観測値が得られたときは群ごとの生存曲線の間の差の有意性について検定を行いたい.そこで使うのがログランク検定.)
実際に先ほどのデータでログランク検定を行ってみると...
p値が0.05より小さいので2群には有意差があるといえる!
ログランク検定の特徴と問題点
・特徴;時間に依存しない
・問題点;単変量解析
単一の因子によって群を場合分けし、群間で生存関数に有意差がないかを検定する.
👇よって,
多数の要因が関与するときは,Cox比例ハザードモデルや層別log-rank検定などを利用する.
Rで入力したデータをそのまま書いたのでコピペして実際に入力してみてください.
※赤い文字のところが入力したプログラム.
#はプログラムの説明です.
>library(survival);library(MASS);
>data(gehan);dim(gehan);
[1] 42 4
>gehan[]
>Surv(gehan$time,gehan$cens)
#データオブジェクトを作成する.(返された結果は生存時間モデルの目的変数として用いられる.)”+”がついているのは打ち切りデータ.
[1] 1 10 22 7 3 32+ 12 23 8 22 17 6 2 16 11 34+ 8 32+ 12 25+ 2 11+ 5 20+ 4 19+ 15 6 8 17+ 23 35+ 5 6 11 13 4 9+ 1 6+ 8 10+
>gehan.data<-survfit(Surv(time,cens)~treat, data=gehan)
#survfitはノンパラメトリック法による生存時間を当てはめる関数.
その関数を「gehan.data」と名付けている.(timeを目的変数,treatを説明変数とした関数.)
>gehan.data
#データgehanにおける投与群と対照群ごとの標本(n),イベントの件数(event),中央値(median),両側の区間推定(95%信頼区間)の情報が返される.
> plot(gehan.data,mark.t=T)
#「gehan.data」の生存曲線が返される.
(mark.t=F とするとひげがなくなる.)
>survdiff(Surv(time)~treat,data=gehan)
#関数survdiffを用いてログランク検定を行う.
最後までお読みいただきありがとうございました🌻🌻🌻
参考文献