我正在使用coxph()
函数进行多点触控归因问题。它是一个拥有大约100万数据的大型数据集,但目前我运行的是一个大约100000的子集。我已经从我的数据中删除了所有缺失的值。我得到一个错误
Error in if (any(infs)) warning(paste("Loglik converged before variable ",
:missing value where TRUE/FALSE needed
Cox函数:
SurvObj <- Surv(Final_Data$NormalizedStartTime,Final_Data$NormalizedEndTime,event = Final_Data$Converted)
model2 <- coxph(SurvObj ~ Clicks + RFR + Impressions + Other + `Site-ID` + `Creative-ID`, data = Final_Data1)
提前感谢您的帮助:)Final_Data的错误与总结
上面的行,"Loglik"等等,意味着给出关于可疑测试的信息,其中Loglik事先收敛。如果生成正确,整行代码应该类似于以下内容:
"Loglik在变量100前收敛;可能是无限的。"
由协议中的以下代码生成。Rnwhttps://r-forge.r-project.org/scm/viewvc.php/pkg/survival/noweb/agreg.Rnw?diff_format=c& sortdir = down& sortby = author&修订= 11529,根= survival&视图=标记
if (any(infs))
warning(paste("Loglik converged before variable ",
paste((1:nvar)[infs],collapse=","),
"; beta may be infinite. "))
从这里我们可以看到any()期望inf是一个数字。如果infs为NaN,则该函数不起作用。
内部功能如下:
paste("Loglik converged before variable ",
paste((1:1)[NaN],collapse=","),
"; beta may be infinite. ")
[1] "Loglik converged before variable NA ; beta may be infinite. "
所以这部分函数会运行,如果它能到达内部部分。但是它没有,因为
求值infs <- NaN
if (any(infs))
warning(paste("Loglik converged before variable ",
paste((1:nvar)[infs],collapse=","),
"; beta may be infinite. "))
Error in if (any(infs)) warning(paste("Loglik converged before variable ", :
missing value where TRUE/FALSE needed
就是你所犯的错误。之前通过infs <- abs(agfit$u %*% var)生成了infs变量。agfit是通过. call (Cagfit4.....)生成的,所以问题在函数的底层C代码中。
对于我的一些数据,agfit$u和agfit$imat都是nan。$u和$imat是从
生成的u2 = SET_VECTOR_ELT(rlist, 1, allocVector(REALSXP, nvar));
u = REAL(u2);
和
PROTECT(imat2 = allocVector(REALSXP, nvar*nvar));
nprotect =1;
if (NAMED(covar2)>0) {
PROTECT(covar2 = duplicate(covar2));
nprotect++;
}
covar= dmatrix(REAL(covar2), nused, nvar);
imat = dmatrix(REAL(imat2), nvar, nvar);
分别在agfit4 C代码中。我不是那么好在C,所以我不能说什么问题是在C代码区域。这可能是一个bug,或者Cox函数无法用于您的数据,或者两者兼而有之。然而,应该对此做些什么,因为我看到其他人也在询问这个错误。但不幸的是,我没有足够的技能来解决这个问题,我只能指出问题并大喊"嘿!请其他人来处理这个":-)。
我可能的解决方案是:
1)检查您的数据是否可用Cox函数(例如,如果您有2000例0和2例1,Cox函数可能无论如何都不合适,错误是建议您找到另一种分析方法:-))
2)修改代码,通过删除NAs来执行any(infs)评估,结果为FALSE,并通过以下操作跳过错误:if (any(infs, na.rm=T))(可能会搞砸代码,tho)
3)修复C代码,使agfit4不会在输出对象中产生nan。
我也有这个问题。原来我的一个变量有无限个值。一旦我替换了这些值,问题就解决了