2

glm()在 R 中使用该函数,但由于某种原因,我不明白 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()给我一个更详细的结果。

> 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
4

2 回答 2

1

它计算为2 * (1-pnorm(abs(-3.918))),它是正态分布下描绘区域的两倍(双边检验)。(实际上是2 * pnorm(-abs(-3.918))在 中summary.glm,理论上是一样的,但数值上更精确。)

在此处输入图像描述

如果 ,则统计数据不同!family %in% c("poisson","binomial") | !is.null(dispersion)

于 2013-08-05T15:35:48.853 回答
0

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

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

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

> 2*(1 - pnorm(24.3582))
[1] 0
于 2013-08-06T05:43:01.817 回答