I()的功能是什么?

KEN*_*ine -1 regression r linear-regression

我在互联网上找到了以下代码

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

功能是什么I()?似乎结果weight^2是一样的I(weight^2).

Rei*_*son 12

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

在公式的情况下,正如你特别询问的那样,^是一个特殊的公式运算符,它表示将术语交叉到第二n个程度,在这个程度上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  
Run Code Online (Sandbox Code Playgroud)

注意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
Run Code Online (Sandbox Code Playgroud)

我说它可能不正确; 这是由于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  
Run Code Online (Sandbox Code Playgroud)

注意,拟合与早期模型相同,但是由于输入数据不同(正交多项式与原始多项式)具有不同的系数估计.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
Run Code Online (Sandbox Code Playgroud)

注意模型中线性和二次项的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
Run Code Online (Sandbox Code Playgroud)

由于有两个术语(...)^2,公式解析代码将其转换为两个变量的主效应加上它们的二阶交互.该模型可以更简洁地编写Height ~ Girth * Volume,但是^当您需要更多数量的变量之间的高阶交互或交互时,它会有所帮助.