1

大規模な離散比例ハザード モデル (〜 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
4

1 に答える 1

1

そのデータセットでポアソン モデルを作成できます。(セグメンテーション違反の危険を冒したくない大規模なデータセットがあります。)

fit <- glm(  I(status == 0) ~ litter +offset(log(time)), 
               data = data, family=poisson)

> fit

Call:  glm(formula = I(status == 0) ~ litter + offset(log(time)), family = poisson, 
    data = data)

Coefficients:
(Intercept)       litter  
  -4.706485    -0.003883  

Degrees of Freedom: 149999 Total (i.e. Null);  149998 Residual
Null Deviance:      60500 
Residual Deviance: 60150    AIC: 280200

の効果のこの推定値はlitter、Cox PH モデルから得られるものと似ているはずです。

文書化された「オフセットトリック」を見たい場合は、Breslow と Day の古典的なモノグラフ「Statistical Methods in Cancer Research; Vol II- The Design and Analysis of Cohort Studies」にアクセスしてください。彼らは GLIM ソフトウェア パッケージを使用しましたが、コードは R の実装と非常に似ているglmため、概念の伝達は簡単です。(私は GLIM を使った修士論文で Norm Breslow と簡単に仕事をする機会がありました。彼は優秀でした。R をとても簡単に習得できたのは、以前の GLIM のトレーニングだったと思います。)

于 2015-03-13T21:02:03.133 に答える