Як виправити в r: undefined через сингулярності


Повідомлення про помилку, яке ви можете зустріти в 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 у зовнішньому виклику функції

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *