在存在多重共线性的情况下确定线性回归系数的统计显着性


9

假设我有一堆人口规模不同的城市,我想看看城市中酒类商店的数量与DUI的数量之间是否存在正线性关系。我根据估计的回归系数的t检验确定这种关系是否重要。

现在显然是流行音乐。城市的规模将与DUI的数量以及酒类商店的数量呈正相关。因此,如果我仅对酒类商店进行简单的线性回归,并查看其回归系数是否在统计上有意义,那么我可能会遇到多重共线性问题,并高估了酒类商店对DUI的影响。

我应该使用两种方法中的哪一种来纠正此问题?

  1. 我应该将城市中的酒类商店数量除以其人口数,以获得人均酒类商店价值,然后以此为基础进行回归。

  2. 我应该对白酒储存量和大小进行回归,然后查看在控制大小时白酒储存系数是否显着。

  3. 还有其他方法吗?

老实说,我无法确定哪个看起来更明智。我在他们之间摇摆不定,这取决于我想到的那一个,我是否能够使自己确信这是正确的方法。

一方面,人均酒类商店似乎是使用的正确变量,因为DUI是由个人实施的,但是从统计角度来看,这似乎并不十分严格。另一方面,控制大小似乎在统计上是严格的,但是是间接的。此外,如果在计算了人均酒量变量后重新定标,则两种方法之间的回归系数非常相似,但是方法1会产生较小的p值。


3
要回答的问题是您是否要对费率建模。读一下可能会有所帮助:在Poisson模型中,将时间用作协变量或偏移量有什么区别?
gung-恢复莫妮卡

2
一个重要且框架合理的问题。
rolando2

2
值得从@gung的链接答案中强调这一点:“是否应该对计数或费率进行建模实际上取决于您的实质性问题。您应该对与您想知道的问题相对应的模型进行建模。” (即目标不是最小化ap值,而是评估兴趣的影响)
GeoMatt22 '17

Answers:


5

我将“人均DUI”(X)和“人口规模”(Z)归为“人均DUI”(Y)。这样,您的Y反映了城市人群酒后驾车的倾向,而X则是特定城市的人口特征。Z是一个控制变量,以防万一会对Y产生大小影响。我认为您不会在此设置中看到多重共线性问题。

此设置比模型1更有趣。在这里,您的基础是假设DUI的数量与人口成正比,而将捕获非线性,例如,大城市中的人更容易酒后驾车。X也直接反映了文化和法律环境,已经调整了大小。对于Sough中不同大小的城市,您可能最终得到大致相同的X。这还允许您引入其他控制变量,例如红色/蓝色状态,沿海/大陆等。βZ


3

如果用普通的最小二乘估计模型,那么第二次回归就很成问题。

您可能要考虑一下误差项的方差如何随城市规模而变化。

回归(2)等同于您的回归(1),其中观测值由城市人口的平方加权:

对于每个城市,让为人均酒后驾驶事件,让为人均酒类商店,并且让为城市人口。ÿ X Ñ 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_Store的重要性很高,与预期的一样。虽然关系是间接的。

## 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很重要,p值很有意义。对我来说显然是赢家。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.