最小绝对偏差函数
Least Absolute Deviation function
我正在尝试估计 LAD 回归,但它给出了我的消息:"false convergence (8)"。这是什么意思,为什么 nlminb
估计量等于 lm
估计量?
Sample generation step
dgp=function(){
x=c(sample(0:9,10),sample(0:9,10));
b0=2;
b1=-6;
eps=rbinom(20,1,0.05)*rnorm(20,0,1)+rbinom(20,1,0.95)*rnorm(20,0,1);
eps=eps/sd(eps);
y=b0+b1*x+eps;
return(data.frame(y=y,x=x))
}
z=dgp()
Estimation step
LAD=function(...){
z=(...);
y=z[[1]]
x=z[[2]]
LADf=function(par) {(sum(y-par[1]-par[2]*x)^2)}
outLS=lm(y~x);
b0=as.numeric(outLS$coefficients[1]);b0
b1=as.numeric(outLS$coefficients[2]);b1
out=nlminb(c(b0,b1),LADf)
return(list(out$par,out$message))
}
LAD(z)
您的 LAD 函数:
LADf=function(par) {(sum(y-par[1]-par[2]*x)^2)}
对我来说看起来完全像最小二乘法。因此,您所做的是最小化平方和,而不是偏差的绝对值。你需要像
这样的东西
LADf <- function(par) { sum(abs(y - par[1] - par[2]*x)) }
请注意,此函数不可微分,因此您必须使用可以处理它的优化器(例如 Nelder-Mead 或 SANN)。
LAD 估计量也等同于中值回归,因此您可以使用分位数回归包代替。
我正在尝试估计 LAD 回归,但它给出了我的消息:"false convergence (8)"。这是什么意思,为什么 nlminb
估计量等于 lm
估计量?
Sample generation step
dgp=function(){
x=c(sample(0:9,10),sample(0:9,10));
b0=2;
b1=-6;
eps=rbinom(20,1,0.05)*rnorm(20,0,1)+rbinom(20,1,0.95)*rnorm(20,0,1);
eps=eps/sd(eps);
y=b0+b1*x+eps;
return(data.frame(y=y,x=x))
}
z=dgp()
Estimation step
LAD=function(...){
z=(...);
y=z[[1]]
x=z[[2]]
LADf=function(par) {(sum(y-par[1]-par[2]*x)^2)}
outLS=lm(y~x);
b0=as.numeric(outLS$coefficients[1]);b0
b1=as.numeric(outLS$coefficients[2]);b1
out=nlminb(c(b0,b1),LADf)
return(list(out$par,out$message))
}
LAD(z)
您的 LAD 函数:
LADf=function(par) {(sum(y-par[1]-par[2]*x)^2)}
对我来说看起来完全像最小二乘法。因此,您所做的是最小化平方和,而不是偏差的绝对值。你需要像
这样的东西LADf <- function(par) { sum(abs(y - par[1] - par[2]*x)) }
请注意,此函数不可微分,因此您必须使用可以处理它的优化器(例如 Nelder-Mead 或 SANN)。
LAD 估计量也等同于中值回归,因此您可以使用分位数回归包代替。