Brian Borchers'ın cevabı oldukça iyi --- garip aykırı değerler içeren veriler genellikle OLS tarafından iyi analiz edilmiyor. Bir resim, bir Monte Carlo ve bir R
kod ekleyerek bunu daha da genişleteceğim .
Çok basit bir regresyon modeli düşünün:
Yi ϵi=β1xi+ϵi=⎧⎩⎨⎪⎪N(0,0.04)31−31w.p.w.p.w.p.0.9990.00050.0005
Bu model, 1 eğim katsayısı ile kurulumunuza uygundur.
Ekli grafik, bu modelde 100 gözlemden oluşan ve x değişkeni 0'dan 1'e çalışan bir veri kümesini gösterir. Grafik çizilen veri kümesinde, bir aykırı değerle ortaya çıkan hata üzerinde bir çizim vardır (bu durumda +31). . Mavi OLS regresyon çizgisi ve kırmızı renkte en az mutlak sapma regresyon çizgisi de çizilmiştir. OLS, ancak LAD değil aykırı değer tarafından nasıl bozulduğuna dikkat edin:
Monte Carlo yaparak bunu doğrulayabiliriz. Monte Carlo'da, aynı ve yukarıdaki dağılımı 10.000 kez olan bir kullanarak 100 gözlemden oluşan bir veri kümesi oluşturuyorum . Bu 10.000 kopyada, büyük çoğunlukta bir aykırı değer elde edemeyiz. Ama birkaçında bir aykırı değer elde edeceğiz ve her seferinde OLS'yi batıracak ama LAD değil. Aşağıdaki kod Monte Carlo'yu çalıştırıyor. Eğim katsayıları için sonuçlar:ϵ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
Hem OLS hem de LAD tarafsız tahmin ediciler üretir (eğimler 10.000 replikasyonu üzerinde ortalama 1,00'dür). OLS, çok daha yüksek standart sapmaya sahip bir tahminci üretir, ancak 0.34'e karşı 0.09. Bu nedenle, OLS burada yansız tahmin ediciler arasında en iyi / en verimli değildir. Elbette hala MAVİ, ama LAD doğrusal değil, bu yüzden bir çelişki yok. OLS'un Min ve Maks sütununda yapabileceği vahşi hatalara dikkat edin. O kadar LAD değil.
Hem grafik hem de Monte Carlo için R kodu:
# 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)