具有 4 个预测变量的多元回归模型中缺少三向交互作用?

问题描述 投票:0回答:1

我有四个预测变量,用于预测一个名为“退出”的变量,我正在尝试运行一个多元回归模型来查看它们是如何相互作用的。但是,当模型返回其摘要时,两个三向交互项表示为缺失 (NA)。我查看了相关矩阵,我相当确定这不是共线性问题。有没有人知道可能会发生什么/如何解决这个问题?

这是数据框的一部分的图像: interaction_data: 4 predictors (q1-q4), 1 outcome variable (quit)

我也尝试过居中和缩放我的数据,但问题仍然存在。

# First, I tried to put my predictor variables (q1-q4) and outcome variable all into one dataframe & rename them accordingly 

interaction_data <- responses_vals %>% 
   mutate("quit" = participant_data$Klein_Quit_Intentions_Scale) %>% 
  rename("affthreat" = "q1", 
         "insthreat" = "q2", 
         "affbehav" = "q3", 
         "insbehav" = "q4")


# then, I center scaled the data and ran the interaction analysis 
interaction_data <- as.data.frame(scale(interaction_data))

lin_reg <- lm(quit ~ (affthreat*insthreat*affbehav*insbehav), 
              data = as.data.frame(interaction_data))
summary(lin_reg)

总结的输出如下。正如您所看到的,有 2 个三向交互缺失,并标记为“NA”,即使我的所有列都没有缺失值。 enter image description here

任何见解将不胜感激!谢谢!

r statistics regression linear-regression interaction
1个回答
0
投票

系数为NA的情况有两种。

  1. 当您的预测变量多于观测值时。即您无法估计所有系数。在这种情况下,即使是标准误差也将为 NA,而 t-tests/p-values 都将为 NA。您使用半图来确定效果

  2. 当有完整的别名时。

你的情况,你遇到的是第二种情况。完全相同的两列。或完全没有随机性的其他列的组合派生的列。尝试使用函数

alias
来确定完全相同的列:

例子:

example('alias')
summary.lm(npk.aov)

Call:
aov(formula = yield ~ block + N * P * K, data = npk)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.3000 -1.6833  0.1583  1.9979  4.4750 

Coefficients: (1 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  54.8750     0.8021  68.415  < 2e-16 ***
block1        1.7125     1.3893   1.233  0.24131    
block2        1.6792     0.8021   2.093  0.05822 .  
block3       -1.8229     0.5672  -3.214  0.00744 ** 
block4       -1.0137     0.4393  -2.308  0.03965 *  
block5        0.2950     0.3587   0.822  0.42689    
N1            2.8083     0.8021   3.501  0.00437 ** 
P1           -0.5917     0.8021  -0.738  0.47490    
K1           -1.9917     0.8021  -2.483  0.02880 *  
N1:P1        -0.9417     0.8021  -1.174  0.26317    
N1:K1        -1.1750     0.8021  -1.465  0.16865    
P1:K1         0.1417     0.8021   0.177  0.86275    
N1:P1:K1          NA         NA      NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.929 on 12 degrees of freedom
Multiple R-squared:  0.7886,    Adjusted R-squared:  0.5948 
F-statistic: 4.069 on 11 and 12 DF,  p-value: 0.01156

在上面的例子中

N1:P1:K1
NA
那是因为它线性依赖于其他列:

alias(lm(npk.aov))
Model :
yield ~ block + N * P * K

Complete :
         (Intercept) block2 block3 block4 block5 block6 N1   P1   K1   N1:P1 N1:K1 P1:K1
N1:P1:K1    0         1/4    1/4    1/4      0      0   -1/4 -1/4 -1/4  1/2   1/2   1/2 

这意味着如果我们采用

1/4*block2+1/4*block3 + ...+1/2*P1:K1
它将与
N1:P1:K1

完全相同
mod_mat <- model.matrix(lm(npk.aov))
alias_coef <- c(alias(lm(npk.aov))$Complete)
cbind(mod_mat[,13], round(mod_mat[,-13]%*%alias_coef,10))
   [,1] [,2]
1     0    0
2     0    0
3     0    0
4     0    0
5     0    0
6     1    1
7     0    0
8     0    0
9     0    0
10    1    1
11    0    0
12    0    0
13    0    0
14    1    1
15    0    0
16    0    0
17    0    0
18    0    0
19    0    0
20    0    0
21    0    0
22    0    0
23    0    0
24    0    0
© www.soinside.com 2019 - 2024. All rights reserved.