วันนี้ฉันกำลังเล่นกับชุดข้อมูลขนาดเล็กและดำเนินการถดถอย OLS ง่าย ๆ ซึ่งฉันคาดว่าจะล้มเหลวเนื่องจากมีความหลากหลายทางสมบูรณ์แบบ อย่างไรก็ตามมันไม่ได้ นี่ก็หมายความว่าความเข้าใจของฉันเกี่ยวกับความหลากสีเป็นสิ่งที่ผิด
คำถามของฉันคือที่ไหนผมผิดหรือเปล่า?
ฉันคิดว่าฉันสามารถแสดงให้เห็นว่าหนึ่งในตัวแปรของฉันคือการรวมกันเชิงเส้นของคนอื่น ๆ สิ่งนี้ควรนำไปสู่เมทริกซ์การถดถอยที่ไม่มีอันดับเต็มดังนั้นค่าสัมประสิทธิ์ไม่ควรถูกระบุ
ฉันสร้างชุดข้อมูลที่ทำซ้ำได้ขนาดเล็ก(รหัสด้านล่าง) :
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
ance และintraUS
หุ่น การให้อาหาร R ด้วยสูตรต่อไปนี้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")]