Строка выше, "Loglik" и так далее, предназначена для предоставления информации о сомнительном тесте, в котором loglik заранее сходится. Полная строка, если она создана правильно, должна выглядеть примерно так:
«Логлик сошелся перед переменной 100; бета может быть бесконечной».
И это создается следующим кодом в 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 генерируется раньше через infs ‹-abs(agfit$u %*% var). И 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. Это может быть ошибка, или функция Кокса не может использоваться для ваших данных, или и то, и другое. Тем не менее, с этим нужно что-то делать, так как я видел, как другие тоже спрашивали об этой ошибке. Но, к сожалению, я недостаточно опытен, чтобы исправить это, я могу только указать на проблему и крикнуть: "Эй! Кто-нибудь еще, пожалуйста, позаботьтесь об этом" :-).
Мои возможные решения:
1) проверьте, можно ли вообще использовать ваши данные с функцией Кокса (например, если у вас есть 2000 случаев 0 и 2 случая 1, функция Кокса может в любом случае не подходить, и ошибка предлагает вам найти другой способ анализа :-))
2) изменить код для выполнения оценки any(infs), удалив NA, что приведет к FALSE и пропуску ошибки следующим образом: if (any(infs, na.rm=T)) (может испортить код, хотя )
3) исправить код C, чтобы agfit4 не выдавал NaN в выходном объекте. (только для опытных, не я)
person
Mi-Go
schedule
08.03.2017
Final_Data
во время последней обработки. Также опасна практика оставлять тире (знаки минус) внутри имен переменных. Гораздо лучше использовать точки или символы подчеркивания, чтобы вам не приходилось заключать формулы в кавычки. - person IRTFM   schedule 23.11.2016