Jawaban Brian Borchers cukup bagus --- data yang berisi outlier aneh seringkali tidak dianalisis dengan baik oleh OLS. Saya hanya akan memperluas ini dengan menambahkan gambar, Monte Carlo, dan beberapa R
kode.
Pertimbangkan model regresi yang sangat sederhana:
Yi ϵi=β1xi+ϵi=⎧⎩⎨⎪⎪N(0,0.04)31−31w.p.w.p.w.p.0.9990.00050.0005
Model ini sesuai dengan pengaturan Anda dengan koefisien kemiringan 1.
Plot terlampir menunjukkan dataset yang terdiri dari 100 pengamatan pada model ini, dengan variabel x berjalan dari 0 hingga 1. Dalam dataset yang diplot, ada satu gambar kesalahan yang muncul dengan nilai outlier (+31 dalam kasus ini) . Juga digambarkan garis regresi OLS berwarna biru dan garis regresi deviasi absolut berwarna merah. Perhatikan bagaimana OLS tetapi tidak LAD terdistorsi oleh pencilan:
Kami dapat memverifikasi ini dengan melakukan Monte Carlo. Di Monte Carlo, saya menghasilkan dataset dari 100 pengamatan menggunakan dan an dengan distribusi di atas 10.000 kali. Dalam 10.000 replikasi itu, kita tidak akan mendapatkan outlier di sebagian besar. Tetapi dalam beberapa kita akan mendapatkan pencilan, dan itu akan mengacaukan OLS tetapi tidak LAD setiap kali. The kode di bawah menjalankan Monte Carlo. Berikut adalah hasil untuk koefisien kemiringan: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
Baik OLS dan LAD menghasilkan estimator yang tidak bias (lereng rata-rata 1,00 lebih dari 10.000 replikasi) OLS menghasilkan estimator dengan standar deviasi yang jauh lebih tinggi, meskipun, 0,34 vs 0,09. Dengan demikian, OLS tidak terbaik / paling efisien di antara penaksir yang tidak memihak, di sini. Ini masih BIRU, tentu saja, tetapi LAD tidak linier, jadi tidak ada kontradiksi. Perhatikan kesalahan liar yang dapat dilakukan OLS di kolom Min dan Max. Tidak begitu LAD.
Berikut adalah kode R untuk grafik dan 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)