差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
r:survival:survfit [2018/12/11 19:06] watalur:survival:survfit [2018/12/11 19:32] (現在) watalu
行 1: 行 1:
-==== ノンパメトリックな生存関数の推定法 ====+==== カプン・マイヤー法 ====
  
-カプラン・マイヤー法は、特定の確率分布を仮定しない生存関数の推定法である。+生存関数は時点ごとの生存率を表す関数であり、カプラン・マイヤー法は、特定の確率分布を仮定しない生存関数の推定法である。ノンパラメトリックな生存関数の推定法と言う
 その推定量(推定値の計算方法)を、カプラン・マイヤー推定量と呼ぶ。 その推定量(推定値の計算方法)を、カプラン・マイヤー推定量と呼ぶ。
 ある時点の生存関数をそれまでの各時点の生存率の積で推定する、という計算方法を用いており、この推定量の性質を示す際にproduct limitという考え方が導入されることから、product limit推定量とも呼ばれる。 ある時点の生存関数をそれまでの各時点の生存率の積で推定する、という計算方法を用いており、この推定量の性質を示す際にproduct limitという考え方が導入されることから、product limit推定量とも呼ばれる。
行 14: 行 14:
 |5.5|故障||5.5|1| |5.5|故障||5.5|1|
 |10.3|故障||10.3|1| |10.3|故障||10.3|1|
-|10.0|打ち切り||5.5|0|+|10.0|打ち切り||10.0|0|
 |3.5|故障||5.5|1| |3.5|故障||5.5|1|
 +
 +このデータを小さい順に並び替える。
 +
 +|イベント発生時点|イベントの種類|
 +|3.5|故障|
 +|5.5|故障|
 +|10.0|打ち切り|
 +|10.3|故障|
 +
 +そして時点ごとに、それまでに生存していた数、故障数、打ち切り数を求める。
 +
 +|イベント発生時点|イベントの種類|時点直前までの生存数|その時点での故障数|その時点での打ち切り数|
 +|3.5|故障|4|1|0|
 +|5.5|故障|3|1|0|
 +|10.0|打ち切り|2|0|1|
 +|10.3|故障|1|1|0|
 +
 +各時点での故障率は、故障数/生存数で推定できる。
 +
 +|イベント発生時点|イベントの種類|時点直前までの生存数|その時点での故障数|その時点での打ち切り数|故障率|
 +|3.5|故障|4|1|0|1/4|
 +|5.5|故障|3|1|0|1/3|
 +|10.0|打ち切り|2|0|1|0/2|
 +|10.3|故障|1|1|0|1/1|
 +
 +生存率は、前の時点の生存率×(1-その時点の故障率)で繰り返し計算できる。
 +
 +|イベント発生時点|イベントの種類|時点直前までの生存数|その時点での故障数|その時点での打ち切り数|故障率|生存率|
 +|3.5|故障|4|1|0|1/4|1×(1-1/4)=0.75|
 +|5.5|故障|3|1|0|1/3|0.75×(1-1/3)=0.50|
 +|10.0|打ち切り|2|0|1|0/2|0.50×(1-0/2)=0.50|
 +|10.3|故障|1|1|0|1/1|0.50×(1-1/1)=0|
 +
 +これがカプラン・マイヤー法である。
 +簡単な計算のように見えて、この方法の性質を検討するには、少し難しい確率論を学ぶことになる。
 +以下では、この方法が正しいとして、話を進める。
 +
 +=== 関数survfit ===
  
 このデータをデータフレームで与えるには、次のようにRに伝える。 このデータをデータフレームで与えるには、次のようにRに伝える。
行 67: 行 105:
  10.3      1           0.00     NaN           NA           NA  10.3      1           0.00     NaN           NA           NA
 </code> </code>
 +
 +この表示を読みながら、カプラン・マイヤー法の説明を少し加える。
 +  * データではイベント発生時点は小さい順に3.5, 5.5, 10.0, 10.3の4時点だった。それが上の表示では10.0がなくなっている。
 +  * 時点3.5までは4つの対象が生存している、あるいは故障していない。時点3.5で一つ故障したので、それ以降、次の時点5.5までは3つの対象が生存している、あるいは故障していない。これがn.riskという列の数値の意味である。時点10.3で1とあるのは、それ以前の時点10.0で対象の1つの観測が打ち切られたためである。時点10.3の故障発生時に、それまで生存していることが確認できているのは1つだけだから。
 +  * 各時点の故障率は1/4、1/3、1/1である。これはn.event/n.riskという割り算で求まる。
 +  * survivalは生存関数の推定値である。時点3.5より前には、すべてが生存していたので、時点3.5の故障によって生存率が1から1×(1-1/4)=0.75に減少した。次の時点5.5では、更に0.75から0.75×*(1-1/3)=0.25に生存率が減少した。このように計算するのが、カプラン・マイヤー法である。
 +  * std.errはグリーンウッドの公式など、指定された方法を用いている。信頼区間も同様で、ここでは詳細を省略する。
  
 推定した生存関数を描くには、関数plotを用いる。 推定した生存関数を描くには、関数plotを用いる。
行 85: 行 130:
 {{:r:survival:kaplan-meier-estimate-2.png|}} {{:r:survival:kaplan-meier-estimate-2.png|}}
  
 +
 +実線の折れ線が、カプラン・マイヤー法で推定した生存関数である。1から生存関数を引けば、累積分布関数の推定ができる。このグラフからまずは、寿命分布の密度関数が一山か、二山以上か、を読み取ろうとする。
 +
 +survfitが出力した各時点でのリスクセットの大きさn.riskとその時点での故障数n.eventの比を計算すると、故障率曲線も推定できる。
 +<code>
 +X.survfit = survfit(Surv(time, status)~1, data=X)
 +X.survfit$n.event/X.survfit$n.risk
 +</code>
 +これを縦軸に、時間を横軸にとったグラフ
 +<code>
 +plot(X.survfit$time,X.survfit$n.event/X.survfit$n.risk,
 +     xlab="Time", ylab="Failure Rate")
 +</code>
 +が故障率曲線のノンパラメトリックな推定値となる。
 +
 +=== ノンパラメトリックな推定量の長所と短所 ===
 +
 +ノンパラメトリックな推定量は、確率分布を仮定しないので、当初から色眼鏡で見ることがなく、データをそのまま吟味できるという長所を持つ。実際に観測された時点から先の予測ができない、という短所も合わせ持つ。また、精度よく確率分布を推定するには、とても大きいサンプルを必要とすることも、短所である。