R最小化绝对误差
这是我的设置R最小化绝对误差,r,R,这是我的设置 obs1<-c(1,1,1) obs2<-c(0,1,2) obs3<-c(0,0,3) absoluteError<-function(obs,x){ return(sum(abs(obs-x))) } Example: > absoluteError(obs2,1) [1] 2 obs1我不确定这个答案是否正确,即使正确,我也不确定这是你想要的。尽管如此,我还是要尝试一下 我想你说的是“最小绝对偏差”,一种不同于“最小二乘法”的回归形式
obs1<-c(1,1,1)
obs2<-c(0,1,2)
obs3<-c(0,0,3)
absoluteError<-function(obs,x){
return(sum(abs(obs-x)))
}
Example:
> absoluteError(obs2,1)
[1] 2
obs1我不确定这个答案是否正确,即使正确,我也不确定这是你想要的。尽管如此,我还是要尝试一下
我想你说的是“最小绝对偏差”,一种不同于“最小二乘法”的回归形式
如果是这样的话,我发现这个R代码用于解决最小绝对偏差回归:
fabs=function(beta0,x,y){
b0=beta0[1]
b1=beta0[2]
n=length(x)
llh=0
for(i in 1:n){
r2=(y[i]-b0-b1*x[i])
llh=llh + abs(r2)
}
llh
}
g=optim(c(1,1),fabs,x=x,y=y)
我在这里找到了代码:
假设您讨论的是最小绝对偏差,如果您希望从头开始在R
中找到解决方案,而不是使用optim
的解决方案,那么您可能对上述代码不感兴趣
上述代码适用于具有截距和斜率的回归线。我对代码进行了如下修改,以处理只包含一个截距的回归:
y <- c(1,1,1)
x <- 1:length(y)
fabs=function(beta0,x,y){
b0=beta0[1]
b1=0
n=length(x)
llh=0
for(i in 1:n){
r2=(y[i]-b0-b1*x[i])
llh=llh + abs(r2)
}
llh
}
# The commands to get the estimator
g = optim(c(1),fabs,x=x,y=y, method='Brent', lower = (min(y)-5), upper = (max(y)+5))
g
当y时,obs的中值是绝对误差的最小值。下面是如何尝试证明这一点的示意图:
设一组n个观测值的中值obs为m。调用obs和MF之间的绝对误差(obs,m)
案例n为奇数:
考虑f(OBS,M+delta),其中delta是一些非零数。假设delta为正-则存在误差大于f(obs,m)的(n-1)/2+1观测值。其余(n-1)/2个观测值的误差至多小于f(obs,m)。所以f(obs,m+delta)-f(obs,m)>=delta。(如果delta为负,也可以使用相同的参数。)因此,在这种情况下,中位数是唯一的最小值。因此,对于任何非零增量,f(obs,m+delta)>f(obs,m),因此m是f的极小值
案例n为偶数:
基本上与上述逻辑相同,但在这种情况下,集合中两个最里面的数字之间的任何数字都将是最小值。进一步考虑后,中间值是最小值。不确定如何继续-我应该删除我的问题吗?不。请不要。更确切地说,把你的评论作为一个答案,也许用R代码来支持你的结论。你能看看这个吗?
$par
[1] 1
$value
[1] 1.332268e-15
$counts
function gradient
NA NA
$convergence
[1] 0
$message
NULL
$par
[1] 1
$value
[1] 2
$counts
function gradient
NA NA
$convergence
[1] 0
$message
NULL
$par
[1] 8.613159e-10
$value
[1] 3
$counts
function gradient
NA NA
$convergence
[1] 0
$message
NULL