我有五个点,我将在R中拟合二阶多项式。我将通过最小化预测误差平方和(SSE)来实现。
最好的方法是什么?
到目前为止,我已经这样做了:
(1,5.8), (2,3.9), (3,4.2), (4,5.7), (5,10.2) ## my data
对于这个数据,我想要使用截距10拟合二阶pol,并且将x ^ 2之前的系数设置为1.我这样做:
p<-c(5.8, 3.9, 4.2, 5.7, 10.2)
f<-function(x,a){x^2-ax+}
##sum of squared errors of prediction
SSE<-function(a){ (p[i]-f(i,a) )^2 }
nlm(SSE,0.1) ## 0.1 is picked totally random
但它会返回错误的&#34;回答:
$minimum
[1] 9.475923e-25
$estimate
[1] 4.96
当我手动计算SSE = a = 4.96时,则SSE = 9.475923e-25。我做错了什么?我最担心的是:nlm功能是否贯穿我的所有数据点?
答案 0 :(得分:3)
我不确定你的意思&#34;错误&#34;。您的代码中有一些故障,我得到的答案略有不同(a
几乎完全= 5)。
p <- c(5.8, 3.9, 4.2, 5.7, 10.2)
x <- 1:5
f <- function(x,a){x^2-a*x+10}
##sum of squared errors of prediction
SSE <- function(a){ sum((p-f(x,a))^2) }
(n1 <- nlm(SSE,0.1)) ## 0.1 is picked totally random
## $minimum
## [1] 0.22
## $estimate
## [1] 4.999998
## $gradient
## [1] 1.443291e-10
## $code
## [1] 1
## $iterations
## [1] 3
这似乎是合理的,虽然它与数据点不完全匹配。
par(las=1,bty="l") ## cosmetic
plot(x,p,xlim=c(0,5.5))
xvec <- seq(0,6,length.out=100)
lines(xvec,f(xvec,n1$estimate))
你也可以通过
来适应这个模型ypar <- p-x^2-10 ## subtract known terms from LHS
m1 <- lm(ypar~x-1) ## fit linear term (-1 suppresses intercept)
-1*coef(m1) ## flip sign
得到正好5的结果。