如何修复 r: 由于奇点而未定义


您在 R 中可能遇到的错误消息是:

 Coefficients: (1 not defined because of singularities) 

当您使用 R 中的glm()函数拟合模型并且两个或多个预测变量彼此具有精确的线性关系(称为完美多重共线性)时,会出现此错误消息。

要修复此错误,您可以使用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 1x 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

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注