Bugün, küçük bir veri kümesiyle oynuyordum ve mükemmel çoklu bağlantı nedeniyle başarısız olmasını beklediğim basit bir OLS regresyonu yaptım . Ancak, olmadı. Bu, çoklu bağlantı konusundaki anlayışımın yanlış olduğunu ima ediyor.
Sorum şu: Nerede yanılıyorum?
Değişkenlerimden birinin diğerlerinin doğrusal bir kombinasyonu olduğunu gösterebileceğimi düşünüyorum. Bu, tam sıralaması olmayan bir regresör matrisine yol açmalı ve bu nedenle katsayılar tanımlanmamalıdır.
Küçük bir tekrarlanabilir veri kümesi oluşturdum (aşağıdaki kod) :
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
Her zaman ihracatçı ve ithalatçı ABD eyaletleri olan, kukla intraUS
olduğunu1
.
Şimdi (ticaret) bir gerileme gerçekleştirmek flow
kapalıymış exporter
ve importer
mankenleri, dist
ance ve intraUS
kukla. R'yi aşağıdaki formülle beslemek lm(flow ~ dist + exporter + importer + intraUS, data = dat)
, tüm katsayılar için tahminler verir, eksik değerler veya tekillik hakkında uyarılar vermez:
(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
Bu bulmaca beni, regresör matris açıkça gösterir çünkü intraUS
doğrusal kombinasyonudur exporterFlorida
, importerFlorida
, exporterTexas
ve 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
Hesaplama exporterFlorida * importerFlorida + exporterFlorida * importerTexas + exporterTexas * importerFlorida + exporterTexas * importerTexas
- şaşırtıcı değil - tam olarak değerleri verir intraUS1
.
Benim sorum yine : Bu regresyon neden olmasın Bir değişkenin diğerlerinin doğrusal bir kombinasyonu olması nedeniyle başarısız ?
Tam kodun altında, tahmini yeniden oluşturun:
## 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")]