2015-11-09 3 views
-1

J'essaie d'estimer la régression LAD, mais elle me donne le message: "false convergence (8)". Qu'est-ce que cela signifie et pourquoi les estimateurs nlminb sont égaux à lm estimateurs?La fonction de moindre déviation absolue

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) 

Répondre

1

Votre fonction CONT:

LADf=function(par) {(sum(y-par[1]-par[2]*x)^2)} 

ressemble exactement à moindres carrés pour moi. Donc ce que vous faites est de minimiser la somme des carrés, pas des abs de la déviance. Vous avez besoin quelque chose comme

LADf <- function(par) { sum(abs(y - par[1] - par[2]*x)) } 

Notez que cette fonction n'est pas différentiables, donc vous devez utiliser un optimiseur qui peut gérer que (Nelder-Mead ou SANN par exemple).

L'estimateur LAD est également équivalent à la régression médiane, donc vous pouvez le faire avec un paquet de régression quantile à la place.