Détermination de la signification statistique du coefficient de régression linéaire en présence de multicolinéarité

9

Supposons que j'ai un tas de villes avec différentes tailles de population, et je voulais voir s'il y avait une relation linéaire positive entre le nombre de magasins d'alcool dans une ville et le nombre de DUI. Où je détermine si cette relation est significative ou non sur la base d'un test t du coefficient de régression estimé.

Maintenant clairement la pop. la taille d'une ville va être positivement corrélée avec le nombre de DUI ainsi que le nombre de magasins d'alcools. Ainsi, si je lance une simple régression linéaire sur les magasins d'alcool uniquement et que je vois si son coefficient de régression est statistiquement significatif, je rencontrerai probablement un problème de multicolinéarité et surestimerai l'effet des magasins d'alcool sur les DUI.

Laquelle des deux méthodes dois-je utiliser pour corriger cela?

  1. Je devrais diviser le nombre de magasins d'alcools dans la ville par sa population afin d'obtenir un magasin d'alcools par habitant, puis régresser sur cela.

  2. Je devrais régresser à la fois sur les magasins d'alcool et sur la taille, puis chercher à voir si le coefficient de magasin d'alcool est significatif lors du contrôle de la taille.

  3. Une autre méthode?

Honnêtement, je ne peux pas décider ce qui semble plus sensé. Je vacille entre eux, en fonction de celui auquel je pense, je peux me convaincre que c'est la bonne façon.

D'une part, les magasins d'alcools par habitant semblent être la bonne variable à utiliser, car les DUI sont commis par des particuliers, mais cela ne semble pas très rigoureux sur le plan statistique. D'un autre côté, le contrôle de la taille semble statistiquement rigoureux, mais plutôt indirect. De plus, si je redimensionne après avoir calculé la variable des stocks d'alcool par habitant, j'obtiens des coefficients de régression très similaires entre les deux méthodes, mais la méthode 1 produit une valeur de p plus petite.

Thoth
la source
3
Une question à laquelle vous devez répondre est de savoir si vous souhaitez modéliser les tarifs ou non. Il pourrait être utile de lire ceci: dans un modèle de Poisson, quelle est la différence entre l'utilisation du temps comme covariable ou un décalage?
gung - Rétablir Monica
2
Une question importante et bien cadrée.
rolando2
2
Cela vaut la peine de le souligner dans la réponse liée de @ gung: "La question de savoir si vous devez modéliser le nombre ou les taux dépend vraiment de votre question de fond. Vous devez modéliser celle qui correspond à ce que vous voulez savoir." (c.-à-d. le but n'est pas de minimiser la valeur ap, mais d'évaluer un effet d'intérêt)
GeoMatt22

Réponses:

5

Je régresserais le "DUI per capita" (Y) sur "liquer stores per capita" (X) et "population size" (Z). De cette façon, votre Y reflète la propension à conduire avec facultés affaiblies des citadins, tandis que X est la population caractéristique d'une ville donnée. Z est une variable de contrôle au cas où il y aurait un effet de taille sur Y. Je ne pense pas que vous allez voir un problème de multicolinéarité dans cette configuration.

βZ

Aksakal
la source
3

Si vous estimez votre modèle avec les moindres carrés ordinaires, votre deuxième régression est plutôt problématique.

Et vous voudrez peut-être réfléchir à la façon dont la variance de votre terme d'erreur varie avec la taille de la ville.

La régression (2) est équivalente à votre régression (1) où les observations sont pondérées par le carré de la population de la ville:

jeyjeXjenje

yje=une+bXje+ϵje

njeyje=unenje+bnjeXje+uje

Il s'agit des moindres carrés pondérés et les poids que vous appliquez sont le carré de la population de la ville. C'est beaucoup de poids que vous donnez aux plus grandes villes?!

Notez que si vous aviez une observation pour chaque individu dans une ville et assigniez à chaque individu la valeur moyenne de la ville, cela équivaudrait à exécuter une régression où vous pondérez chaque ville par la population (pas la population au carré).

Matthew Gunn
la source
1

J'ai effectué quelques expériences sur des données simulées pour voir quelle méthode fonctionne le mieux. Veuillez lire mes conclusions ci-dessous.

Regardons deux scénarios différents - d'abord où il n'y a pas de relation directe entre les magasins DUI & Liquor et deuxièmement où nous avons une relation directe. Examinez ensuite chacune des méthodes pour voir quelle méthode fonctionne le mieux.

Cas 1: Pas de relation directe mais les deux sont liés à la population

library(rmutil)
############
## Simulating Data

set.seed(111)  
# Simulating city populations 
popln <- rpareto(n=10000,m=10000,s=1.2)

# Simulating DUI numbers
e1 <- rnorm(10000,mean=0,sd=15)
DUI = 100 + popln * 0.04 + e1
summary(DUI)
truehist(log(DUI))

# Simulating Nbr of Liquor stores
e2 <- rnorm(100,mean=0,sd=5)
Nbr_Liquor_Stores = 20 + popln * 0.009 + e2
summary(Nbr_Liquor_Stores)
truehist(log(Nbr_Liquor_Stores))

dat <- data.frame(popln,DUI,Nbr_Liquor_Stores)

Maintenant que les données sont simulées, voyons comment chacune des méthodes s'en sort.

## Method 0: Simple OLS
fit0 <- lm(DUI~Nbr_Liquor_Stores,data=dat)
summary(fit0)

Coefficients:
                   Estimate Std. Error  t value Pr(>|t|)    
(Intercept)       9.4353630  0.2801544    33.68   <2e-16 ***
Nbr_Liquor_Stores 4.4444207  0.0001609 27617.49   <2e-16 ***

Nbr_Liquor_Stores hautement significatif, comme prévu. Bien que la relation soit indirecte.

## Method 1: Divide Liquor Stores by population and then regress
fit1 <- lm( I(DUI/popln) ~ Nbr_Liquor_Stores, data=dat)
summary(fit1)

                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)        4.981e-01  4.143e-02  12.022   <2e-16 ***
Nbr_Liquor_Stores -1.325e-05  2.380e-05  -0.557    0.578    

Nbr_Liquor_Stores n'a aucune signification. Semble fonctionner, mais ne permet pas encore de tirer des conclusions.

## Method 2: Divide Liquor Stores by population and then regress
fit2 <- lm( DUI ~ Nbr_Liquor_Stores + popln, data=dat)
summary(fit2)

                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)        1.003e+02  6.022e-01 166.569   <2e-16 ***
Nbr_Liquor_Stores -1.603e-02  3.042e-02  -0.527    0.598    
popln              4.014e-02  2.738e-04 146.618   <2e-16 ***

Nbr_Liquor_Stores non significatif, la valeur de p est également assez proche de la méthode 1.

## Method 3: "DUI per capita" on "liquer stores per capita" and "population size" 
fit3 <- lm( I(DUI/popln) ~ I(Nbr_Liquor_Stores/popln) + popln, data=dat)
summary(fit3)

                             Estimate Std. Error t value Pr(>|t|)    
(Intercept)                 2.841e-02  1.300e-02   2.187   0.0288 *  
I(Nbr_Liquor_Stores/popln)  4.886e+00  1.603e-02 304.867   <2e-16 ***
popln                      -8.426e-09  6.675e-08  -0.126   0.8996    

(Nbr_Liquor_Stores / popln) hautement significatif! Je ne m'y attendais pas, peut-être que cette méthode n'est pas la meilleure pour votre énoncé de problème.

Cas 2: Relation directe avec Population et Nbr_Liquor_Stores

### Simulating Data    

set.seed(111)  
# Simulating city populations 
popln <- rpareto(n=10000,m=10000,s=1.2)

# Simulating Nbr of Liquor stores
e2 <- rnorm(100,mean=0,sd=5)
Nbr_Liquor_Stores = 20 + popln * 0.009 + e2
summary(Nbr_Liquor_Stores)
truehist(log(Nbr_Liquor_Stores))

# Simulating DUI numbers
e1 <- rnorm(10000,mean=0,sd=15)
DUI = 100 + popln * 0.021 + Nbr_Liquor_Stores * 0.01 + e1
summary(DUI)
truehist(log(DUI))

dat <- data.frame(popln,DUI,Nbr_Liquor_Stores)

Voyons les performances de chacune des méthodes de ce scénario.

## Method 0: Simple OLS
fit0 <- lm(DUI~Nbr_Liquor_Stores,data=dat)
summary(fit0)

                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)       5.244e+01  1.951e-01   268.8   <2e-16 ***
Nbr_Liquor_Stores 2.343e+00  1.121e-04 20908.9   <2e-16 ***

Attendu, mais pas une excellente méthode pour faire des inférences causales.

## Method 1: Divide Liquor Stores by population and then regress
fit1 <- lm( I(DUI/popln) ~ Nbr_Liquor_Stores, data=dat)
summary(fit1)

                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)        4.705e-01  4.005e-02  11.747   <2e-16 ***
Nbr_Liquor_Stores -1.294e-05  2.301e-05  -0.562    0.574    

C'est une surprise pour moi, je m'attendais à ce que cette méthode capture la relation mais elle ne la reprend pas. Cette méthode échoue donc dans ce scénario!

## Method 2: Divide Liquor Stores by population and then regress
fit2 <- lm( DUI ~ Nbr_Liquor_Stores + popln, data=dat)
summary(fit2)

                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)        1.013e+02  5.945e-01 170.391   <2e-16 ***
Nbr_Liquor_Stores -5.484e-02  2.825e-02  -1.941   0.0523 .  
popln              2.158e-02  2.543e-04  84.875   <2e-16 ***

Nbr_Liquor_Stores est significatif, la valeur p a beaucoup de sens. Un gagnant clair pour moi.

## Method 3: "DUI per capita" on "liquer stores per capita" and "population size" 
fit3 <- lm( I(DUI/popln) ~ I(Nbr_Liquor_Stores/popln) + popln, data=dat)
summary(fit3)

                             Estimate Std. Error t value Pr(>|t|)    
(Intercept)                 6.540e-02  1.485e-02   4.405 1.07e-05 ***
I(Nbr_Liquor_Stores/popln)  3.915e+00  1.553e-02 252.063  < 2e-16 ***
popln                      -2.056e-08  7.635e-08  -0.269    0.788    

TLDR; La méthode 2 produit les valeurs de p les plus précises dans différents scénarios.

ab90hi
la source