我试图了解使用线性多项式模型或函数git push -u origin HEAD
时I()
基函数在R中的作用。当我使用
poly
q + q^2
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
相同的结果是否正常?
答案 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