Как исправить в R: не определено из-за особенностей


Одно сообщение об ошибке, с которым вы можете столкнуться в R:

Coefficients: (1 not defined because of singularities)

Это сообщение об ошибке появляется, когда вы подгоняете какую-либо модель с помощью функции glm() в R, а две или более ваших переменных-предикторов имеют точную линейную связь между ними, известную как совершенная мультиколлинеарность .

Чтобы исправить эту ошибку, вы можете использовать функцию cor() , чтобы определить, какие переменные в вашем наборе данных имеют идеальную корреляцию друг с другом, и просто исключить одну из этих переменных из регрессионной модели.

В этом руководстве рассказывается, как устранить это сообщение об ошибке на практике.

Как воспроизвести ошибку

Предположим, мы подгоняем модель логистической регрессии к следующему фрейму данных в R:

#define data
df <- data.frame(y = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1),
 x1 = c(3, 3, 4, 4, 3, 2, 5, 8, 9, 9, 9, 8, 9, 9, 9),
 x2 = c(6, 6, 8, 8, 6, 4, 10, 16, 18, 18, 18, 16, 18, 18, 18),
 x3 = c(4, 7, 7, 3, 8, 9, 9, 8, 7, 8, 9, 4, 9, 10, 13))

#fit logistic regression model
model <- glm(y~x1+x2+x3, data=df, family=binomial)

#view model summary
summary(model)

Call:
glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)

Deviance Residuals: 
 Min 1Q Median 3Q Max 
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05 

Coefficients: (1 not defined because of singularities)
 Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x2 NA NA NA NA
x3 -2.258 20119.863 0.000 1

(Dispersion parameter for binomial family taken to be 1)

 Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6

Number of Fisher Scoring iterations: 24

Обратите внимание, что прямо перед выводом коэффициента мы получаем сообщение:

Coefficients: (1 not defined because of singularities)

Это указывает на то, что две или более переменных-предикторов в модели имеют идеальную линейную зависимость, и, следовательно, не каждый коэффициент регрессии в модели может быть оценен.

Например, обратите внимание, что для переменной-предиктора x 2 не может быть сделана оценка коэффициента.

Как справиться с ошибкой

Чтобы определить, какие переменные-предикторы вызывают эту ошибку, мы можем использовать функцию cor() для создания матрицы корреляции и проверки того, какие переменные имеют корреляцию ровно 1 друг с другом:

#create correlation matrix
cor(df)

 y x1 x2 x3
y 1.0000000 0.9675325 0.9675325 0.3610320
x1 0.9675325 1.0000000 1.0000000 0.3872889
x2 0.9675325 1.0000000 1.0000000 0.3872889
x3 0.3610320 0.3872889 0.3872889 1.0000000

Из корреляционной матрицы видно, что переменные x 1 и x 2 идеально коррелированы.

Чтобы устранить эту ошибку, мы можем просто удалить одну из этих двух переменных из модели, поскольку они фактически не предоставляют уникальную или независимую информацию в регрессионной модели.

Например, предположим, что мы отбрасываем x 2 и подгоняем следующую модель логистической регрессии:

#fit logistic regression model
model <- glm(y~x1+x3, data=df, family=binomial)

#view model summary
summary(model)

Call:
glm(formula = y ~ x1 + x3, family = binomial, data = df)

Deviance Residuals: 
 Min 1Q Median 3Q Max 
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05 

Coefficients:
 Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x3 -2.258 20119.863 0.000 1

(Dispersion parameter for binomial family taken to be 1)

 Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6

Number of Fisher Scoring iterations: 24

Обратите внимание, что на этот раз мы не получаем сообщение об ошибке «не определено из-за сингулярностей».

Примечание.Неважно, отбрасываем ли мы x 1 или x 2.Окончательная модель будет содержать одну и ту же оценку коэффициента для любой переменной, которую вы решите сохранить, и общее качество соответствия модели будет одинаковым.

Дополнительные ресурсы

В следующих руководствах объясняется, как обрабатывать другие ошибки в R:

Как исправить в R: неверная формула модели в ExtractVars
Как исправить в R: аргумент не является числовым или логическим: возвращается na
Как исправить: randomForest.default(m, y, …): Na/NaN/Inf в вызове сторонней функции

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.