多元线性回归中的相互作用项

时间:2020-05-10 14:57:49

标签: r regression

我已经使用lm进行多元回归分析。然后使用GVLMA进行假设测试,结果表明不满足“全局统计”和“异方差”测试。

代码形式如下:(所有变量都是连续的)

model_1 <- lm (y ~ x1 + x2, data = abc)

然后我又运行了一个具有相同变量的模型(认为我必须引入交互作用来修正GVLMA假设)

model_2 <- lm (y ~ x1 + x2, x1 * x2, data = abc)

使用此model_2,可以满足所有假设。但是当我检查时,我已经意识到引入的交互术语的方式是不准确的。我看不到变量之间的“逗号”是什么?

由于模型拟合良好,我处于困境中,但是我无法解释, x1 * x2在方程式/结果中的作用?

请帮助我理解

1 个答案:

答案 0 :(得分:0)

对于线性模型,交互项由:定义,而项由+分隔,因此具有单个项和交互项的模型为

lm(y ~ x1:x2 + x1 + x2)

但是,您可以编写x1*x2,其中包括交互作用和单个效果,因此以下内容等同于以上内容

lm(y ~ x1*x2)

查看使用内置数据集虹膜时发生的情况,其中固定效果指定为Petal.Width*Sepal.Length,所有三个术语均在模型摘要中:

Call:
lm(formula = Petal.Length ~ Petal.Width * Sepal.Length, data = iris)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.99588 -0.24329  0.00355  0.29735  1.24780 

Coefficients:
                         Estimate Std. Error t value Pr(>|t|)    
(Intercept)              -3.24804    0.59586  -5.451 2.08e-07 ***
Petal.Width               2.97115    0.35836   8.291 6.74e-14 ***
Sepal.Length              0.87551    0.11667   7.504 5.60e-12 ***
Petal.Width:Sepal.Length -0.22248    0.06384  -3.485  0.00065 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.3888 on 146 degrees of freedom
Multiple R-squared:  0.9525,    Adjusted R-squared:  0.9515 
F-statistic: 975.4 on 3 and 146 DF,  p-value: < 2.2e-16

关于逗号在模型中的作用,它正在创建子集。比较以下三个模型的摘要:第一个模型具有146和147个自由度-它们具有150个数据点,并分别估计4个和3个参数。第三个模型可以模拟您的规格,具有129个自由度-这就是让我意识到它是子集的原因。在检查lm()的文档时,有一个用于子集的参数:lm(formula, data, subset, ...)。因为data是显式指定的,所以未指定的参数默认为formulasubset。您还可以在模型摘要中看到这一点,该摘要显示了模型调用中的一个子集。

summary(lm(Petal.Length ~ Petal.Width * Sepal.Length, data = iris))
summary(lm(Petal.Length ~ Petal.Width + Sepal.Length, data = iris))
summary(lm(Petal.Length ~ Petal.Width + Sepal.Length, Petal.Width * Sepal.Length, data = iris))

您可以通过传递向量iris$Petal.Width * iris$Sepal.Lengthas row numbers来重新创建您的结果-请注意,这会导致很多行并且也跳过了很多行,因此该模型的结果不匹配一个使用所有数据(每个数据点仅使用一次)的人。

summary(lm(Petal.Length ~ Petal.Width + Sepal.Length, data = iris[iris$Petal.Width * iris$Sepal.Length, ]))