Heute habe ich mit einem kleinen Datensatz herumgespielt und eine einfache OLS-Regression durchgeführt, von der ich erwartet hatte , dass sie aufgrund perfekter Multikollinearität fehlschlägt. Das tat es jedoch nicht. Dies impliziert, dass mein Verständnis von Multikollinearität falsch ist.
Meine Frage ist: Wo irre ich mich?
Ich denke, ich kann zeigen, dass eine meiner Variablen eine lineare Kombination der anderen ist. Dies sollte zu einer Regressormatrix führen, die keinen vollen Rang hat, und daher sollten die Koeffizienten nicht identifiziert werden.
Ich habe einen kleinen reproduzierbaren Datensatz generiert (Code unten) :
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
Jedes Mal , Exporteur und Importeur sind US - Bundesstaaten, die Attrappe intraUS
ist 1
.
Jetzt führe ich eine Regression von (Trade) flow
s auf exporter
und importer
Dummies, dist
Ance und intraUS
Dummy durch. Wenn Sie R mit der folgenden Formel lm(flow ~ dist + exporter + importer + intraUS, data = dat)
eingeben, werden Schätzungen für alle Koeffizienten ohne fehlende Werte oder Warnungen zur Singularität zurückgegeben:
(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
Dieses Rätsel mir, weil die Regressormatrix zeigt deutlich , dass intraUS
eine lineare Kombination von exporterFlorida
, importerFlorida
, exporterTexas
und 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
Die Berechnung exporterFlorida * importerFlorida + exporterFlorida * importerTexas + exporterTexas * importerFlorida + exporterTexas * importerTexas
ergibt - nicht überraschend - genau die Werte in intraUS1
.
Meine Frage lautet also erneut : Warum scheitert diese Regression nicht , da eine Variable eine lineare Kombination der anderen ist?
Unterhalb des vollständigen Codes wird die Schätzung wiedergegeben:
## 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")]