区間打ち切りデータのコックス回帰

    • 駒場時代からの友人であるA君からRで区間打ち切りのある生存時間データをコックス回帰する方法について相談を受けたので、少し調べてみた。

      彼は区間打ち切りデータ(interval censored data)を解析する(icenRegパッケージ)[R](ねこすたっと)を参照し、icenRegパッケージを使おうとしてエラーに見舞われたとのこと。

      とりあえず手元で動くかどうかを試してみたところ(ただしtidyverseは嫌いなので、tidyverseを使わない書き方[d <- IR_diabetes; d$left <- ifelse(d$left < quantile(d$left, 0.1), 0, d$left); d$right <- ifelse(d$right > quantile(d$right, 0.9), Inf, d$right);]でデータフレームdを作成したが)、core i9マシンだというのにかなり時間は掛かったものの、無事に動いたことから、たぶんパッケージインストール時に依存パッケージを自動的にインストールするdep=TRUEオプションを付けなかったのではないかと思われたので、そのようにアドバイスした。

      区間打ち切りデータへのコックス回帰は、Rに標準実装されているsurvivalパッケージのcoxph()ではできないのだが(注:カプラン=マイヤ法で生存時間の中央値を推定するsurvfit()や、パラメトリックモデルを当てはめるsurvreg()は区間打ち切りデータも使える)、cranを探ると、何もicenRegに限らず、他にもいくつかパッケージがある。ICsurvパッケージやICcalibパッケージ(論文も出ている)、intccrパッケージが見つかった。それぞれ癖があって既存データに簡単に使うことは難しかったが、もしパッケージ依存以外の理由でicenRegパッケージが動作しないなら、これらを試してみるのも良いかもしれない。

      あと、SmoothHazardパッケージも使えるかと思ったが、これは加速モデルのようだった。また、元のコックス回帰と違いがあるのかもしれないが、区間打ち切りデータのためのCox-Aalenモデルも、既にcranからは除去されてしまっているが、coxintervalパッケージにcoxaalen()という関数として実装されていた。

      昔タシンボコ研究で出生分析をしたとき(人口学研究に2000年に研究ノートとして載った)、出生間隔のデータに区間打ち切りが入っていて、当時は東大にいたのでSASで分析した(第1子と第2子の出産間隔の分析だったので、産後無月経期間を考慮したモデルについてはCでコードを書いた)ことがあったので、あれをRでやり直してみるかな。というわけで、BI_TF.Rを書いてみた。

      ちなみに、RのSurv(start, end, (event, )type="right/left/counting/interval/interval2")で区間打ち切りを示すためにはイベントフラグ(event)を3にするが(イベントフラグが3でないレコードについてはendは無視される)、区間の与え方にはtype="interval"とtype="interval2"の2種類がある。前者が(start, end]であって、event=を引数として与えねばならないのに対して、後者では、左側打ち切り(event=2)が(-Inf, end)、右側打ち切り(event=0)が(start, Inf)、正確なイベント発生時(event=1)は(start, end)(注:この時はstart=endのはずだから、[start, end]と書くべきかもしれないが、helpには(t, t)と書かれている)、区間打ち切り(event=3)が(start, end)を示し、type="interval2"の方が役に立つことが多いとわかってきたとhelpに書かれている。なお、無限を示すにはInfでもNAでも良いとのこと。重要なポイントは、type="interval2"の場合、startとendの値から自動的にeventは判定されるので、引数としてeventを与えてはいけない(エラーになる)ということである。

      A君から再びメールがあり、今度はflexsurvパッケージのflexsurvspline()関数を試しているそうだ。Rはできることは多いのだが、パッケージの種類が多すぎ、それぞれ癖があるのが初心者に優しくないところだと思う。できるだけ追加パッケージを使わなくてもできる解析にしておく方が安全なのだが、やりたいことが複雑だとそうもいかないのが辛いところ。

      メールの返事に書いた参考情報をここにも採録しておこう。

      Rの関数のヘルプは、例えばicenRegパッケージに入っているic_sp()関数のヘルプを見たいなら、library(icenReg); ?ic_spで良い。もっと見やすく表示されるサイトがいくつかあって、例えば、ic_sp()を見るには、r-universeや、r-packages.ioの該当ページ(検索もできる)が見やすい。ついでにr-universeで見つけたicsp2パッケージのic_sp2()関数は区間打ち切りデータに対してコックス回帰をするのに良いかもしれない。統計学的に高度なことをやっているパッケージの多くは数式の丁寧な説明が論文になっているので、それを読んでおく方が良く、icenRegも論文になっている。先人のQ&AがStack ExchangeやStack Overflow(リンク先はともにic_spを検索した結果)に蓄積されているので、それが参考になることも多い。どうしても困った時はr-helpというメーリングリストがあるので、そこで再現可能なコード例を付けて尋ねると、大抵の場合、誰か答えてくれる人がいるのだが、helpを見ればわかるようなことを尋ねると叱られるので要注意(自分が書いた2冊目のR本の1.1.1 フリーソフト利用上の心得に書いた)。 


  • コメント

    このブログの人気の投稿

    対応のある多群間のノンパラメトリックな比較のためのFriedmanの検定後の対比較について

    カテゴリ3つ以上の割合の信頼区間

    CochranのQ検定の話