我在网上找到了以下代码
mod1 <- lm(mpg ~ weight + I(weight^2) + foreign, auto)
功能是什么I()
?结果似乎与weight^2
相同I(weight^2)
。
我在网上找到了以下代码
mod1 <- lm(mpg ~ weight + I(weight^2) + foreign, auto)
功能是什么I()
?结果似乎与weight^2
相同I(weight^2)
。
的功能I()
是将公式中的术语与通常的公式解析和语法隔离开来。在数据框中还有其他用途I()
,它有助于创建具有或继承自类"AsIs"
的对象,从而允许嵌入对象而无需进行通常的转换。
在公式的情况下,正如您特别询问的那样,^
是一个特殊的公式运算符,它指示术语交叉到第n
th 度,n
在运算符之后给出如下:^n
. 因此,^
公式中没有通常的算术解释。(同样,-
、+
和/
运算*
符也具有特殊的公式含义,因此I()
需要使用它们将它们与公式解析工具隔离开来。)
在您给出的具体示例中(我将使用内置数据集进行说明trees
),如果您忘记使用I()
二次项,在这种情况下,R 将完全忽略该项,因为Volume
(weight
在您的示例中)是已经在模型中,并且您要求变量与其自身进行多向交互,这不是二次项。
首先没有I()
:
> lm(Height ~ Volume + Volume^2, data = trees)
Call:
lm(formula = Height ~ Volume + Volume^2, data = trees)
Coefficients:
(Intercept) Volume
69.0034 0.2319
注意Volume
公式中只有术语吗?二次模型的正确规范(实际上可能不是,见下文)是
> lm(Height ~ Volume + I(Volume^2), data = trees)
Call:
lm(formula = Height ~ Volume + I(Volume^2), data = trees)
Coefficients:
(Intercept) Volume I(Volume^2)
65.33587 0.47540 -0.00314
我说可能不正确;这是由于Volume
与 Volume^2 . An identical but more stable fit can be achieved by the use of orthogonal polynomials, which
poly()` 之间的相关性可以为您产生的。所以更稳定的规范将是:
> lm(Height ~ poly(Volume, 2), data = trees)
Call:
lm(formula = Height ~ poly(Volume, 2), data = trees)
Coefficients:
(Intercept) poly(Volume, 2)1 poly(Volume, 2)2
76.000 20.879 -5.278
请注意,拟合与早期模型相同,但由于输入数据不同(正交多项式与原始多项式)而具有不同的系数估计值。summary()
如果您不相信我,您可以通过他们的输出看到这一点:
> summary(lm(Height ~ poly(Volume, 2), data = trees))
Call:
lm(formula = Height ~ poly(Volume, 2), data = trees)
Residuals:
Min 1Q Median 3Q Max
-11.2266 -3.6728 -0.0745 2.4073 9.9954
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 76.0000 0.9322 81.531 < 2e-16 ***
poly(Volume, 2)1 20.8788 5.1900 4.023 0.000395 ***
poly(Volume, 2)2 -5.2780 5.1900 -1.017 0.317880
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.19 on 28 degrees of freedom
Multiple R-squared: 0.3808, Adjusted R-squared: 0.3365
F-statistic: 8.609 on 2 and 28 DF, p-value: 0.001219
> summary(lm(Height ~ Volume + I(Volume^2), data = trees))
Call:
lm(formula = Height ~ Volume + I(Volume^2), data = trees)
Residuals:
Min 1Q Median 3Q Max
-11.2266 -3.6728 -0.0745 2.4073 9.9954
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 65.335867 4.110886 15.893 1.52e-15 ***
Volume 0.475398 0.246279 1.930 0.0638 .
I(Volume^2) -0.003140 0.003087 -1.017 0.3179
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.19 on 28 degrees of freedom
Multiple R-squared: 0.3808, Adjusted R-squared: 0.3365
F-statistic: 8.609 on 2 and 28 DF, p-value: 0.001219
请注意模型中线性项和二次项的t检验差异。这就是输入多项式项的正交性有帮助的地方。
要真正了解^
公式中的内容(如果?formula
您不熟悉其中的术语,请考虑以下模型:
> lm(Height ~ (Girth + Volume)^2, data = trees)
Call:
lm(formula = Height ~ (Girth + Volume)^2, data = trees)
Coefficients:
(Intercept) Girth Volume Girth:Volume
75.40148 -2.29632 1.86095 -0.05608
由于 中有两个项(...)^2
,因此公式解析代码将其转换为两个变量的主效应加上它们的二阶交互作用。该模型可以更简洁地写为Height ~ Girth * Volume
,^
但当您需要更高阶交互或大量变量之间的交互时会有所帮助。