用于计数回归的诊断图


88

在结果是计数变量的情况下,您发现哪些诊断图(也许是形式测试)对回归分析最有帮助?

我对泊松模型和负二项式模型以及每种模型的零膨胀和跨栏模型特别感兴趣。我发现的大多数资源都只是将残差与拟合值作图,而没有讨论这些图“应该”是什么样。

智慧和参考非常感谢。关于我为什么要问这个问题(如果相关)的背景故事是我的另一个问题

相关讨论:

Answers:


101

这是我通常喜欢做的事情(为说明起见,我使用了过于分散且建模起来不太容易的学生缺勤时间的quine数据MASS):

  1. 通过绘制观察到的频率和拟合的频率(请参阅Friendly中的第2章)来测试和绘制原始计数数据频率由vcd包装R大面积地支持。例如,使用goodfit和一个rootogram

    library(MASS)
    library(vcd)
    data(quine) 
    fit <- goodfit(quine$Days) 
    summary(fit) 
    rootogram(fit)
    

    或使用有助于确定哪个计数数据模型基础的Ord图(例如,此处的斜率为正,截距为正,表示负二项式分布):

    Ord_plot(quine$Days)

    或使用“ XXXXXXness”图,其中XXXXX是选择的分布,说Poissoness图(这与Poisson相对,也可以尝试type="nbinom"):

    distplot(quine$Days, type="poisson")
  2. 检查通常的拟合优度度量(例如,似然比统计与零模型或类似模型):

    mod1 <- glm(Days~Age+Sex, data=quine, family="poisson")
    summary(mod1)
    anova(mod1, test="Chisq")
    
  3. 通过查看或查看正式的测试统计数据来检查过度/分散不足residual deviance/df(例如,参见此答案)。在这里,我们显然过于分散:

    library(AER)
    deviance(mod1)/mod1$df.residual
    dispersiontest(mod1)
    
  4. 检查有影响力和杠杆点,例如,用influencePlotcar包。当然,由于泊松是一个不好的模型,因此在这里很多观点都具有很大的影响力:

    library(car)
    influencePlot(mod1)
    
  5. 通过拟合计数数据模型及其零充气 /跨栏对应物来检查零充气,并将它们进行比较(通常与AIC比较)。在这里,零膨胀模型比简单的泊松模型更适合(同样可能是由于过度分散):

    library(pscl)
    mod2 <- zeroinfl(Days~Age+Sex, data=quine, dist="poisson")
    AIC(mod1, mod2)
    
  6. 在y轴上绘制残差(原始,偏差或缩放比例),在x轴上绘制(对数)预测值(或线性预测值)。在这里,我们看到一些非常大的残差,并且与正常值相比存在较大的偏差(针对泊松而言;编辑:@FlorianHartig的回答表明,这些残差的正常性是不可预期的,因此这不是一个结论性线索):

    res <- residuals(mod1, type="deviance")
    plot(log(predict(mod1)), res)
    abline(h=0, lty=2)
    qqnorm(res)
    qqline(res)
    
  7. 如果有兴趣,可通过绘制有序绝对残差与期望正常值的关系来绘制残差的一半法线概率图(Atkinson(1981))。一个特殊的功能是使用模拟的/自举的置信区间来模拟参考“行”和包络(尽管未显示):

    library(faraway)
    halfnorm(residuals(mod1))
    
  8. 用于计数数据的对数线性模型的诊断图(请参阅Friendly的书中的第7.2和7.7章)。绘制预测值与观测值之间的关系可能需要一些时间间隔的估计(我只是针对年龄组进行过分析-在这里我们再次看到,由于F3组中的过度分散,我们与估计值相差很远。点预测一个标准误差):±

    plot(Days~Age, data=quine) 
    prs  <- predict(mod1, type="response", se.fit=TRUE)
    pris <- data.frame("pest"=prs[[1]], "lwr"=prs[[1]]-prs[[2]], "upr"=prs[[1]]+prs[[2]])
    points(pris$pest ~ quine$Age, col="red")
    points(pris$lwr  ~ quine$Age, col="pink", pch=19)
    points(pris$upr  ~ quine$Age, col="pink", pch=19)
    

这将为您提供有关分析的许多有用信息,并且大多数步骤适用于所有标准计数数据分布(例如,泊松,负二项式,COM泊松,幂律)。


6
很棒的彻底答案!在泊松仿真数据中进行这些诊断也很有帮助,以使我了解这些图的外观。
半通过

我应该对情节做些更多的解释还是这样好吗?
Momo

2
有趣的旁注:我发现基于GOF测试,根图,Ord图和NB-ness图,NB分布似乎很少适合模拟的NB数据。异常似乎是非常对称的NB数据,几乎是对称的-高mu,高theta。
半通过,时间

1
嗯,您确定要使用type =“ nbinomial”作为参数吗?例如fm <-glm.nb(天〜。,数据=奎因); 虚拟<-rnegbin(fitted(fm),theta = 4.5)工作正常。
Momo

@Momo,谢谢-我正在做类似x = rnegbin(n = 1000,mu = 10,theta = 1)的事情; fit = goodfit(x,type =“ nbinomial”); 摘要(适合)。设置theta = 4.5确实可以提高拟合度,但仍然经常p <0.05,并且根图看起来很糟糕。只是我了解了模拟之间的区别:在您的模拟中,每个哑元的值都是从不同的均值参数(fit(fm)中的值)模拟出来的,对吗?在矿山,他们都有平均10
半通

14

对于使用标准诊断图但想知道其外观的方法,我喜欢这篇论文:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

这里提到的方法之一是创建几个模拟数据集,其中感兴趣的假设是正确的,并为这些模拟数据集创建诊断图,还为真实数据创建诊断图。将所有这些图同时显示在屏幕上(根据实际数据随机放置)。现在,您可以直观地看到这些图的外观,并且如果假设适用于真实数据,那么该图应与其他图一样(如果您无法分辨出哪些是真实数据,那么正在测试的假设可能很接近足够真实),但是如果实际数据图看上去与其他图明显不同,则意味着至少一个假设不成立。vis.testR的TeachingDemos软件包中的功能有助于将其作为测试来实施。


6
有上述数据的示例作为记录:mod1 <-glm(Days〜Age + Sex,data = quine,family =“ poisson”); if(interactive()){vis.test(residuals(mod1,type =“ response”),vt.qqnorm,nrow = 5,ncol = 5,npage = 3)}
半过

13

这是一个古老的问题,但是我认为添加DHARMa R软件包(可从CRAN获得,请参见此处)会为基于GLM和GLMM的标准化残差提供一个有用的方法,其模拟方法类似于@GregSnow建议的方法。 。

从包装说明中:

DHARMa软件包使用基于仿真的方法从拟合的广义线性混合模型中创建易于解释的缩放残差。当前支持'lme4'('lmerMod','glmerMod'),'glm'(包括'MASS'中的'negbin',但不包括准分布)和'lm'模型类的所有'merMod'类。替代地,也可以处理外部创建的模拟,例如来自贝叶斯软件的后验预测模拟,例如“ JAGS”,“ STAN”或“ BUGS”。所得残差标准化为0到1之间的值,并且可以直观地解释为线性回归的残差。该软件包还提供了一些针对典型模型规格问题的绘图和测试功能,

@Momo-您可能要更新建议6,这会产生误导。如DHARMa插图这里所解释,一般在Poisson下不能预期偏差残差的正态性 ; 并且,从在qqnorm情节的直线不同seing偏差残差(或任何其它标准的残差),因此是在一般不关心在所有。DHARMa软件包提供了一个qq图,可用于诊断与Poisson或其他GLM系列的偏差。我创建了一个示例,在这里演示了偏差残差的问题。


4

glm.diag.plots在package中有一个函数boot,可以为GLM生成诊断图。它能做什么:

制作关于线性预测变量的折刀偏差残差图,标准偏差残差的正常分数图,相对于杠杆/(1-杠杆)的近似库克统计图以及库克统计的案例图。

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.