r语言 - coxph : "**Error in if (any(infs)) warning(paste(" Loglik 在变量 ", : missing value where TRUE/F



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

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

相关内容

最新更新