n = 50
set.seed(100)
x = matrix(runif(n, -2, 2), nrow=n)
y = 2 + 0.75*sin(x) - 0.75*cos(x) + rnorm(n, 0, 0.2)
。
在R中, 我想通过最小二乘法估算上述多项式函数。
这意味着我想知道γ0,γ1,γ2和γ3的估计值。
我也想了解这个估算器函数下的MSE。
我用了这个
summary(lm(y ~ x+ x^2+ x^3))
但是只要得到this output:
Call:
lm(formula = y ~ x + (x^2) + (x^3))
Residuals:
Min 1Q Median 3Q Max
-0.66448 -0.22251 -0.07694 0.20647 0.79429
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.54972 0.04761 32.55 <2e-16 ***
x 0.65279 0.04633 14.09 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3319 on 48 degrees of freedom
Multiple R-squared: 0.8053, Adjusted R-squared: 0.8013
F-statistic: 198.6 on 1 and 48 DF, p-value: < 2.2e-16
请在R中告诉我,我可以使用什么功能或软件包。
谢谢。
答案 0 :(得分:0)
您需要将I(.)
包裹在多项式周围,以指示R应该使用^
运算符而不是公式运算符,而不是公式运算符。
让我们创建一些示例数据进行说明。
set.seed(42)
x <- runif(100)
y <- x + x^2 + x^3 + rnorm(100)
您想要的是什么
lm(y ~ x + I(x^2) + I(x^3))$coe
# (Intercept) x I(x^2) I(x^3)
# -0.4069207 3.4580770 -4.0516060 4.3227674
或:
lm(y ~ poly(x, 3, raw=TRUE))$coe
# (Intercept) poly(x, 3, raw = TRUE)1 poly(x, 3, raw = TRUE)2 poly(x, 3, raw = TRUE)3
# -0.4069207 3.4580770 -4.0516060 4.3227674
如果没有I(.)
,结果将有所不同,
lm(y ~ x + x^2 + x^3)$coe
# (Intercept) x
# -0.6149136 3.3590395
由于某种原因,R将论坛解释为
lm(y ~ x)$coe
# (Intercept) x
# -0.6149136 3.3590395
all(lm(y ~ x)$coe - lm(y ~ x + x^2 + x^3)$coe == 0)
# [1] TRUE
但是,请考虑:
lm(y ~ I(x + x^2 + x^3))$coe
# (Intercept) I(x + x^2 + x^3)
# -0.191611 1.141912
创建变量z
z <- x + x^2 + x^3
给出相同的结果:
lm(y ~ z)$coe
# (Intercept) z
# -0.191611 1.141912
或更明确地说,假设我们要计算与x
的交互a
,我们想将*
用作公式运算符:
a <- runif(100)
lm(y ~ x*a)$coe
# (Intercept) x a x:a
# -0.71920356 3.42008631 0.19180499 -0.07049342
当我们将*
用作算术运算符时,
lm(y ~ I(x*a))$coe
# (Intercept) I(x * a)
# 0.5317547 2.7361742
结果与以下内容相同:
xa <- x*a
lm(y ~ xa)$coe
# (Intercept) xa
# 0.5317547 2.7361742