coxph:" ** if(any(infs))警告错误(粘贴(" Loglik在变量&#34之前收敛;,:缺少值需要TRUE / FALSE" **

时间:2016-10-19 09:17:07

标签: r survival-analysis

我正在使用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

2 个答案:

答案 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)

我也有这个问题。结果我的一个变量中有无限值。一旦我替换了这些值,问题就解决了