Determinación de la significación estadística del coeficiente de regresión lineal en presencia de multicolinealidad

9

Supongamos que tengo un montón de ciudades con diferentes tamaños de población, y quiero ver si hay una relación lineal positiva entre el número de tiendas de licores en una ciudad y el número de DUI. Donde estoy determinando si esta relación es significativa o no basada en una prueba t del coeficiente de regresión estimado.

Ahora claramente el pop. El tamaño de una ciudad se correlacionará positivamente tanto con el número de DUI como con el número de licorerías. Por lo tanto, si ejecuto una regresión lineal simple solo en las tiendas de licores y veo si su coeficiente de regresión es estadísticamente significativo, es probable que me encuentre con un problema de multicolinealidad y sobreestime el efecto de las tiendas de licores en los DUI.

¿Cuál de los dos métodos debo usar para corregir esto?

  1. Debería dividir el número de licorerías en la ciudad por su población para obtener un valor per cápita de licorería y luego retroceder en eso.

  2. Debería retroceder tanto en las tiendas de licores como en el tamaño, y luego mirar para ver si el coeficiente de la tienda de licores es significativo al controlar el tamaño.

  3. ¿Algún otro método?

Sinceramente, no puedo decidir cuál parece más sensato. Vacilo entre ellos, dependiendo de cuál pienso, soy capaz de convencerme de que esa es la forma correcta.

Por un lado, las licorerías per cápita parecen ser la variable correcta para usar, ya que los DUI son cometidos por individuos, pero eso no parece ser estadísticamente muy riguroso. Por otro lado, controlar el tamaño parece estadísticamente riguroso, pero más bien indirecto. Además, si vuelvo a escalar después de calcular la variable per cápita de las tiendas de licores, obtengo coeficientes de regresión muy similares entre los dos métodos, pero el método 1 produce un valor p menor.

Thoth
fuente
3
Una pregunta para responder es si desea modelar las tasas o no. Podría ser útil leer esto: en un modelo de Poisson, ¿cuál es la diferencia entre usar el tiempo como una covariable o un desplazamiento?
gung - Restablece a Monica
2
Una pregunta importante y bien enmarcada.
rolando2
2
Vale la pena enfatizar esto en la respuesta vinculada de @ gung: "Si debe modelar conteos o tasas realmente depende de cuál sea su pregunta sustantiva. Debe modelar la que corresponda a lo que quiere saber". (es decir, el objetivo no es minimizar el valor p, sino evaluar un efecto de interés)
GeoMatt22

Respuestas:

5

Regresaría el "DUI per capita" (Y) en "tiendas de licor per capita" (X) y "tamaño de la población" (Z). De esta manera, su Y refleja la propensión a conducir en estado de ebriedad de las personas urbanas, mientras que X es la característica de población de una ciudad determinada. Z es una variable de control por si acaso hay un efecto de tamaño en Y. No creo que vaya a ver un problema de multicolinealidad en esta configuración.

βZ

Aksakal
fuente
3

Si estimar su modelo con mínimos cuadrados ordinarios, su segunda regresión es bastante problemática.

Y es posible que desee pensar en cómo la variación de su término de error varía con el tamaño de la ciudad.

La regresión (2) es equivalente a su regresión (1) donde las observaciones son ponderadas por el cuadrado de la población de la ciudad:

yoyyoXyonorteyo

yyo=una+siXyo+ϵyo

norteyoyyo=unanorteyo+sinorteyoXyo+tuyo

Estos son los mínimos cuadrados ponderados , y los pesos que está aplicando son los cuadrados de la población de la ciudad. ¿Eso es mucho peso para las ciudades más grandes?

Tenga en cuenta que si tuviera una observación para cada individuo en una ciudad y le asignara a cada individuo el valor promedio de la ciudad, eso sería equivalente a ejecutar una regresión en la que está ponderando cada ciudad por población (no por población al cuadrado).

Matthew Gunn
fuente
1

Realicé algunos experimentos con datos simulados para ver qué método funciona mejor. Por favor lea mis hallazgos a continuación.

Veamos dos escenarios diferentes: Primero, donde no hay una relación directa entre DUI y tiendas de licores, y Segundo, si tenemos una relación directa. Luego examine cada uno de los métodos para ver qué método funciona mejor.

Caso 1: Sin relación directa, pero ambos están relacionados con la población.

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)

Ahora que los datos están simulados, veamos cómo le va a cada uno de los métodos.

## 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 altamente significativo, como se esperaba. Aunque la relación es indirecta.

## 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 no tiene importancia. Parece funcionar, pero no saltemos a conclusiones todavía.

## 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 no es significativo, el valor p también está bastante cerca del Método 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) altamente significativo! No esperaba eso, tal vez este método no sea el mejor para la declaración de su problema.

Caso 2: relación directa tanto con la población como con las tiendas de licor

### 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)

Veamos el rendimiento de cada uno de los métodos en este escenario.

## 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 ***

Esperado, pero no es un gran método para hacer inferencias 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    

Eso es una sorpresa para mí, esperaba que este método capturara la relación pero no la retoma. ¡Entonces este método falla en este escenario!

## 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 es significativo, el valor p tiene mucho sentido. Un claro ganador para mí.

## 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; El método 2 produce los valores p más precisos en diferentes escenarios.

ab90hi
fuente