最小化R中残差平方和的最佳方法; nlm功能正确吗?

时间:2016-11-08 22:46:09

标签: r mathematical-optimization

我有五个点,我将在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功能是否贯穿我的所有数据点?

1 个答案:

答案 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))

http://www.davepaquette.com/archive/2013/12/30/so-you-inherited-an-asp-net-web-forms-application.aspx

你也可以通过

来适应这个模型
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的结果。