我正在使用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)
先谢谢你的帮助:) The Error and the Summary of Final_Data
答案 0 :(得分:4)
以上一行,&#34; Loglik&#34;等等,是为了提供有关可疑测试的信息,其中loglik先于收敛。 正确生成的整行应该类似于以下内容:
&#34; Loglik在变量100之前收敛; beta可能是无限的。&#34;
它由agreg.Rnw中的以下代码生成 https://r-forge.r-project.org/scm/viewvc.php/pkg/survival/noweb/agreg.Rnw?diff_format=c&sortdir=down&sortby=author&revision=11529&root=survival&view=markup
if (any(infs))
warning(paste("Loglik converged before variable ",
paste((1:nvar)[infs],collapse=","),
"; beta may be infinite. "))
从这里我们可以看到any()会期望infs是一个数字。如果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&lt; -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代码区域有什么问题。它可能是一个错误,或者Cox功能不适用于您的数据或两者兼而有之。然而,应该做些什么,因为我已经看到其他人也在询问这个错误。但不幸的是,我没有足够的技巧来解决这个问题,我只能指出这个问题并且大声吼叫!嘿!别人请照顾这个&#34; : - 。)
我可能的解决方案是:
1)检查您的数据是否完全可用于Cox功能(例如,如果您有2000个0和2个案例的1,则Cox功能可能不适合,并且错误表明您找到另一种方式分析:-))
2)修改代码以通过删除NA来执行任何(infs)评估,从而导致FALSE并通过以下内容跳过错误: 如果(任何(infs,na.rm = T))(可能搞砸了代码,那么)
3)修复C代码,使agfit4不在输出对象中产生NaN。 (仅限技术人员,而非我)
答案 1 :(得分:1)
我也有这个问题。结果我的一个变量中有无限值。一旦我替换了这些值,问题就解决了