আজ, আমি একটি ছোট ডেটাসেট নিয়ে ঘুরে বেড়াচ্ছিলাম এবং একটি সাধারণ ওএলএস রিগ্রেশন সম্পাদন করেছি যা আমি আশা করি নিখুঁত বহুবিশেষের কারণে ব্যর্থ হব । তবে তা হয়নি। এর থেকে বোঝা যায় যে বহুবিধ লাইনারিটি সম্পর্কে আমার বোঝাটি ভুল।
আমার প্রশ্ন: আমি কোথায় ভুল করছি?
আমি মনে করি যে আমি দেখাতে পারি যে আমার ভেরিয়েবলগুলির মধ্যে একটি হ'ল অন্যদের রৈখিক সংমিশ্রণ। এটিতে কোনও রেজিস্ট্রার ম্যাট্রিক্সের দিকে পরিচালিত হওয়া উচিত যার কোনও পূর্ণ পদ নেই এবং এইভাবে সহগগুলি চিহ্নিত করা উচিত নয়।
আমি একটি ছোট পুনরায় উত্পাদনযোগ্য ডেটাসেট তৈরি করেছি (নীচের কোড) :
exporter importer flow dist intraUS
1 Canada Canada 996.8677 6.367287 0
2 Florida Canada 995.8219 9.190562 0
3 Texas Canada 1001.6475 4.359063 0
4 Mexico Canada 1002.4371 7.476649 0
5 Canada Florida 1002.8789 5.389223 0
6 Florida Florida 1007.5589 6.779686 1
7 Texas Florida 996.8938 1.570600 1
8 Mexico Florida 1005.6247 5.910133 0
9 Canada Texas 999.9190 7.887672 0
10 Florida Texas 1004.1061 7.187803 1
11 Texas Texas 1004.5949 7.564273 1
12 Mexico Texas 1000.3728 2.021297 0
13 Canada Mexico 1003.0991 5.887743 0
14 Florida Mexico 999.2210 3.058495 0
15 Texas Mexico 997.6092 6.835883 0
16 Mexico Mexico 1006.7934 5.794425 0
প্রতিবার রফতানিকারক এবং আমদানিকারক intraUS
হ'ল মার্কিন যুক্তরাষ্ট্র, ডামি 1
।
এখন আমি (ট্রেড) flow
এর অন exporter
এবং importer
ডামি, dist
আনস এবং ডামির রিগ্রেশন সম্পাদন করি intraUS
। নিম্নলিখিত সূত্রটি দিয়ে আর খাওয়ানো lm(flow ~ dist + exporter + importer + intraUS, data = dat)
সমস্ত সহগের জন্য অনুমান দেয়, কোনও অনুপস্থিত মান বা এককতার বিষয়ে সতর্কতা নেই:
(Intercept) dist exporterFlorida exporterTexas exporterMexico importerFlorida importerTexas importerMexico intraUS1
995.1033157 0.5744661 -1.2340338 -1.8792073 3.7375783 3.0361727 1.3256032 3.3225512 4.2429599
এই পাজল আমাকে, কারণ regressor ম্যাট্রিক্স পরিষ্কারভাবে নির্দেশ করে যে intraUS
একটি রৈখিক সমন্বয় exporterFlorida
, importerFlorida
, exporterTexas
এবং importerTexas
:
> mmat <- data.frame(model.matrix(lm(flow ~ dist + exporter + importer + intraUS, data = dat)))
X.Intercept. dist exporterFlorida exporterTexas exporterMexico importerFlorida importerTexas importerMexico intraUS1
1 1 6.367287 0 0 0 0 0 0 0
2 1 9.190562 1 0 0 0 0 0 0
3 1 4.359063 0 1 0 0 0 0 0
4 1 7.476649 0 0 1 0 0 0 0
5 1 5.389223 0 0 0 1 0 0 0
6 1 6.779686 1 0 0 1 0 0 1
7 1 1.570600 0 1 0 1 0 0 1
8 1 5.910133 0 0 1 1 0 0 0
9 1 7.887672 0 0 0 0 1 0 0
10 1 7.187803 1 0 0 0 1 0 1
11 1 7.564273 0 1 0 0 1 0 1
12 1 2.021297 0 0 1 0 1 0 0
13 1 5.887743 0 0 0 0 0 1 0
14 1 3.058495 1 0 0 0 0 1 0
15 1 6.835883 0 1 0 0 0 1 0
16 1 5.794425 0 0 1 0 0 1 0
গণনা exporterFlorida * importerFlorida + exporterFlorida * importerTexas + exporterTexas * importerFlorida + exporterTexas * importerTexas
দিচ্ছে - আশ্চর্যের সাথে নয় - হুবহু মানগুলি intraUS1
।
সুতরাং আমার প্রশ্নটি আবার : কেন এই প্রতিরোধ ব্যর্থ হয় না , যদি একটি ভেরিয়েবল অপরটির রৈখিক সংমিশ্রণ হয়?
সম্পূর্ণ কোডের নীচে অনুমানটি পুনরুত্পাদন করুন:
## Generate data ####
set.seed(1)
states <- c("Canada", "Florida", "Texas", "Mexico")
dat <- expand.grid(states, states)
colnames(dat) <- c("exporter", "importer")
dat[, "flow"] <- NA
dat[, "dist"] <- NA
dat[, "intraUS"] <- 0
for (i in 1:nrow(dat)) {
dat[i, c("flow", "dist")] <- c(rnorm(1, mean = 1000, sd = 5), rnorm(1, mean = 6, sd = 2))
if (dat[i, "exporter"] %in% states[2:3] && dat[i, "importer"] %in% states[2:3]) {
dat[i, "intraUS"] <- 1
}
}
dat$intraUS <- factor(dat$intraUS)
## Run regression - works! ####
summary(lm(flow ~ dist + exporter + importer + intraUS, data = dat))
## Show that "intraUS1" is a linear combination of the dummies. ####
mmat <- data.frame(model.matrix(lm(flow ~ dist + exporter + importer + intraUS, data = dat)))
cbind(mmat, test = with(mmat,
exporterFlorida * importerFlorida + exporterFlorida * importerTexas +
exporterTexas * importerFlorida + exporterTexas * importerTexas
))[, c("intraUS1", "test")]