我正在使用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
答案 0 :(得分:1)
计算为2 * (1-pnorm(abs(-3.918)))
,这是正态分布下描绘区域的两倍(双侧测试)。 (实际上,2 * pnorm(-abs(-3.918))
中的summary.glm
,理论上相同,但在数值上更精确。)
如果!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