R 如何在glm中计算pvalue

R 如何在glm中计算pvalue,r,glm,R,Glm,我在R中使用了glm()函数,但由于某些原因,我不明白p值是如何计算的。这里的Pr(>|z |)是什么意思 我在某处读到,p值计算为2*pnorm(z)。考虑到这个公式,我的计算不会产生glm()函数产生的结果 Call: glm(formula = fmla, family = binomial(), data = tmpData, na.action = na.exclude) Coefficients: Estimate Std. Error z v

我在R中使用了
glm()
函数,但由于某些原因,我不明白p值是如何计算的。这里的
Pr(>|z |)
是什么意思

我在某处读到,
p值
计算为
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

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


如果
,则统计数据会有所不同!%c中的族%(“泊松”、“二项”)|!首先,正如@Roland指出的,它不是
2*pnorm(z)
。它是
2*(1-pnorm(abs(z))
。这给出了正态分布上下尾端下的面积,即距原点的距离为
z
或更大。这是双尾端P值的教科书定义。对于
z
负值,这两个表达式正好相等,但对于
z
正值,情况并非如此(如您所发现的)

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


看看
printCoefmat
.Pr(>| z |)的源代码,这里的意思是Pr(计算的z(或z值)>表中z的绝对值),对于负z值,p值是可以的,但是对于正值,我得到的是2,它绝对不接近2e-16族,对于intercept和var3,
2*pnorm(z)
计算是精确的。问题在于
var1
var2
计算。@learner-完整的z值没有打印出来,因此如果您只是使用打印的z值来获得p值,它将与报告的值略有不同。如果您拨打的是1.650303e-136,则基本上是非常挑剔的1.650297e-136@Dason谢谢,实际上我关心
var1
var2
的p值。我只想说使用
2*pnorm(c(-3.918387,-24.868037))
匹配glm结果,而
2*pnorm(c(24.3582,17.688))
给我一个2的值,这个值现在非常接近我从中得到的值glm@learner哦,罗兰已经解释过了。p值计算实际上是概率计算,所以你应该意识到这些p值有问题,因为它们不在0和1之间。@罗兰,你能解释一下你在si中的最后一句话吗示例术语。“统计数据不同…”或
2*pnorm(-24.3582)
summary.glm
中实现。但是,如果您需要区分4.7e-131和0,我首先会问您为什么需要它。
> 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*pnorm(24.3582, lower.tail=FALSE)
[1] 4.746252e-131

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