Câu trả lời của Brian Borchers khá tốt --- dữ liệu chứa các ngoại lệ kỳ lạ thường không được phân tích kỹ bởi OLS. Tôi sẽ mở rộng điều này bằng cách thêm một hình ảnh, một Monte Carlo và một số R
mã.
Hãy xem xét một mô hình hồi quy rất đơn giản:
Yi ϵi=β1xi+ϵi=⎧⎩⎨⎪⎪N(0,0.04)31−31w.p.w.p.w.p.0.9990.00050.0005
Mô hình này phù hợp với thiết lập của bạn với hệ số độ dốc là 1.
Biểu đồ đính kèm hiển thị một tập dữ liệu bao gồm 100 quan sát trên mô hình này, với biến x chạy từ 0 đến 1. Trong tập dữ liệu được vẽ, có một lỗi về lỗi xuất hiện với giá trị ngoại lệ (+31 trong trường hợp này) . Cũng được vẽ là đường hồi quy OLS màu xanh lam và đường hồi quy sai lệch nhỏ nhất tuyệt đối có màu đỏ. Lưu ý cách OLS nhưng không LAD bị biến dạng bởi ngoại lệ:
Chúng tôi có thể xác minh điều này bằng cách thực hiện một Monte Carlo. Ở Monte Carlo, tôi tạo ra một bộ dữ liệu gồm 100 quan sát bằng cách sử dụng cùng và với phân phối trên 10.000 lần. Trong 10.000 bản sao đó, chúng tôi sẽ không nhận được một ngoại lệ trong đại đa số. Nhưng trong một vài lần chúng ta sẽ có một ngoại lệ, và nó sẽ làm hỏng OLS nhưng không LAD mỗi lần. Các mã bên dưới chạy Monte Carlo. Dưới đây là kết quả cho các hệ số độ dốc:ϵ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
Cả OLS và LAD đều tạo ra các công cụ ước tính không thiên vị (các độ dốc trung bình là 1,00 trên 10.000 lần lặp lại). OLS tạo ra một công cụ ước tính với độ lệch chuẩn cao hơn nhiều, tuy nhiên, 0,34 so với 0,09. Do đó, OLS không phải là tốt nhất / hiệu quả nhất trong số các công cụ ước tính không thiên vị, ở đây. Tất nhiên vẫn là BLUE, nhưng LAD không phải là tuyến tính, do đó không có mâu thuẫn. Lưu ý các lỗi hoang dã OLS có thể mắc trong cột Min và Max. Không phải vậy.
Đây là mã R cho cả biểu đồ và 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)