La risposta di Brian Borchers è piuttosto buona --- i dati che contengono strani valori anomali spesso non sono ben analizzati da OLS. Ho intenzione di espandere questo aspetto aggiungendo un'immagine, una Monte Carlo e un po 'di R
codice.
Prendi in considerazione un modello di regressione molto semplice:
Yi ϵi=β1xi+ϵi=⎧⎩⎨⎪⎪N(0,0.04)31−31w.p.w.p.w.p.0.9990.00050.0005
Questo modello è conforme alla tua configurazione con un coefficiente di pendenza di 1.
Il grafico allegato mostra un set di dati composto da 100 osservazioni su questo modello, con la variabile x che va da 0 a 1. Nel set di dati tracciato, c'è un disegno sull'errore che presenta un valore anomalo (+31 in questo caso) . Sono tracciate anche la linea di regressione OLS in blu e la linea di regressione deviazioni meno assolute in rosso. Notare come OLS ma non LAD è distorto dal valore anomalo:
Possiamo verificarlo facendo un Monte Carlo. Nel Monte Carlo, ho generato un set di dati di 100 osservazioni usando lo stesso e un con la distribuzione sopra 10.000 volte. In quelle 10.000 repliche, non otterremo un valore anomalo nella stragrande maggioranza. Ma tra pochi avremo un valore anomalo e rovinerà OLS ma non LAD ogni volta. Il codice seguente esegue il Monte Carlo. Ecco i risultati per i coefficienti di pendenza:ϵxϵR
Mean Std Dev Minimum Maximum
Slope by OLS 1.00 0.34 -1.76 3.89
Slope by LAD 1.00 0.09 0.66 1.36
Sia OLS che LAD producono stimatori imparziali (le pendenze sono entrambe in media 1,00 su 10.000 repliche). OLS produce uno stimatore con una deviazione standard molto più elevata, tuttavia, 0,34 vs 0,09. Pertanto, OLS non è il migliore / più efficiente tra gli stimatori imparziali, qui. È ancora BLU, ovviamente, ma LAD non è lineare, quindi non c'è contraddizione. Notare gli errori selvaggi che OLS può commettere nella colonna Min e Max. Non così SIGNORA.
Ecco il codice R sia per il grafico che per Monte Carlo:
# This program written in response to a Cross Validated question
# http://stats.stackexchange.com/questions/82864/when-would-least-squares-be-a-bad-idea
# The program runs a monte carlo to demonstrate that, in the presence of outliers,
# OLS may be a poor estimation method, even though it is BLUE.
library(quantreg)
library(plyr)
# Make a single 100 obs linear regression dataset with unusual error distribution
# Naturally, I played around with the seed to get a dataset which has one outlier
# data point.
set.seed(34543)
# First generate the unusual error term, a mixture of three components
e <- sqrt(0.04)*rnorm(100)
mixture <- runif(100)
e[mixture>0.9995] <- 31
e[mixture<0.0005] <- -31
summary(mixture)
summary(e)
# Regression model with beta=1
x <- 1:100 / 100
y <- x + e
# ols regression run on this dataset
reg1 <- lm(y~x)
summary(reg1)
# least absolute deviations run on this dataset
reg2 <- rq(y~x)
summary(reg2)
# plot, noticing how much the outlier effects ols and how little
# it effects lad
plot(y~x)
abline(reg1,col="blue",lwd=2)
abline(reg2,col="red",lwd=2)
# Let's do a little Monte Carlo, evaluating the estimator of the slope.
# 10,000 replications, each of a dataset with 100 observations
# To do this, I make a y vector and an x vector each one 1,000,000
# observations tall. The replications are groups of 100 in the data frame,
# so replication 1 is elements 1,2,...,100 in the data frame and replication
# 2 is 101,102,...,200. Etc.
set.seed(2345432)
e <- sqrt(0.04)*rnorm(1000000)
mixture <- runif(1000000)
e[mixture>0.9995] <- 31
e[mixture<0.0005] <- -31
var(e)
sum(e > 30)
sum(e < -30)
rm(mixture)
x <- rep(1:100 / 100, times=10000)
y <- x + e
replication <- trunc(0:999999 / 100) + 1
mc.df <- data.frame(y,x,replication)
ols.slopes <- ddply(mc.df,.(replication),
function(df) coef(lm(y~x,data=df))[2])
names(ols.slopes)[2] <- "estimate"
lad.slopes <- ddply(mc.df,.(replication),
function(df) coef(rq(y~x,data=df))[2])
names(lad.slopes)[2] <- "estimate"
summary(ols.slopes)
sd(ols.slopes$estimate)
summary(lad.slopes)
sd(lad.slopes$estimate)