ब्रायन Borchers जवाब काफी अच्छा है --- डेटा जिसमें अजीब आउटलेयर होते हैं अक्सर ओएलएस द्वारा अच्छी तरह से विश्लेषण नहीं किया जाता है। मैं बस एक चित्र, एक मोंटे कार्लो और कुछ R
कोड जोड़कर इस पर विस्तार करने जा रहा हूं ।
एक बहुत ही सरल प्रतिगमन मॉडल पर विचार करें:
Yमैं εमैं= β1एक्समैं+ ϵमैं= ⎧⎩⎨⎪⎪एन( 0 , 0.04 )31- 31डब्ल्यू । पी ।डब्ल्यू । पी ।डब्ल्यू । पी ।0.9990.00050.0005
यह मॉडल 1 के ढलान गुणांक के साथ आपके सेटअप के अनुरूप है।
संलग्न प्लॉट इस मॉडल पर 100 प्रेक्षणों से युक्त एक डेटासेट दिखाता है, जिसमें 0 से 1 तक चलने वाला x वैरिएबल है। प्लॉट किए गए डेटासेट में, त्रुटि पर एक ड्रा होता है, जो एक आउटवर्ड वैल्यू (इस मामले में +31) के साथ आता है। । इसके अलावा प्लॉट नीले रंग में ओएलएस प्रतिगमन रेखा और लाल रंग में सबसे कम पूर्ण विचलन प्रतिगमन रेखा हैं। ध्यान दें कि कैसे OLS लेकिन LAD बाहरी रूप से विकृत नहीं है:
मोंटे कार्लो करके हम इसे सत्यापित कर सकते हैं। मोंटे कार्लो में, मैं एक ही का उपयोग कर 100 टिप्पणियों के एक डाटासेट उत्पन्न और एक ε ऊपर वितरण के साथ 10,000 गुना। उन 10,000 प्रतिकृति में, हम विशाल बहुमत में एक बाहरी नहीं मिलेगा। लेकिन कुछ ही समय में हम एक अलग हो जाएंगे, और यह हर बार ओएडी नहीं बल्कि खराब हो जाएगा। नीचे दिए गए कोड मोंटे कार्लो चलाता है। यहाँ ढलान गुणांक के परिणाम हैं:एक्सε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
ओएलएस और एलएडी दोनों निष्पक्ष अनुमानक पैदा करते हैं (ढलान दोनों 10,000 की औसत से अधिक 1.00 हैं)। ओएलएस बहुत अधिक मानक विचलन के साथ एक अनुमानक का उत्पादन करता है, हालांकि, 0.34 बनाम 0.09। इस प्रकार, निष्पक्ष अनुमान लगाने वालों के बीच, ओएलएस सबसे अच्छा / सबसे कुशल नहीं है। यह अभी भी निश्चित रूप से है, लेकिन LAD रैखिक नहीं है, इसलिए कोई विरोधाभास नहीं है। ध्यान दें कि जंगली त्रुटियां OLS न्यूनतम और अधिकतम कॉलम में कर सकती हैं। ऐसा नहीं है LAD।
यहाँ ग्राफ और मोंटे कार्लो दोनों के लिए R कोड है:
# 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)