医療職からデータサイエンティストへスマートフォン用の表示で見る医療職からデータサイエンティストへ統計学、機械学習に関する記事をまとめています。R生存解析は医療の現場で用いられている手法で、ある薬を飲む群と飲まない群で死亡率が異なるのかなどといったアウトカムが生きるor死ぬなどの二値で、アウトカム発生までの時間の流れも考慮しなければならない場合に使用されます。ビジネスの世界では、会員登録制サービスでの登録・解約に対する施策や、HR(ヒューマンリソース)分野での退職や転職に影響する要因などを検討する際にも用いることもできるでしょう。今回は、そんな応用範囲が広いであろう生存解析について紹介していきます。生存解析は少し複雑ですので、詳細な理論等は参考サイト等をご参照ください。起こらないなどの二値であるデータに対する解析法で、有名なものとしてはロジスティック回帰があります。どんな要因が影響しているかなどの検討や、どれぐらいの確率で商品を購入するかなどの予測にも用いることが出来ます。生存解析でもアウトカムは二値ですが、ロジスティック回帰とは何が違うのでしょうか?生存解析とロジスティック回帰の最も大きな違いは、アウトカムまでの時間の長さを考慮するかどうかにあります。会員制登録サービスの顧客が、解約するかどうかに影響する要因を検討したい場合、解約する人の中には、登録から解約まで数日の人もいれば、数週間、数ヶ月の人もいるでしょう。その登録している間の長さも考慮して解析出来るのが生存解析です。生存解析の中でも有名な解析法が2つあり、一つはカプランマイヤー法(Kaplan-Meier)によるもの、もう一つはコックス比例ハザードモデルによるものです。この2つの違いは、カプランマイヤー法が記述や単変量の比較を目的にするのに対して、コックス比例ハザードモデルは、多変量の要因解析を目的とすることです。以上をまとめると生存解析の立ち位置とは以下のようになります。具体的な手法の前に、そもそも生存解析とは何をするものなのかを説明しましょう。ややこしいのでざっくりと理解できればOKです。生存解析とはズバリ"ハザード"をモデル化することを目的とした解析手法になります。ハザードとは、ある時点で生きていて、その次の時点で死亡する確率のことで、ハザードをモデル化したものをハザード関数:h(t)と呼びます。10人の人を生まれてから死ぬまで毎年追跡するとしましょう。追跡開始5年後に1人が死亡しました。5年後に死亡する確率(ハザード)は1/10ですね。その2年後に今度は2人死亡しました。この時9人が生存していて、そのうちの2人が死亡したので、ハザードは2/9となり、その2年後にも2人死亡したとするとハザードは2/7となります。このハザードをある関数でモデル化したとするとと表すことができます。累積ハザード関数:H(t)とは、ある時点で死亡している確率を表し、先ほど同様に表すととなりますね。今度は逆にある点で生きている確率を表す生存確率について考えてみます。5年後は9人が生きているので生存確率は9/10、その2年後のは7人が生きているので7/10、さらにその2年後は5人が生きているので5/10となります。この生存確率をモデル化したものを生存関数:S(t)と呼び、先ほどと同じように表してみるととなります。1から累積ハザードを引くと生存確率となるため、累積ハザード関数から生存関数を求めることもできます。ところで生存確率はある時点で生きている、かつ、その次の時点でも生きている確率とも言い換えることができます。ここで、ある時点で生きている確率は1からハザードを引いた確率に等しいので、ハザード関数から生存関数を求めることができます。このように生存関数、ハザード関数、累積ハザード関数をどれも等価なものであるため、どれを求めても結局は同じになり数式上でも変換可能です。長くなりましたが結局、カプランマイヤー法:生存確率やハザードをモデル化せず、確率のまま解析するノンパラメトリックな解析法コックス比例ハザードモデル:ハザードをモデル化することを目的としたセミパラメトリックな解析法になるので、ターゲットが少し違うだけで意味合いは同じであることを覚えておきましょう。その他いろいろな方法がありますが、大きく分類すると機械学習系と統計モデル系(〜系は筆者のオリジナルワードです)があり、さらに統計モデル系の中には、パラメトリックモデル、セミパラメトリックモデル、ノンパラメトリックモデルがあります。生存するかどうかの予測に興味があれば、機械学習系のモデルを使い、要因や因果関係に興味があれば統計モデル系を使います。統計モデル系では、どの解析手法を使うかによって制約が異なるので、注意が必要です。本記事では紹介しないパラメトリックモデルの例では、生存関数を指数分布やワイブル分布でモデル化して解析を行いますが、分布を決め打ちしてしまっているため現実とはかけ離れる場合があります。この辺りは深入りするとかなり複雑になるので、その他の手法にご興味がある方は、下記参考サイト様などをご覧ください。今回は肺ガンと死亡率に関する226人のデータを使って、男女によって肺がんによる死亡率に違いがあるかどうかを検討します。データは以下のような感じです。lossは死亡前6か月間の体重減少量です。今回は簡単にするために、死亡までの日数を100日単位で丸めています。ここで打ち切り(censor)とは、アウトカムが観測されるまえにデータが途切れてしまった場合のことを指します。明らかに肺がんに関係なく死亡した場合、転院となった場合、事情によりデータ収集ができなった場合などなど打ち切りの理由は様々ですが、これはアウトカムの発生とは区別する必要があります。それではカプランマイヤー法で解析を行なっていきます。カプランマイヤー法の目的は生存確率を求めて、その確率に差があるかどうかという観点で解析を行います。アウトカム発生までの時間ごとの生存確率を計算していきましょう。0日目の性別ごとの人数と100日目までの死亡数を数えてみます。7死亡者が男性24人、女性7人、打ち切りが1人ですね。以上から生存確率を求めます。この段階では打ち切りは考慮されていません。11となって、100日目までに女性の打ち切りが1人いたことに注意して、200日目時点での生存確率は、100日目まで生きている確率と200日目まで生きている確率から求められるので、となります。ちなみに女性の82という人数は、前の時点での打ち切りを抜いた数になっています。0.0999273となります。公式なるものを使って分散を求めます)とともにグラフにしてみるとこれをみると女性の方が生存確率が高そうですね。実はカプランマイヤー法は記述と単変量の比較が目的であるため、これで終わりなのです。これを統計的に検定するのが”生存確率に差はない”を帰無仮説としたログランク検定という方法で、グラフに表示されているp値がその結果です。83のような2×2のカイ二乗検定を各時点で合算した統計量を使って行います。詳細は参考(1)をご覧ください。コックス比例ハザードモデルカプランマイヤー法は、データの可視化や単純な比較などに使うことはできますが、検討したい要因がたくさんあった場合は対処できません。そこで、多くの変数を投入して解析できるのが、コックス比例ハザードモデルです。コッス比例ハザードモデルは名前の通り、ハザードをとモデル化します。この式が表すのは、時間に依存する部分と依存しない部分に分けてt時点のハザードを求めています。ここからが少しややこしいのですが、コックス比例ハザードモデルでは、ハザードの値を直接求めず、その比率で変数の影響力を解析するという妙技を使います。ハザードを直接モデル化はしませんが、要因がハザードにどれぐらい影響しているのかということは分かるのです。このことからセミパラメトリックモデルと呼ばれています。2)のみだとして、先ほどのハザードの比率を求めてみるととなって、うまい具合にh(t)が約分されるので、性別の係数のみが残ります。倍になるという意味になります。この係数を実際に求めてみるととなるので、t時点の女性のハザードは男性に比べて0.56倍、つまり半分ぐらいになるということです。この係数の求め方は部分尤度法というややこしい方法を使うのですが、今回は説明を省かせて頂きます。ところで、なぜこんなことをするかというと、ハザードを直接モデル化するには、ハザードを何らかの関数で表すことができるという仮定を置かなければなりません。実際にはどんな関数になるのかは誰にもわからないので、諦めてそのハザードの比率から要因を検討しようというのがコックス比例ハザードモデルの考えです。1.0005492となって、性別とph.ecogという変数が、ハザード比で1を跨いでいないので影響を及ぼしていることが分かりますね。ここで、お気付きの方もいらっしゃるかもしれませんが、このモデルではかなり強い制約を置いています。それは、ハザードの比が時間に関係なく一定であるという過程です。性別によるハザード比がt=100日目もt=500日目も同じであるということです。何とも強い仮定ですね。本来であればこのあと、比例ハザード性の確認など色々と検討事項があるのですが、今回はざっくり概要編ということで省かせて頂きます。Rで生存解析Rで生存解析を行うにはsurvivalパッケージを使います。可視化にはsurvminerパッケージを使うと良いでしょう。ceiling(time*0.01)*100)ここからSurv{survival}とsurvfit{survival}を使ってカプランマイヤー法による解析を行います。テーマを変えることもできる。)結果の詳細を見るには通常のsummary{base}を使っても良いですが、surv_summary{survival}を使うとより見やすい形で結果を見ることができます。可視化にはsurvfit{survival}の結果をplot{base}に渡しても図示してくれますが、ggsurvplot{survminer}を使うとより綺麗にグラフ化できます。ログランク検定はsurvdiff{survival}を使って実行できます。次はコックス比例ハザードモデルです。coxph{survival}を使って実行します。missingness)記事の中では触れていませんが、cox.zph{survival}を使うと比例ハザード性の検定ができます。帰無仮説は"比例ハザード性がある"ですので、棄却された場合はこのモデルの仮定が正しくない可能性があります。#これはよく分かりません..まとめ生存解析は少しマニアックな部類に入りますが、私的には結構好きな概念です。今回は生存解析の中でもよく出てくる二つのモデルを紹介しましたが、実践的にはもう少し柔軟なモデルの方が良いかもせんね。この辺りも時間があれば記事にしていきます!※本記事は筆者が個人的に学んだことをまとめた記事なります。所属する組織の意見・見解とは無関係です。数学の記法や詳細な理論、用語等で誤りがあった際はご指摘頂けると幸いです。はてなブログPro大学院で疫学統計を学んでいます。データサイエンティストを目指して、初心者目線から統計学、機械学習など学んだことをまとめていきます。パッケージ{prophet}を使って、ブログアクセス数を予測する。medi_data0826スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。