Как исправить в 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: аргумент не является ни числовым, ни логическим: return na
Как исправить: randomForest.default(m, y,…): Na/NaN/Inf при вызове внешней функции

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *