Determinazione della significatività statistica del coefficiente di regressione lineare in presenza di multicollinearità


9

Supponiamo che io abbia un sacco di città con diverse dimensioni della popolazione e che volessi vedere se ci fosse una relazione lineare positiva tra il numero di negozi di liquori in una città e il numero di DUI. Dove sto determinando se questa relazione è significativa o meno sulla base di un t-test del coefficiente di regressione stimato.

Ora chiaramente il pop. le dimensioni di una città saranno correlate positivamente sia al numero di DUI che al numero di negozi di liquori. Quindi, se eseguo una semplice regressione lineare solo sui negozi di liquori e vedo se il suo coefficiente di regressione è statisticamente significativo, probabilmente incontrerò un problema di multicollinearità e sopravvaluterò l'effetto dei negozi di liquori sui DUI.

Quale dei due metodi dovrei usare per correggere questo?

  1. Dovrei dividere il numero di negozi di liquori in città per la sua popolazione al fine di ottenere un valore pro capite di un negozio di liquori e poi regredire su quello.

  2. Dovrei regredire su entrambi i negozi di liquori e le dimensioni, e quindi cercare di vedere se il coefficiente del negozio di liquori è significativo quando si controlla la dimensione.

  3. Qualche altro metodo?

Onestamente non riesco a decidere quale sembra più sensato. Vado in bilico tra loro, a seconda di quello a cui penso di riuscire a convincermi che è la strada giusta.

Da un lato i negozi di liquori pro capite sembrano la variabile giusta da usare, poiché i DUI sono commessi da individui, ma ciò non sembra molto statisticamente rigoroso. D'altra parte, il controllo delle dimensioni sembra statisticamente rigoroso, ma piuttosto indiretto. Inoltre, se ridimensiono dopo aver calcolato le variabili pro capite dei negozi di liquori, ottengo coefficienti di regressione molto simili tra i due metodi, ma il metodo 1 produce un valore p più piccolo.


3
Una domanda a cui rispondere è se si desidera modellare le tariffe o meno. Potrebbe essere utile leggere questo: in un modello di Poisson, qual è la differenza tra l'utilizzo del tempo come covariata o offset?
gung - Ripristina Monica

2
Una domanda importante e ben strutturata.
rolando2,

2
Vale la pena sottolineare questo dalla risposta collegata di @ gung: "Il fatto che tu debba modellare i conteggi o i tassi dipende davvero da quale sia la tua domanda sostanziale. Dovresti modellare quello che corrisponde a ciò che vuoi sapere." (ovvero l'obiettivo non è minimizzare il valore
p

Risposte:


5

Ritirerei il "DUI pro capite" (Y) su "negozi di liquori pro capite" (X) e "popolazione" (Z). In questo modo la tua Y riflette la propensione alla guida ubriaca delle persone urbane, mentre X è la caratteristica della popolazione di una determinata città. Z è una variabile di controllo nel caso in cui ci sia un effetto di dimensione su Y. Non penso che vedrai problemi di multicollinearità in questa configurazione.

Questa configurazione è più interessante del tuo modello 1. Qui, la tua base è assumere che il numero di DUI sia proporzionale alla popolazione, mentre catturerebbe la non linearità, ad esempio le persone nelle città più grandi sono più inclini alla guida ubriaca. Inoltre X riflette direttamente l'ambiente culturale e legale, già adattato alle dimensioni. Puoi trovare all'incirca la stessa X per città di dimensioni diverse in Sough. Ciò consente anche di introdurre altre variabili di controllo come lo stato Rosso / Blu, Costiero / Continentale ecc.βZ


3

Se si stima il modello con minimi quadrati ordinari, la seconda regressione è piuttosto problematica.

E potresti voler pensare a come la varianza del tuo termine di errore varia con la dimensione della città.

La regressione (2) equivale alla regressione (1) in cui le osservazioni sono ponderate dal quadrato della popolazione della città:

Per ogni città , lascio essere bevuto incidenti di guida pro capite, cerchiamo essere negozi di liquori pro capite, e lasciare che essere la popolazione della città.ioyioXionio

La regressione (1) è: Se esegui la regressione (2) senza una costante, hai essenzialmente ridimensionato ogni osservazione della regressione (1) in base alla popolazione, ovvero stai eseguendo:

yio=un'+BXio+εio

nioyio=un'nio+BnioXio+uio

Si tratta di minimi quadrati ponderati e i pesi che si stanno applicando sono il quadrato della popolazione della città. È un sacco di peso che stai dando alle città più grandi ?!

Si noti che se si avesse un'osservazione per ogni individuo in una città e si assegnasse a ciascun individuo il valore medio per la città, ciò equivarrebbe a eseguire una regressione in cui si sta ponderando ogni città per popolazione (non per popolazione al quadrato).


1

Ho eseguito alcuni esperimenti su dati simulati per vedere quale metodo funziona meglio. Si prega di leggere i miei risultati di seguito.

Vediamo due diversi scenari: il primo in cui non esiste una relazione diretta tra DUI e i negozi di liquori e il secondo in cui abbiamo una relazione diretta. Quindi esaminare ciascuno dei metodi per vedere quale metodo funziona meglio.

Caso 1: nessuna relazione diretta, ma entrambi sono correlati alla popolazione

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)

Ora che i dati sono simulati, vediamo come va ciascuno dei metodi.

## 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 significativi, come previsto. Sebbene la relazione sia indiretta.

## 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 non ha significato. Sembra funzionare, ma non lascia ancora saltare alle conclusioni.

## 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 significativo, il valore p è anche abbastanza vicino al Metodo 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! Non me l'aspettavo, forse questo metodo non è il migliore per la tua affermazione sul problema.

Caso 2: relazione diretta con Popolazione e 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)

Vediamo le prestazioni di ciascuno dei metodi in questo scenario.

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

Previsto, ma non un ottimo metodo per fare inferenze causali.

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

Questa è una sorpresa per me, mi aspettavo che questo metodo catturasse la relazione ma non la riprende. Quindi questo metodo fallisce in questo scenario!

## 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 è significativo, il valore p ha molto senso. Un chiaro vincitore per me.

## 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; Il metodo 2 produce valori p più accurati in diversi scenari.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.