Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R'中的分段错误;s-Cox回归,带“;确切的;领带_R_Segmentation Fault_Stack Overflow_Cox Regression - Fatal编程技术网

R'中的分段错误;s-Cox回归,带“;确切的;领带

R'中的分段错误;s-Cox回归,带“;确切的;领带,r,segmentation-fault,stack-overflow,cox-regression,R,Segmentation Fault,Stack Overflow,Cox Regression,我试图拟合一个大型离散比例风险模型(~10万行,~10万个事件)。为此,我使用了文档建议的coxph(…,method=“exact”),其中说明: “精确部分似然”等价于条件logistic模型,并且在时间是一组小的离散值时适用。如果有大量的联系和(开始、停止)式生存数据,计算时间将过多 有一些关于coxph计算困难的警告和大量的关系,但根据同一包中clogit的文档: 然而,精确部分似然的计算可能非常缓慢。如果一个特定的阶层有,比如说20个主题中有10个事件,我们必须加上一个分母,包括所有可

我试图拟合一个大型离散比例风险模型(~10万行,~10万个事件)。为此,我使用了文档建议的
coxph(…,method=“exact”)
,其中说明:

“精确部分似然”等价于条件logistic模型,并且在时间是一组小的离散值时适用。如果有大量的联系和(开始、停止)式生存数据,计算时间将过多

有一些关于
coxph
计算困难的警告和大量的关系,但根据同一包中
clogit
的文档:

然而,精确部分似然的计算可能非常缓慢。如果一个特定的阶层有,比如说20个主题中有10个事件,我们必须加上一个分母,包括所有可能的方法,从20个主题中选择10个,也就是20/(10!10!)=184756个术语。Gail等人描述了一种快速递归方法,该方法在很大程度上改善了这一点;它被纳入了
survival
软件包的2.36-11版

所以我没想到计算问题会太糟糕。然而,当我试图在我的数据集上拟合一个简单(单预测)Cox模型的变体时,我遇到了许多分割错误。一种是“C堆栈溢出”,导致短而甜美(且无信息)的消息:

另一个是“内存未映射”错误,这是在我意外翻转“事件”布尔值时发生的,因此我有~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次):


我能够用这个数据集建立泊松模型。(我有一个很大的数据集,我不愿意冒可能出现故障的风险。)

fit
调用:glm(公式=I(状态=0)~litter+offset(log(time)),family=poisson,
数据=数据)
系数:
(拦截)垃圾
-4.706485    -0.003883  
自由度:总计149999(即零);149998剩余
零偏差:60500
剩余偏差:60150 AIC:280200
这种对垃圾影响的估计应该与从Cox-PH模型得到的结果相似


如果你想看到“抵消技巧”的记录,请访问Breslow和Day的经典专著:“癌症研究中的统计方法;第二卷-队列研究的设计和分析”。他们使用了GLIM软件包,但代码与R的glm实现非常相似,因此概念的传输应该非常简单。(我曾有机会与诺姆·布雷斯洛使用GLIM在我的硕士论文中进行了短暂的合作。他非常出色。我认为是我之前接受的GLIM培训使学习R变得如此容易。)

你能用
生存
中包含的任何数据集进行复制吗?(使用'data(package='survival')`列出这些)SEGFULTS应该提示您打包一个可复制的示例并将其发送给Terry Therneau。据我所知,他很少来。@BondedDust:谢谢你的提醒。不过,我也想知道在bug修复之前是否有任何可能的解决方法。我曾考虑过使用
try
,但这对segfaults不起作用。您确定需要使用“精确”吗?其他可能更适合分组数据的比例风险模型是泊松glm模型。是的。事件数据是离散的,因此有大量的联系(100k行中只有~35个唯一的事件时间)。我知道Efron和Breslow的近似与这种情况下的精确方法有很大的不同。哦,我以前没见过泊松偏移技巧。真聪明!但是,这个模型不是假设了一个恒定的危险吗?是的,它假设了,但是
coxph
也假设了一个恒定的相对危险。对不起,我的意思是泊松回归似乎假设基线危险函数是恒定的,而不仅仅是恒定的相对危险(而Cox回归没有对基线风险的形状做出任何假设,尽管它确实假设了任意两个数据点之间的恒定风险比)是的。这就是方法的不同之处。你可以构建具有分段可变危险的模型,但你需要将时间和事件分割成间隔。塞诺教授回答我的错误报告时说,即使有更好的
生存率
代码和错误,这种联系的数量在计算上也是难以解决的这是因为它试图分配比我的机器更多的内存。他建议我使用Efron近似值,尽管有大量的关系,所以我将这个答案标记为精神上是正确的(“不要使用确切的模型”)。
 *** 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 ...
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")
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
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