R 如何在glm中计算pvalue
我在R中使用了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
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