我試圖擬合一個大的離散比例 - 危害模型(〜100k行,〜10k事件)。爲此,我使用coxph(..., method = "exact")
所推薦survival package documentation文檔,其中指出:R的Cox迴歸中的「精確」關係的分割錯誤
「精確局部可能性」是相當於一個條件Logistic模型,並且當所述的時間是一個小組離散值是適當的。如果存在大量關係和(開始,停止)式生存數據,則計算時間將過度。
大約有與coxph
和大量關係的計算難度一些警告,但根據在同一個包的文檔clogit
:
確切的局部可能性的計算可能會很慢但是。如果一個特定的階層有20個主題中的10個,我們必須加上一個分母,其中包含選擇20箇中的10個,即20!/(10!10!)= 184756個術語的所有可能的方式。 Gail等人描述了一種快速遞歸方法,該方法在很大程度上改善了這一點;它被合併到
survival
包的2.36-11版中。
所以我沒想到計算問題太糟糕了。儘管如此,當我嘗試在我的數據集上擬合一個不重要的(單預測)Cox模型的變體時,我遇到了很多分割錯誤。一個是「C堆棧溢出」,導致在短期和甜(和無信息)消息:
Error: segfault from C stack overflow
Execution halted
另一種是「存儲器未被映射」的錯誤,當我意外翻轉「事件」布爾發生所以,我不得不〜90K事件,而不是〜10K:
*** 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
您可以使用'survival'中包含的任何數據集來重現嗎? (使用'data(package ='survival')'列出這些) – jaimedash 2015-03-13 19:57:23
Segfaults應該提示你打包一個可重複的例子並將它發送給Terry Therneau。據我所知他不經常訪問。 – 2015-03-13 20:07:16
@BondedDust:謝謝你的提醒。不過,我也很想知道是否有任何可能的解決方法,直到錯誤得到修復。 – 2015-03-13 20:47:22