ব্রায়ান বোর্চার্স উত্তরটি বেশ ভাল --- যে তথ্যগুলিতে অদ্ভুত আউটলিয়ার রয়েছে সেগুলি প্রায়শই ওএলএস দ্বারা ভালভাবে বিশ্লেষণ করা হয় না। আমি কেবল একটি ছবি, একটি মন্টি কার্লো এবং কিছু R
কোড যুক্ত করে এটিতে প্রসারিত করতে যাচ্ছি ।
খুব সাধারণ রিগ্রেশন মডেলটি বিবেচনা করুন:
ওয়াইআমি εআমি= β1এক্সআমি+ + εআমি= ⎧⎩⎨⎪⎪এন( 0 , 0.04 )31- 31W । পি ।W । পি ।W । পি ।0,9990.00050.0005
এই মডেলটি 1 এর slাল সহগের সাথে আপনার সেটআপের সাথে সামঞ্জস্য করে।
সংযুক্ত প্লটটি এই মডেলটিতে 100 টি পর্যবেক্ষণ বিশিষ্ট একটি ডেটাসেট দেখায়, 0 থেকে 1 অবধি চলকযুক্ত ডেটাসেটে, ত্রুটিটির একটি অঙ্ক আছে যা একটি বহিরাগত মান নিয়ে আসে (এই ক্ষেত্রে +31) । নীলে ওএলএসের রিগ্রেশন লাইন এবং লাল রঙের মধ্যে সর্বনিম্ন নিখুঁত বিচ্যুতি রিগ্রেশন লাইনও প্লট করা হয়েছে। লক্ষ করুন যে ওএলএস কিন্তু এলএডি নয় কীভাবে আউটলেটারের দ্বারা বিকৃত হয়:
আমরা মন্টি কার্লো করে এটি যাচাই করতে পারি। মন্টি কার্লোতে, আমি একই এবং একটি উপরের বিতরণ সহ 10,000 বার বার করে 100 টি পর্যবেক্ষণের একটি ডেটাसेट তৈরি করিএই 10,000 টি প্রতিলিপিগুলিতে আমরা বিশাল সংখ্যাগরিষ্ঠে কোনও আউটলেট পাবেন না। তবে কয়েকজনের মধ্যে আমরা একজন আউটরিয়ার পাব এবং এটি ওএলএস-কে স্ক্রু করবে তবে প্রতিবার LAD নয়। নিচের কোড মন্টে কার্লো চালায়। Theাল সহগের জন্য ফলাফলগুলি এখানে:ϵএক্সε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 নয়।
গ্রাফ এবং মন্টি কার্লো উভয়ের জন্য আর কোড এখানে রয়েছে:
# 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)