R中的glm - 哪个p值代表整个模型的拟合优度?

机器算法验证 r 统计学意义 广义线性模型 p 值 描述性统计
2022-03-13 18:32:25

我在 R(广义线性模型)中运行 glms。我以为我知道 pvalues - 直到我看到调用 glm 的摘要不会给你一个代表整个模型的压倒一切的 pvalue 代表 - 至少不是在线性模型的地方。

我想知道这是否在系数表的顶部作为截距的 p 值给出。所以在下面的例子中,虽然 Wind.speed..knots 和 canopy_density 可能对模型很重要,但我们如何知道模型本身是否重要?我怎么知道是否相信这些价值观?我是否想知道(截距)的 Pr(>|z|) 代表模型的重要性?这个模型重要吗???谢谢!

我应该注意运行 F 检验不会给出 pvalue,因为我收到一条错误消息,指出在二项式系列上运行 F 检验是不合适的。

Call:
glm(formula = Empetrum_bin ~ Wind.speed..knots. + canopy_density, 
    family = binomial, data = CAIRNGORM)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.2327  -0.7167  -0.4302  -0.1855   2.3194  

Coefficients:
                   Estimate Std. Error z value Pr(>|z|)  
(Intercept)          1.8226     1.2030   1.515   0.1298  
Wind.speed..knots.  -0.5791     0.2628  -2.203   0.0276 *
canopy_density      -2.5733     1.1346  -2.268   0.0233 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 59.598  on 58  degrees of freedom
Residual deviance: 50.611  on 56  degrees of freedom
  (1 observation deleted due to missingness)
AIC: 56.611
3个回答

您可以对 (59.598-50.611) 与具有 (58-56) df 的卡方进行渐近卡方检验,或者anova()在您的 glm 对象上使用(不直接进行测试,但至少计算( 59.598-50.611) 和 (58-56) 为您服务)。

这是对偏差的有效分析

以下是您可以进行的计算(在 R 附带的不同数据集上):

spray1=glm(count~spray,family=poisson,data=InsectSprays)  # full model
spray0=glm(count~1,family=poisson,data=InsectSprays)      # null model
with(anova(spray0,spray1),pchisq(Deviance,Df,lower.tail=FALSE)[2]) 

它给出了基于偏差的渐近卡方统计量的 p 值。

或者您可以使用devianceanddf.residual函数来执行此操作:

 pchisq(deviance(spray0)-deviance(spray1),
     df.residual(spray0)-df.residual(spray1),
    lower.tail=FALSE)

--

许多人会使用完整模型和空模型 AIC 之间的比较(或者在某些情况下,可能是感兴趣的模型和饱和模型之间的比较)来确定该模型在这个意义上是否比空模型更好。

--

我是否想知道(截距)的 Pr(>|z|) 代表模型的重要性?

它没有。实际上,截距 p 值通常不是直接感兴趣的。

如果您正在考虑具有分散参数的模型,我看到有些人主张进行 F 检验而不是渐近卡方;它对应于在各个系数上使用 t 检验而不是 az 的人。在小样本中,这不太可能是一个合理的近似值。在一般的 GLM 的情况下,我还没有看到一个推导或模拟表明 F 必然是一个合适的近似值(即比渐近结果更好)。一个很可能存在,但我还没有看到它。

假设您的模型在“适合”对象中,您可以使用此代码对您的二项式模型执行对数似然检验正如您所指出的,F 检验不合适,但此检验将测试您的模型是否预测得更好比随机的。

LLR = -2 * (fit$null.deviance - fit$deviance)

这是对数似然比检验的公式。

pchisq(LLR, 2, lower.tail = FALSE)

这将为您提供 p 值。虽然我不是 100% 确信这是正确的 df。我很确定这是参数数量的差异,其中饱和模型中有 2 个,而 Null 模型中没有,ergo df = 3 - 1 = 2。但这可能需要跟进。

正如@SamPassmore 提到的,您可以使用偏差分析(例如,参见 car::Anova() 获得类似的东西)来获得大致相当于F-测试,但有一个χ2分配。与此相关的是似然比检验(您的模型与空模型的比较),但这些检验仅在渐近上表现良好。

或者,您可以查看 AIC 或 BIC 等相关度量。

但请注意:对于这种类型的模型,很难获得像 p 值这样的东西,原因与很难定义有意义的模型相同R2-value,例如参见Doug Bates 的这篇“讲道”