是否有测试来确定GLM过度分散是否显着?


44

我正在R中创建Poisson GLM。要检查是否存在过度分散,我正在研究剩余偏差与所提供的自由度的比率summary(model.name)

是否有一个临界值或检验此比率被认为是“重要的”?我知道如果> 1,那么数据就会分散,但是如果我的比率相对接近1(例如,一个比率为1.7(残差= 25.48,df = 15),另一个比率为1.3(rd = 324,df) = 253)],我还是应该切换到拟泊松/负二项式?我在这里发现此测试的意义:1-pchisq(residual deviance,df),但是我只看过一次,这让我感到紧张。我还读到(找不到源),比率<1.5通常是安全的。意见?

Answers:


45

在R包AER中,您会找到函数dispersiontest,该函数实现了Cameron&Trivedi(1990)的过度分散测试

它遵循一个简单的想法:在泊松模型中,均值为,方差也为。他们是平等的。该测试简单地将该假设作为零假设进行了检验,以替代,其中常数表示分散不足,而表示分散过度。函数是某些monoton函数(通常是线性或二次;前者是默认值)。将得到的试验相当于检验与和试验中所用的统计是统计量,在null下渐近为标准正态。V - [R Ý = μ V - [R Ý = μ + Ç * ˚F μ ç < 0 ç > 0 ˚F H ^ 0C ^ = 0 ħ 1Ç 0 E(Y)=μVar(Y)=μVar(Y)=μ+cf(μ)c<0c>0f(.)H0:c=0H1:c0t

例:

R> library(AER)
R> data(RecreationDemand)
R> rd <- glm(trips ~ ., data = RecreationDemand, family = poisson)
R> dispersiontest(rd,trafo=1)

Overdispersion test

data:  rd
z = 2.4116, p-value = 0.007941
alternative hypothesis: true dispersion is greater than 0
sample estimates:
dispersion 
    5.5658 

在这里,我们清楚地看到,存在过度分散的证据(c估计为5.57),这与等分散度的假设(即c = 0)非常有力。

请注意,如果您不使用trafo=1,它将实际执行的测试 vs.,,其结果当然与其他测试相同除了检验统计量移动了一个。但是,这样做的原因是后者对应于准Poisson模型中的常见参数化。 ħ 1c ^ *1 C ^ * = c ^ + 1H0:c=1H1:c1c=c+1


1
我不得不使用glm(trips ~ 1, data = data, family = poisson)(即1.使用我的数据),但是太好了,谢谢
Phil

12

另一种方法是在odTestpscl其中一个负二项回归的对数似然比进行比较,以泊松回归的限制文库。得到以下结果:μ=Var

>library(pscl)

>odTest(NegBinModel) 

Likelihood ratio test of H0: Poisson, as restricted NB model:
n.b., the distribution of the test-statistic under H0 is non-standard
e.g., see help(odTest) for details/references

Critical value of test statistic at the alpha= 0.05 level: 2.7055 
Chi-Square Test Statistic =  52863.4998 p-value = < 2.2e-16

这里拒绝了Poisson约束的零,从而有利于我的负二项式回归NegBinModel。为什么?因为测试统计量52863.4998超出2.7055p-value of < 2.2e-16

的优势在于,与AER dispersiontest没有类的“ odTest” 相比,“ htest”类的返回对象更易于格式化(例如,转换为LaTeX)。


5

另一种选择是使用包中的P__disp函数msme。使用或拟合模型后,该P__disp函数可用于计算Pearson和Pearson离散统计量。χ2glmglm.nb


2

还有一种选择是使用似然比检验来证明具有超分散性的拟泊松GLM明显优于不具有超分散性的常规泊松GLM:

fit = glm(count ~ treatment,family="poisson",data=data) 
fit.overdisp = glm(count ~ treatment,family="quasipoisson",data=data) 
summary(fit.overdisp)$dispersion # dispersion coefficient
pchisq(summary(fit.overdisp)$dispersion * fit$df.residual, fit$df.residual, lower = F) # significance for overdispersion
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.