Pourquoi cette régression N'échoue PAS en raison d'une parfaite multicolinéarité, bien qu'une variable soit une combinaison linéaire d'autres?

15

Aujourd'hui, je jouais avec un petit ensemble de données et j'ai effectué une régression OLS simple que je m'attendais à échouer en raison d'une parfaite multicolinéarité. Mais ce ne fut pas le cas. Cela implique que ma compréhension de la multicolinéarité est fausse.

Ma question est: je me trompe?


Je pense que je peux montrer qu'une de mes variables est une combinaison linéaire des autres. Cela devrait conduire à une matrice de régresseur qui n'a pas de rang complet et donc les coefficients ne devraient pas être identifiés.

J'ai généré un petit jeu de données reproductible (code ci-dessous) :

   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

Chaque fois que l'exportateur et l'importateur sont des États américains, le mannequin l' intraUSest 1.

Maintenant, j'effectue une régression de (commerce) flowsur exporteret des importermannequins, distance et le intraUSmannequin. L'alimentation de R avec la formule suivante lm(flow ~ dist + exporter + importer + intraUS, data = dat)renvoie des estimations pour tous les coefficients, aucune valeur manquante ni avertissement concernant la singularité:

(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

Ce casse - tête moi, parce que la matrice de régresseur indique clairement que intraUSest une combinaison linéaire exporterFlorida, importerFlorida, exporterTexaset 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

Le calcul exporterFlorida * importerFlorida + exporterFlorida * importerTexas + exporterTexas * importerFlorida + exporterTexas * importerTexasdonne - sans surprise - exactement les valeurs en intraUS1.

Donc, ma question est, encore une fois : pourquoi cette régression n'échoue pas , étant donné qu'une variable est une combinaison linéaire des autres?


Sous le code complet, reproduisez l'estimation:

## 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")]
CL.
la source
9
Downvoters, pourriez-vous expliquer ce que j'ai fait de mal? Je ne suis pas très familier avec Crossvalidated et j'aimerais savoir ce qui ne va pas avec cette question, donc je peux faire mieux la prochaine fois.
CL.

Réponses:

30

exporterFlorida * importerFlorida + exporterFlorida * importerTexas + exporterTexas * importerFlorida + exporterTexas * importerTexas

C'est pas une combinaison linéaire exporterFlorida, importerFlorida, importerTexaset exporterTexas. Dans une combinaison linéaire, les coefficients des vecteurs doivent être des constantes . Donc quelque chose comme

2*importerFlorida + 3*importerTexas - exporterFlorida - 2*exporterTexas

est une combinaison linéaire.

Ce que vous avez pourrait peut-être être appelé une combinaison quadratique, mais cela étend la terminologie à la terre "Je fais des choses".

Matthew Drury
la source
2
Merde… c'est la punition de ne jamais avoir suivi de cours de mathématiques mais de commencer par des statistiques à la place. Je vous remercie!
CL.
4
Pas de soucis. C'est pour ça que nous sommes là!
Matthew Drury