Bestimmung der statistischen Signifikanz des linearen Regressionskoeffizienten bei Vorhandensein von Multikollinearität

9

Angenommen, ich habe eine Reihe von Städten mit unterschiedlichen Bevölkerungsgrößen und wollte wissen, ob es eine positive lineare Beziehung zwischen der Anzahl der Spirituosengeschäfte in einer Stadt und der Anzahl der DUIs gibt. Wo ich anhand eines t-Tests des geschätzten Regressionskoeffizienten feststelle, ob diese Beziehung signifikant ist oder nicht.

Jetzt klar der Pop. Die Größe einer Stadt wird sowohl mit der Anzahl der DUIs als auch mit der Anzahl der Spirituosengeschäfte positiv korreliert. Wenn ich also eine einfache lineare Regression nur für Liquor-Speicher durchführe und sehe, ob ihr Regressionskoeffizient statistisch signifikant ist, werde ich wahrscheinlich auf ein Problem der Multikollinearität stoßen und die Auswirkung von Liquor-Speichern auf DUIs überschätzen.

Welche der beiden Methoden sollte ich verwenden, um dies zu korrigieren?

  1. Ich sollte die Anzahl der Spirituosengeschäfte in der Stadt durch die Bevölkerung teilen, um einen Pro-Kopf-Wert für Spirituosengeschäfte zu erhalten, und mich dann darauf zurückbilden.

  2. Ich sollte mich sowohl auf die Spirituosenlager als auch auf die Größe zurückbilden und dann prüfen, ob der Koeffizient der Spirituosenlager bei der Kontrolle der Größe signifikant ist.

  3. Eine andere Methode?

Ich kann mich ehrlich gesagt nicht entscheiden, was vernünftiger erscheint. Ich schwanke zwischen ihnen, je nachdem, an welche ich denke, kann ich mich davon überzeugen, dass das der richtige Weg ist.

Einerseits scheint die Pro-Kopf-Lagerung von Spirituosen die richtige Variable zu sein, da DUIs von Einzelpersonen festgelegt werden, aber das scheint statistisch nicht sehr streng zu sein. Andererseits scheint die Größenkontrolle statistisch streng, aber eher indirekt zu sein. Wenn ich nach der Berechnung der Pro-Kopf-Variablen für Spirituosenspeicher neu skaliere, erhalte ich außerdem sehr ähnliche Regressionskoeffizienten zwischen den beiden Methoden, aber Methode 1 erzeugt einen kleineren p-Wert.

Thoth
quelle
3
Eine zu beantwortende Frage ist, ob Sie Preise modellieren möchten oder nicht. Es könnte hilfreich sein, dies zu lesen: Was ist in einem Poisson-Modell der Unterschied zwischen der Verwendung der Zeit als Kovariate oder als Offset?
Gung - Reinstate Monica
2
Eine wichtige und gut umrahmte Frage.
Rolando2
2
Hervorzuheben ist dies aus der verknüpften Antwort von @ gung: "Ob Sie Zählungen oder Raten modellieren sollten, hängt wirklich von Ihrer inhaltlichen Frage ab. Sie sollten die modellieren, die dem entspricht, was Sie wissen möchten." (dh das Ziel ist nicht, den ap-Wert zu minimieren, sondern einen interessierenden Effekt zu bewerten)
GeoMatt22

Antworten:

5

Ich würde den "DUI pro Kopf" (Y) auf "Spirituosengeschäfte pro Kopf" (X) und "Bevölkerungsgröße" (Z) zurückführen. Auf diese Weise spiegelt Ihr Y die Neigung der Stadtbewohner zum betrunkenen Fahren wider, während X das Bevölkerungsmerkmal einer bestimmten Stadt ist. Z ist eine Steuervariable für den Fall, dass es einen Größeneffekt auf Y gibt. Ich glaube nicht, dass in diesem Setup ein Multikollinearitätsproblem auftreten wird.

Dieses Setup ist interessanter als Ihr Modell 1. Hier ist Ihre Basis die Annahme, dass die Anzahl der DUIs proportional zur Bevölkerung ist, während die Nichtlinearität würde, z. B. sind Menschen in größeren Städten anfälliger für betrunkenes Fahren. Auch X spiegelt das kulturelle und rechtliche Umfeld direkt wider, das bereits an die Größe angepasst wurde. Möglicherweise erhalten Sie in Sough ungefähr das gleiche X für Städte unterschiedlicher Größe. Auf diese Weise können Sie auch andere Steuervariablen wie Rot / Blau, Küste / Kontinental usw. einführen.βZ.

Aksakal
quelle
3

Wenn Sie Ihr Modell mit gewöhnlichen kleinsten Quadraten schätzen, ist Ihre zweite Regression ziemlich problematisch.

Vielleicht möchten Sie darüber nachdenken, wie sich die Varianz Ihres Fehlerterms mit der Stadtgröße ändert.

Die Regression (2) entspricht Ihrer Regression (1), bei der die Beobachtungen mit dem Quadrat der Stadtbevölkerung gewichtet werden :

ichyichxichnich

yich=ein+bxich+ϵich

nichyich=einnich+bnichxich+uich

Dies sind gewichtete kleinste Quadrate , und die Gewichte, die Sie anwenden, sind das Quadrat der Bevölkerung der Stadt. Das ist viel Gewicht, das Sie den größten Städten geben?!

Wenn Sie eine Beobachtung für jede Person in einer Stadt hatten und jeder Person den Durchschnittswert für die Stadt zugewiesen haben, entspricht dies einer Regression, bei der Sie jede Stadt nach Bevölkerung (nicht nach Quadrat der Bevölkerung) gewichten.

Matthew Gunn
quelle
1

Ich habe einige Experimente mit simulierten Daten durchgeführt, um herauszufinden, welche Methode am besten funktioniert. Bitte lesen Sie meine Ergebnisse unten.

Schauen wir uns zwei verschiedene Szenarien an: Erstens, wo es keine direkte Beziehung zwischen DUI & Liquor Stores gibt, und zweitens, wo wir eine direkte Beziehung haben. Untersuchen Sie dann jede der Methoden, um festzustellen, welche Methode am besten funktioniert.

Fall 1: Keine direkte Beziehung, aber beide hängen mit der Bevölkerung zusammen

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)

Nachdem die Daten simuliert wurden, können Sie sehen, wie sich die einzelnen Methoden entwickeln.

## 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 ist erwartungsgemäß von hoher Bedeutung. Obwohl die Beziehung indirekt ist.

## 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 hat keine Bedeutung. Scheint zu funktionieren, aber lassen Sie uns noch nicht zu Schlussfolgerungen springen.

## 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 nicht signifikant, p-Wert liegt auch ziemlich nahe an Methode 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) von hoher Bedeutung! Ich habe das nicht erwartet, vielleicht ist diese Methode nicht die beste für Ihre Problemstellung.

Fall 2: Direkte Beziehung zu Population & 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)

Sehen wir uns die Leistung der einzelnen Methoden in diesem Szenario an.

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

Erwartet, aber keine großartige Methode, um kausale Schlussfolgerungen zu ziehen.

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

Das ist eine Überraschung für mich. Ich hatte erwartet, dass diese Methode die Beziehung erfasst, aber sie nimmt sie nicht auf. Diese Methode schlägt in diesem Szenario also fehl!

## 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 ist signifikant, der p-Wert ist sehr sinnvoll. Ein klarer Gewinner für mich.

## 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; Methode 2 erzeugt die genauesten p-Werte in verschiedenen Szenarien.

ab90hi
quelle