大規模な離散比例ハザード モデル (〜 100k 行、〜 10k イベント) を当てはめようとしています。これを行うために、サバイバルパッケージのドキュメントドキュメントでcoxph(..., method = "exact")
推奨されているように使用しました。
「正確な部分尤度」は、条件付きロジスティック モデルに相当し、時間が離散値の小さなセットである場合に適しています。多数の同点および (開始、停止) スタイルの生存データがある場合、計算時間が過度に長くなります。
coxph
計算上の困難と多数の同点に関する警告がいくつかありましclogit
たが、同じパッケージのドキュメントによると:
ただし、正確な部分尤度の計算は非常に遅くなる可能性があります。特定の階層に、たとえば 20 件の被験者から 10 件のイベントがある場合、20 件から 10 件を選択するすべての可能な方法を含む分母を合計する必要があります。これは 20!/(10! 10!) = 184756 項です。Gail らは、これを大幅に改善する高速再帰法について説明しています。パッケージのバージョン 2.36-11 に組み込まれました
survival
。
そのため、計算の問題がそれほど悪いとは思っていませんでした。それにもかかわらず、自明な (予測子が 1 つの) Cox モデルのバリアントをデータセットに当てはめようとすると、多くのセグメンテーション エラーに遭遇しました。1 つは「C スタック オーバーフロー」であり、簡潔で適切な (そして有益でない) メッセージが表示されます。
Error: segfault from C stack overflow
Execution halted
もう 1 つは「メモリがマップされていません」というエラーです。これは、「イベント」ブール値を誤って反転させて、10k イベントではなく 90k イベントになったときに発生しました。
*** caught segfault ***
address 0xffffffffac577830, cause 'memory not mapped'
Traceback:
1: fitter(X, Y, strats, offset, init, control, weights = weights, method = method, row.names(mf))
2: coxph(Surv(time, status == EVENT.STATUS) ~ litter, data = data, method = "exact")
aborting ...
参考までに、私が実行しているコードは単にcoxph(Surv(t, d) ~ x, data = data, method = 'exact')
. t
は整数列、d
ブール値x
、浮動小数点数です。
これらは既知の問題ですか? 回避策はありますか?
編集:rats
データセットの問題を再現するコードを次に示します (1000 回複製):
library(survival)
print("constructing data")
data <- rats
SIZE <- nrow(rats)
# passes with 100 reps, but fails with 100 on my machine (MacBook Pro, 16g RAM)
REPS <- 1000
# set to 0 for "memory not mapped", 1 for "C stack overflow"
EVENT.STATUS <- 0
data <- data[rep(seq_len(SIZE), REPS), ]
print(summary(data$status == EVENT.STATUS))
print("fitting model")
fit <- coxph(Surv(time, status == EVENT.STATUS) ~ litter,
data = data, method = "exact")
そして、ここにありますversion
:
platform x86_64-apple-darwin14.0.0
arch x86_64
os darwin14.0.0
system x86_64, darwin14.0.0
status
major 3
minor 1.2
year 2014
month 10
day 31
svn rev 66913
language R
version.string R version 3.1.2 (2014-10-31)
nickname Pumpkin Helmet