Określanie istotności statystycznej współczynnika regresji liniowej w obecności wielokoliniowości

9

Załóżmy, że mam kilka miast o różnej wielkości populacji i chciałem sprawdzić, czy istnieje dodatnia liniowa zależność między liczbą sklepów monopolowych w mieście a liczbą DUI. Gdzie określam, czy związek ten jest znaczący, czy nie, na podstawie testu t szacowanego współczynnika regresji.

Teraz wyraźnie pop. wielkość miasta będzie pozytywnie skorelowana zarówno z liczbą DUI, jak i liczbą sklepów monopolowych. Zatem jeśli przeprowadzę prostą regresję liniową tylko dla zapasów alkoholu i zobaczę, czy jej współczynnik regresji jest statystycznie istotny, prawdopodobnie napotkam problem wielokoliniowości i zawyżę wpływ zapasów alkoholu na DUI.

Którą z dwóch metod powinienem zastosować, aby to poprawić?

  1. Powinienem podzielić liczbę sklepów monopolowych w mieście przez ich populację, aby uzyskać sklep monopolowy na jednego mieszkańca, a następnie zrezygnować z tego.

  2. Powinienem zrezygnować zarówno z zapasów, jak i rozmiarów, a następnie sprawdzić, czy współczynnik przechowywania likieru jest znaczący podczas kontrolowania wielkości.

  3. Jakaś inna metoda?

Szczerze mówiąc, nie mogę zdecydować, co wydaje się bardziej sensowne. Waham się między nimi, w zależności od tego, o którym myślę, jestem w stanie przekonać się, że to właściwa droga.

Z jednej strony sklepy monopolowe na mieszkańca wydają się właściwą zmienną, ponieważ DUI są popełniane przez osoby fizyczne, ale nie wydaje się to zbyt rygorystyczne statystycznie. Z drugiej strony kontrola wielkości wydaje się statystycznie rygorystyczna, ale raczej pośrednia. Co więcej, jeśli przeskaluję po obliczeniu zmiennej zapasów ługu na mieszkańca, otrzymam bardzo podobne współczynniki regresji między dwiema metodami, ale metoda 1 daje mniejszą wartość p.

Thot
źródło
3
Pytanie, na które należy odpowiedzieć, to czy chcesz modelować stawki, czy nie. Pomocne może być przeczytanie tego: Jaka jest różnica w modelu Poissona między używaniem czasu jako współzmiennej lub przesunięcia?
Gung - Przywróć Monikę
2
Ważne i dobrze sformułowane pytanie.
rolando2
2
Warto podkreślić to z powiązanej odpowiedzi @ gung: „To, czy powinieneś modelować liczby, czy stawki naprawdę zależy od tego, jakie jest twoje zasadnicze pytanie. Powinieneś modelować to, które odpowiada temu, co chcesz wiedzieć”. (tj. celem nie jest zminimalizowanie wartości ap, ale ocena efektu zainteresowania)
GeoMatt22 22.04.17

Odpowiedzi:

5

Wyrejestrowałbym „DUI na mieszkańca” (Y) w „sklepach z alkoholami na mieszkańca” (X) i „wielkości populacji” (Z). W ten sposób twoje Y odzwierciedla skłonność do jazdy pod wpływem alkoholu mieszkańców miast, podczas gdy X jest populacją charakterystyczną dla danego miasta. Z jest zmienną kontrolną na wszelki wypadek, jeśli występuje wpływ wielkości na Y. Nie sądzę, że w tym ustawieniu pojawi się problem wielokoliniowości.

Ta konfiguracja jest bardziej interesująca niż twój model 1. Tutaj podstawą jest założenie, że liczba DUI jest proporcjonalna do populacji, podczas gdy βZuchwyciłoby nieliniowość, np. ludzie w większych miastach są bardziej podatni na jazdę po pijanemu. Również X bezpośrednio odzwierciedla środowisko kulturowe i prawne, już dostosowane do wielkości. Możesz skończyć z mniej więcej tym samym X dla miast o różnych rozmiarach w Sough. Pozwala to również wprowadzić inne zmienne kontrolne, takie jak stan Czerwony / Niebieski, Wybrzeże / Kontynentalne itp.

Aksakal
źródło
3

Przy szacowaniu modelu za pomocą zwykłych najmniejszych kwadratów druga regresja jest raczej problematyczna.

I możesz pomyśleć o tym, jak wariancja terminu błędu różni się w zależności od wielkości miasta.

Regresja (2) jest równoważna regresji (1), gdzie obserwacje są ważone przez kwadrat populacji miasta:

Dla każdego miasta ja, pozwolić yja bądź pijany w wypadkach drogowych na mieszkańca, niech xja bądźcie sklepami monopolowymi na mieszkańca i pozwólcie nja być populacją miasta.

Regresja (1) to:

yja=za+bxja+ϵja
Jeśli uruchamiasz regresję (2) bez stałej, zasadniczo skalowałeś każdą obserwację regresji (1) według populacji, to znaczy biegasz:

njayja=zanja+bnjaxja+uja

Jest to liczba ważona najmniejszych kwadratów , a zastosowane wagi są kwadratem populacji miasta. Tyle wagi przykładasz do największych miast ?!

Zauważ, że jeśli miałeś obserwację dla każdej osoby w mieście i przypisałeś każdej osobie średnią wartość dla miasta, byłoby to równoznaczne z przeprowadzeniem regresji, w której każde miasto ważone jest według liczby ludności (a nie liczby mieszkańców do kwadratu).

Matthew Gunn
źródło
1

Przeprowadziłem kilka eksperymentów na danych symulowanych, aby sprawdzić, która metoda działa najlepiej. Proszę przeczytać moje ustalenia poniżej.

Przyjrzyjmy się dwóm różnym scenariuszom - po pierwsze, gdy nie ma bezpośredniego związku między sklepami DUI i alkoholowymi, a po drugie, gdy mamy bezpośredni związek. Następnie sprawdź każdą z metod, aby zobaczyć, która metoda działa najlepiej.

Przypadek 1: Brak bezpośredniego związku, ale oba są związane z populacją

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)

Teraz, gdy dane są symulowane, zobaczmy, jak radzi sobie każda z metod.

## 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 bardzo znaczący, zgodnie z oczekiwaniami. Chociaż związek jest pośredni.

## 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 nie ma znaczenia. Niby działa, ale nie wyciągajmy jeszcze wniosków.

## 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 nieistotne, wartość p jest również dość zbliżona do metody 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) bardzo znaczący! Nie spodziewałem się tego, być może ta metoda nie jest najlepsza do opisu problemu.

Przypadek 2: Bezpośredni związek z populacją i 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)

Zobaczmy wydajność każdej z metod w tym scenariuszu.

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

Oczekiwana, ale nie świetna metoda wnioskowania przyczynowego.

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

To dla mnie niespodzianka, spodziewałem się, że ta metoda uchwyci związek, ale go nie odbierze. Więc ta metoda zawodzi w tym scenariuszu!

## 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 jest znaczący, wartość p ma sens. Dla mnie wyraźny zwycięzca.

## 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; Metoda 2 zapewnia najdokładniejsze wartości p dla różnych scenariuszy.

ab90hi
źródło