-1

我在网上找到了以下代码

mod1 <- lm(mpg ~ weight + I(weight^2) + foreign, auto)

功能是什么I()?结果似乎与weight^2相同I(weight^2)

4

1 回答 1

12

的功能I()是将公式中的术语与通常的公式解析和语法隔离开来。在数据框中还有其他用途I(),它有助于创建具有或继承自类"AsIs"的对象,从而允许嵌入对象而无需进行通常的转换。

在公式的情况下,正如您特别询问的那样,^是一个特殊的公式运算符,它指示术语交叉到第nth 度,n在运算符之后给出如下:^n. 因此,^公式中没有通常的算术解释。(同样,-+/运算*符也具有特殊的公式含义,因此I()需要使用它们将它们与公式解析工具隔离开来。)

在您给出的具体示例中(我将使用内置数据集进行说明trees),如果您忘记使用I()二次项,在这种情况下,R 将完全忽略该项,因为Volumeweight在您的示例中)是已经在模型中,并且您要求变量与其自身进行多向交互,这不是二次项。

首先没有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, whichpoly()` 之间的相关性可以为您产生的。所以更稳定的规范将是:

> 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^但当您需要更高阶交互或大量变量之间的交互时会有所帮助。

于 2013-02-27T15:02:39.333 回答