【问题标题】:lm: 1 coefficient not defined because of singularities while no major collinearity issueslm: 1 个系数由于奇点而未定义,但没有主要的共线性问题
【发布时间】:2021-10-28 17:16:15
【问题描述】:

我看到过类似的帖子,例如 this one,其中说收到错误消息:Coefficients: (1 not defined because of singularities) 是因为 lm() 调用中使用的预测变量之间几乎完全相关。

但就我而言,预测变量之间没有近乎完美的相关性,但在lm() 的输出中仍有一个系数 (X_wthn_outcome) 返回 NA

不知道返回NA的系数有什么问题?

出于重现性目的,下面提供了完全相同的数据和代码。

library(dplyr)

set.seed(132)
(data <- expand.grid(study = 1:1e3, outcome = rep(1:50,2)))
data$X <- rnorm(nrow(data))
e <- rnorm(nrow(data), 0, 2)
data$yi <- .8 +.6*data$X + e

dat <- data %>% 
  group_by(study) %>% 
  mutate(X_btw_study = mean(X), X_wthn_study = X-X_btw_study) %>%
  group_by(outcome, .add = TRUE) %>%
  mutate(X_btw_outcome = mean(X), X_wthn_outcome = X-X_btw_outcome) %>% ungroup()
  
round(cor(select(dat,-study,-outcome,-X,-yi)),3)

#               X_btw_study X_wthn_study X_btw_outcome X_wthn_outcome
#X_btw_study          1.000        0.000         0.141           0.00
#X_wthn_study         0.000        1.000         0.698           0.71
#X_btw_outcome        0.141        0.698         1.000           0.00
#X_wthn_outcome       0.000        0.710         0.000           1.00

summary(lm(yi ~ 0 + X_btw_study + X_btw_outcome + X_wthn_study
   + X_wthn_outcome, data = dat))

#Coefficients: (1 not defined because of singularities)
#               Estimate Std. Error t value Pr(>|t|)    
#X_btw_study    0.524093   0.069610   7.529 5.15e-14 ***
#X_btw_outcome  0.014557   0.013694   1.063    0.288    
#X_wthn_study   0.589517   0.009649  61.096  < 2e-16 ***
#X_wthn_outcome       NA         NA      NA       NA  ## What's wrong with this variable

【问题讨论】:

  • 您说“预测变量之间没有近乎完美的相关性”,但双向共线性与多重共线性不同。如果您有很多分类预测变量(或一些样本量较小的分类预测变量),那么在没有任何看起来令人担忧的双向相关的情况下获得“完美的多重共线性”并不难。
  • @IRTFM,我没有分类预测。但是您能否在我上面的数据中说明多重共线性的确切含义?

标签: r dplyr regression linear-regression lm


【解决方案1】:

你构造了一个问题,X_btw_study + X_btw_outcome + X_wthn_study 的三路组合完美预测X_wthn_outcome

lm(X_wthn_outcome ~ X_btw_study + X_btw_outcome + X_wthn_study , data = dat)
#------------------
Call:
lm(formula = X_wthn_outcome ~ X_btw_study + X_btw_outcome + X_wthn_study, 
    data = dat)

Coefficients:
  (Intercept)    X_btw_study  X_btw_outcome   X_wthn_study  
    1.165e-17      1.000e+00     -1.000e+00      1.000e+00  
#--------------
summary( lm(X_wthn_outcome ~ X_btw_study + X_btw_outcome + X_wthn_study , data = dat) )

#---------------
Call:
lm(formula = X_wthn_outcome ~ X_btw_study + X_btw_outcome + X_wthn_study, 
    data = dat)

Residuals:
       Min         1Q     Median         3Q        Max 
-3.901e-14 -6.000e-17  0.000e+00  5.000e-17  3.195e-13 

Coefficients:
                Estimate Std. Error    t value Pr(>|t|)    
(Intercept)    1.165e-17  3.242e-18  3.594e+00 0.000326 ***
X_btw_study    1.000e+00  3.312e-17  3.020e+16  < 2e-16 ***
X_btw_outcome -1.000e+00  6.515e-18 -1.535e+17  < 2e-16 ***
X_wthn_study   1.000e+00  4.590e-18  2.178e+17  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.025e-15 on 99996 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:      1 
F-statistic: 1.582e+34 on 3 and 99996 DF,  p-value: < 2.2e-16

您有一个调整后的 R^2 为 1,其中包含三个预测变量。所以多重共线性而不是双向共线性。 (R 已经掌握了你的技巧,不会让你逃脱这个 dplyr 的“隐藏依赖项”游戏。)我认为如果你以单独的序列构建变量,依赖关系可能会更明显步骤而不是管道链。

【讨论】:

  • 啊哈! +1。但为什么会这样?为什么X_btw_study + X_btw_outcome + X_wthn_studyX_wthn_outcome 完全预测/重叠?
  • 因为您构建这些变量的步骤顺序。您实际上只有三个自变量,Y、e 和 X,而其他一切都是使用均值和差值构建的。
  • 当然,但我认为我将X 分成了四个不重叠的部分。
  • 所以?这并没有消除逐行依赖。每一行都有这个问题。
  • 行依赖?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 2020-10-21
相关资源
最近更新 更多