Esto es más bien una respuesta al comentario de @PeterFlom sobre mi comentario, pero es demasiado grande para caber en un comentario (y se relaciona con la pregunta original).
Aquí hay un código R para mostrar un caso en el que hay múltiples líneas que dan todos los mismos valores mínimos de MAD/SAD.
La primera parte del ejemplo son datos claramente artificiales para demostrar, pero el final incluye más bien un elemento aleatorio para demostrar que el concepto general seguirá siendo válido en algunos casos más realistas.
x <- rep(1:10, each=2)
y <- x/10 + 0:1
plot(x,y)
sad <- function(x,y,coef) { # mad is sad/n
yhat <- coef[1] + coef[2]*x
resid <- y - yhat
sum( abs( resid ) )
}
library(quantreg)
fit0 <- rq( y~x )
abline(fit0)
fit1 <- lm( y~x, subset= c(1,20) )
fit2 <- lm( y~x, subset= c(2,19) )
fit3 <- lm( y~x, subset= c(2,20) )
fit4 <- lm( y~x, subset= c(1,19) )
fit5.coef <- c(0.5, 1/10)
abline(fit1)
abline(fit2)
abline(fit3)
abline(fit4)
abline(fit5.coef)
for (i in seq( -0.5, 0.5, by=0.1 ) ) {
abline( fit5.coef + c(i,0) )
}
tmp1 <- seq( coef(fit1)[1], coef(fit2)[1], len=10 )
tmp2 <- seq( coef(fit1)[2], coef(fit2)[2], len=10 )
for (i in seq_along(tmp1) ) {
abline( tmp1[i], tmp2[i] )
}
sad(x,y, coef(fit0))
sad(x,y, coef(fit1))
sad(x,y, coef(fit2))
sad(x,y, coef(fit3))
sad(x,y, coef(fit4))
sad(x,y, fit5.coef )
for (i in seq( -0.5, 0.5, by=0.1 ) ) {
print(sad(x,y, fit5.coef + c(i,0) ))
}
for (i in seq_along(tmp1) ) {
print(sad(x,y, c(tmp1[i], tmp2[i]) ) )
}
set.seed(1)
y2 <- y + rnorm(20,0,0.25)
plot(x,y2)
fitnew <- rq(y2~x) # note the still non-unique warning
abline(fitnew)
abline(coef(fitnew) + c(.1,0))
abline(coef(fitnew) + c(0, 0.01) )
sad( x,y2, coef(fitnew) )
sad( x,y2, coef(fitnew)+c(.1,0))
sad( x,y2, coef(fitnew)+c(0,0.01))