如何以glm计算p值

时间:2013-08-05 15:16:52

标签: r glm

我正在使用glm但由于某些原因无法理解如何计算p值。 Pr(> | z |)在这里是什么意思?

我在某处读到p-values被计算为2*pnorm(z)。考虑到这个公式,我的计算不会导致glm产生什么。

Call:  glm(formula = fmla, family = binomial(), data = tmpData, na.action = na.exclude)


Coefficients:
                 Estimate Std. Error z value Pr(>|z|)    
(Intercept)     -1.122521   0.286475  -3.918 8.91e-05 ***
var1             0.031535   0.001295  24.358  < 2e-16 ***
var2             0.247231   0.013977  17.688  < 2e-16 ***
var3            -0.952158   0.038288 -24.868  < 2e-16 ***


> 2*pnorm(c(-3.918, 24.35,17.68, -24.86))
[1]  8.928671e-05  2.000000e+00  2.000000e+00 2.015988e-136

为什么p值与glm输出无关

编辑:摘要为我提供了更详细的结果

> summary(modelTmp)$coeff
                   Estimate  Std. Error    z value      Pr(>|z|)
(Intercept)     -1.12252141 0.286475349  -3.918387  8.914334e-05
var1              0.03153534 0.001294648  24.358236 4.742122e-131
var2             0.24723122 0.013977256  17.688109  5.178450e-70
var3            -0.95215794 0.038288424 -24.868037 1.650303e-136



> 2*pnorm(c(-3.918387,-24.868037))
[1]  8.914350e-05 1.650297e-136
> 2*pnorm(c(24.3582,17.688))
[1] 2 2

2 个答案:

答案 0 :(得分:1)

计算为2 * (1-pnorm(abs(-3.918))),这是正态分布下描绘区域的两倍(双侧测试)。 (实际上,2 * pnorm(-abs(-3.918))中的summary.glm,理论上相同,但在数值上更精确。)

enter image description here

如果!family %in% c("poisson","binomial") | !is.null(dispersion),则统计信息会有所不同。

答案 1 :(得分:0)

首先,正如@Roland指出的那样,它不是2 * pnorm(z)。它是2 * (1 - pnorm(abs(z))。这给出了正态分布的上下尾部下方的区域,该区域距离原点z或更远。这是双尾P值的教科书定义。这两个表达式恰好相等,z为负,但z为正(正如您所发现的那样)。

其次,var1和var2的Z统计量足够大,需要特殊处理。默认情况下,pnorm计算 lower 尾部下的区域;也就是概率Pr(Z < z)。如果z足够大,则该概率在数值上与1无法区分;因此,取1 - Pr(Z < z)将返回0.对于这种情况,请将lower.tail参数设置为FALSE;这使得pnorm返回 upper 尾部下的区域,即Pr(Z > z)

> 2*pnorm(24.3582, lower.tail=FALSE)
[1] 4.746252e-131

> 2*(1 - pnorm(24.3582))
[1] 0