Определение статистической значимости коэффициента линейной регрессии при наличии мультиколлинеарности

9

Предположим, у меня есть несколько городов с разной численностью населения, и я хотел узнать, существует ли положительная линейная зависимость между количеством винных магазинов в городе и количеством DUI. Где я определяю, является ли эта связь значимой или нет, основываясь на t-критерии предполагаемого коэффициента регрессии.

Теперь четко поп. размер города будет положительно коррелировать как с количеством DUI, так и с количеством винных магазинов. Таким образом, если я проведу простую линейную регрессию только для винных магазинов и посмотрю, является ли ее коэффициент регрессии статистически значимым, я, скорее всего, столкнусь с проблемой мультиколлинеарности и переоценим влияние хранилищ спиртных напитков на DUI.

Какой из двух методов я должен использовать, чтобы исправить это?

  1. Я должен разделить количество винных магазинов в городе на население, чтобы получить стоимость винного магазина на душу населения, а затем вернуться к этому.

  2. Я должен регрессировать как на винные магазины, так и на размер, а затем посмотреть, значим ли коэффициент винного магазина при контроле размера.

  3. Какой-то другой метод?

Я, честно говоря, не могу решить, что кажется более разумным. Я колеблюсь между ними, в зависимости от того, о чем думаю, и могу убедить себя, что это правильный путь.

С одной стороны, винные магазины на душу населения кажутся подходящей переменной для использования, поскольку DUI совершаются отдельными лицами, но это не выглядит статистически строгим. С другой стороны, контроль за размером кажется статистически строгим, но скорее косвенным. Кроме того, если я произвожу масштабирование после вычисления винных запасов на душу населения, я получу очень похожие коэффициенты регрессии между двумя методами, но метод 1 дает меньшее значение p.

Вос
источник
3
Вопрос, на который нужно ответить: хотите ли вы моделировать цены или нет. Это могло бы помочь прочитать это: в модели Пуассона, какая разница между использованием времени как ковариата или смещение?
gung - Восстановить Монику
2
Важный и правильно сформулированный вопрос.
rolando2
2
Стоит подчеркнуть это из связанного ответа @ gung: «Нужно ли вам моделировать подсчет или ставку, зависит от того, какой у вас вопрос по существу. Вам следует смоделировать тот, который соответствует тому, что вы хотите знать». (т.е. цель состоит не в том, чтобы минимизировать значение ap, а в том, чтобы оценить эффект интереса)
GeoMatt22

Ответы:

5

Я бы регрессировал "DUI на душу населения" (Y) на "винные магазины на душу населения" (X) и "численность населения" (Z). Таким образом, ваш Y отражает склонность к вождению в нетрезвом виде городских жителей, в то время как X является характеристикой населения данного города. Z - управляющая переменная на тот случай, если на Y есть эффект размера. Я не думаю, что вы увидите проблему мультиколлинеарности в этой настройке.

Эта настройка более интересна, чем ваша модель 1. Здесь вы должны предположить, что количество DUI пропорционально населению, тогда как будет нелинейность, например, люди в крупных городах более склонны к вождению в нетрезвом виде. Также X напрямую отражает культурную и правовую среду, уже адаптированную к размеру. Вы можете получить примерно одинаковый X для городов разных размеров в Sough. Это также позволяет вводить другие управляющие переменные, такие как состояние Красный / Синий, Прибрежный / Континентальный и т. Д.βZ

Аксакал
источник
3

Если оценивать вашу модель с помощью обычных наименьших квадратов, ваша вторая регрессия довольно проблематична.

И вы, возможно, захотите подумать о том, как разница вашего термина ошибки зависит от размера города.

Регрессия (2) эквивалентна вашей регрессии (1), где наблюдения взвешиваются по квадрату населения города:

Для каждого города пусть будет вождения в нетрезвом виде на душу населения, - винные магазины на душу населения, а - население города.у я х я п яiyixini

Регрессия (1): Если вы запустите регрессию (2) без константы, вы по существу масштабируете каждое наблюдение регрессии (1) по совокупности, то есть вы выполняете:

yi=a+bxi+ϵi

niyi=ani+bnixi+ui

Это взвешенные наименьшие квадраты , а веса, которые вы применяете, являются квадратами населения города. Это большой вес вы даете крупнейшим городам ?!

Обратите внимание, что если у вас есть наблюдение для каждого человека в городе и назначено каждому человеку среднее значение для города, это будет эквивалентно проведению регрессии, при которой вы взвешиваете каждый город по населению (а не по квадрату населения).

Мэтью Ганн
источник
1

Я провел несколько экспериментов на смоделированных данных, чтобы увидеть, какой метод работает лучше всего. Пожалуйста, прочитайте мои выводы ниже.

Давайте рассмотрим два разных сценария: во-первых, где нет прямой связи между DUI и ликерными магазинами, и во-вторых, где у нас есть прямые отношения. Затем изучите каждый из методов, чтобы увидеть, какой метод работает лучше всего.

Случай 1: Нет прямых отношений, но оба связаны с населением

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)

Теперь, когда данные смоделированы, давайте посмотрим, как работает каждый из методов.

## 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 очень значительный, как и ожидалось. Хотя отношения косвенные.

## 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 не имеет значения. Вроде работает, но пока не будем спешить с выводами.

## 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 не имеет значения, значение p также довольно близко к методу 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) очень важно! Не ожидал, что, возможно, этот метод не самый лучший для вашей задачи.

Случай 2: Прямые отношения как с населением, так и с 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)

Давайте посмотрим производительность каждого из методов в этом сценарии.

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

Ожидаемый, но не отличный способ сделать причинные выводы.

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

Для меня это сюрприз, я ожидал, что этот метод захватит отношения, но он их не поднимает. Таким образом, этот метод не работает в этом сценарии!

## 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 является значимым, р-значение имеет большой смысл. Явный победитель для меня.

## 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; Метод 2 дает наиболее точные значения p в разных сценариях.

ab90hi
источник