在R中建立线性多项式模型时,为什么需要I()“ AsIs”?

时间:2018-06-20 18:15:48

标签: r linear polynomial-math

我试图了解使用线性多项式模型或函数git push -u origin HEADI()基函数在R中的作用。当我使用

计算模型时
  1. poly
  2. q + q^2
  3. q + I(q^2)

我有不同的答案。

这里是一个示例:

poly(q, 2)

以下是输出:

set.seed(20)
q <- seq(from=0, to=20, by=0.1)
y <- 500 + .1 * (q-5)^2
noise <- rnorm(length(q), mean=10, sd=80)
noisy.y <- y + noise
model3 <- lm(noisy.y ~ poly(q,2))
model1 <- lm(noisy.y ~ q + I(q^2))
model2 <- lm(noisy.y ~ q + q^2)
I(q^2)==I(q)^2
I(q^2)==q^2

summary(model1)
summary(model2)
summary(model3)

在R中执行多项式模型时,为什么> summary(model1) Call: lm(formula = noisy.y ~ q + I(q^2)) Residuals: Min 1Q Median 3Q Max -211.592 -50.609 4.742 61.983 165.792 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 489.3723 16.5982 29.483 <2e-16 *** q 5.0560 3.8344 1.319 0.189 I(q^2) -0.1530 0.1856 -0.824 0.411 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 79.22 on 198 degrees of freedom Multiple R-squared: 0.02451, Adjusted R-squared: 0.01466 F-statistic: 2.488 on 2 and 198 DF, p-value: 0.08568 > summary(model2) Call: lm(formula = noisy.y ~ q + q^2) Residuals: Min 1Q Median 3Q Max -219.96 -54.42 3.30 61.06 170.79 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 499.5209 11.1252 44.900 <2e-16 *** q 1.9961 0.9623 2.074 0.0393 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 79.16 on 199 degrees of freedom Multiple R-squared: 0.02117, Adjusted R-squared: 0.01625 F-statistic: 4.303 on 1 and 199 DF, p-value: 0.03933 > summary(model3) Call: lm(formula = noisy.y ~ poly(q, 2)) Residuals: Min 1Q Median 3Q Max -211.592 -50.609 4.742 61.983 165.792 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 519.482 5.588 92.966 <2e-16 *** poly(q, 2)1 164.202 79.222 2.073 0.0395 * poly(q, 2)2 -65.314 79.222 -0.824 0.4107 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 79.22 on 198 degrees of freedom Multiple R-squared: 0.02451, Adjusted R-squared: 0.01466 F-statistic: 2.488 on 2 and 198 DF, p-value: 0.08568 是必需的。

此外,I()函数不会产生与poly相同的结果是否正常?

1 个答案:

答案 0 :(得分:3)

?formula帮助页面中描述了R中的公式语法。 ^符号没有被赋予乘幂运算的通常含义。而是将其用于指数基础上所有术语之间的交互。例如

y ~ (a+b)^2

相同
y ~ a + b + a:b

但是,如果您这样做

y ~ a + b^2
y ~ a + b    # same as above, no way to "interact" b with itself.

该插入符仅包含b一词,因为它不能包含与其自身的交互。因此,公式中的^*与乘法无关,就像+并不是通常意义上的变量加法。

如果您想要^2的“常规”定义,则需要按原样放置它。否则,它根本不适合平方项。

默认情况下,poly()函数返回正交多项式,如帮助页面所述。这有助于减少协变量中的共线性。但是,如果您不想要正交版本,而只想要“原始”多项式项,则只需将raw=TRUE传递给您的poly调用即可。例如

lm(noisy.y ~ poly(q,2, raw=TRUE))

将返回与model1

相同的估算值