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