Ответ 1
Вот простой пример, который, кажется, воспроизводит вашу проблему:
> library(survival)
> (df1 <- data.frame(t1=seq(1:6),
s1=rep(c(0, 1), 3),
te1=c(rep(0, 3), rep(1, 3)),
pa1=c(0,0,1,0,0,0)
))
t1 s1 te1 pa1
1 1 0 0 0
2 2 1 0 0
3 3 0 0 1
4 4 1 1 0
5 5 0 1 0
6 6 1 1 0
> (coxph(Surv(t1, s1) ~ te1*pa1, data=df1))
Call:
coxph(formula = Surv(t1, s1) ~ te1 * pa1, data = df1)
coef exp(coef) se(coef) z p
te1 -23 9.84e-11 58208 -0.000396 1
pa1 -23 9.84e-11 100819 -0.000229 1
te1:pa1 NA NA 0 NA NA
Теперь давайте посмотрим на "совершенную классификацию" следующим образом:
> (xtabs( ~ s1+te1, data=df1))
te1
s1 0 1
0 2 1
1 1 2
> (xtabs( ~ s1+pa1, data=df1))
pa1
s1 0 1
0 2 1
1 3 0
Обратите внимание, что значение 1
для pa1
точно предсказывает наличие статуса s1
равного 0
. То есть, основываясь на ваших данных, если вы знаете, что pa1==1
то вы можете быть уверены, что s1==0
. Таким образом, установка модели Cox не подходит в этой настройке и приведет к числовым ошибкам. Это можно увидеть с помощью
> coxph(Surv(t1, s1) ~ pa1, data=df1)
дающий
Warning message:
In fitter(X, Y, strats, offset, init, control, weights = weights, :
Loglik converged before variable 1 ; beta may be infinite.
Важно подобрать эти перекрестные таблицы перед установкой моделей. Также стоит начать с более простых моделей, прежде чем рассматривать те, которые связаны с взаимодействием.
Если df1
добавить термин взаимодействия в df1
следующим образом:
> (df1 <- within(df1,
+ te1pa1 <- te1*pa1))
t1 s1 te1 pa1 te1pa1
1 1 0 0 0 0
2 2 1 0 0 0
3 3 0 0 1 0
4 4 1 1 0 0
5 5 0 1 0 0
6 6 1 1 0 0
Затем проверьте это с помощью
> (xtabs( ~ s1+te1pa1, data=df1))
te1pa1
s1 0
0 3
1 3
Мы видим, что это бесполезный классификатор, то есть он не позволяет прогнозировать статус s1
.
При объединении всех трех терминов, монтажник действительно может получить числовое значение для te1
и pe1
хотя pe1
является идеальным предиктором, как указано выше. Однако взгляд на значения коэффициентов и их ошибок показывает, что они неправдоподобны.
Редактировать @JMarcelino: если вы посмотрите на предупреждающее сообщение из первой модели coxph
в этом примере, вы увидите предупреждающее сообщение:
2: In coxph(Surv(t1, s1) ~ te1 * pa1, data = df1) :
X matrix deemed to be singular; variable 3
Скорее всего, та же ошибка, которую вы получаете, и вызвана этой проблемой классификации. Кроме того, ваш третий кросс-таблицы xtabs(~ tecnologia+pais, data=dados)
не так важен, как таблица status
по времени interaction term
. Вы можете сначала добавить термин взаимодействия вручную, как в приведенном выше примере, а затем проверить кросс-таблицу. Или вы могли бы сказать:
> with(df1,
table(s1, pa1te1=pa1*te1))
pa1te1
s1 0
0 3
1 3
Тем не менее, я заметил, что одна из ячеек в вашей третьей таблице имеет нуль (conv
, PT
), что означает, что у вас нет наблюдений с этой комбинацией предикторов. Это вызовет проблемы при попытке соответствовать.
В целом, результат должен иметь некоторые значения для всех уровней предикторов, и предикторам не следует классифицировать результат как точно все или ничего или 50/50.
Изменить 2 @user75782131 Да, вообще говоря, xtabs
или аналогичная кросс-таблица должны выполняться в моделях, где результат и предикаты являются дискретными, т. xtabs
Имеют ограниченный номер. уровней. Если присутствует "совершенная классификация", то предсказательная модель/регрессия может оказаться неприемлемой. Это справедливо, например, для логистической регрессии (результат двоичный), а также модели Кокса.