2013-08-05 68 views
0

我正在使用glm,但由於某些原因無法理解p值是如何計算的。 Pr(> | z |)在這裏的含義是什麼?如何在glm中計算pvalue

我在某處讀到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值不correspong到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

看printCoefmat'的'源。 –

+0

Pr(> | z |)在這裏意味着Pr(計算的z(或z值)>表格z的絕對值) – Metrics

+0

對於負z值,p值可以,但對於正值,我得到2它甚至不會更接近2e-16 – learner

回答

1

它的計算公式爲2 * (1-pnorm(abs(-3.918))),這是兩次更詳細的結果(二雙面測試)所描繪的面積在正態分佈下。 (實際上,它是在summary.glm2 * pnorm(-abs(-3.918)),這在理論上是相同的,但數值更精確。)

enter image description here

統計如果!family %in% c("poisson","binomial") | !is.null(dispersion)不同。

+0

該族是二項式的,對於截距和var3,「2 * pnorm(z)」計算是確切的。問題出在'var1'和'var2'計算。 – learner

+0

@learner - 完整的z值不會打印,所以如果您只是使用打印的z值來獲得p值,它將會與報告的值略有不同。你基本上是真的挑剔,如果你打電話給1.650303e-136不同於1.650297e-136 – Dason

+0

@Dason謝謝,實際上我擔心'var1'和'var2'的p值。我只是想說,使用'2 * pnorm(c(-3.918387,-24.868037))'匹配glm結果而'2 * pnorm(c(24.3582,17.688))'給我一個值2方式接近我從glm – learner

0

首先,正如@羅蘭指出的那樣,並非2 * pnorm(z)。這是2 * (1 - pnorm(abs(z))。這給出了正常分佈的上下尾部距離原點的距離爲z以上的區域。這是雙尾P值的教科書定義。這兩個表達式恰好等於z爲負值,但對於z爲正值(正如您發現的那樣)並非如此。其次,你的Z-var1和var2的統計量足夠大,需要特殊處理。默認情況下,pnorm根據下面的尾部計算面積;即概率爲Pr(Z < z)。如果z足夠大,則這個概率從數字上與1不可區分;因此,採取1 - 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 
+0

或'summary.glm'中實現的'2 * pnorm(-24.3582)'。但是,如果您需要從0中區分4.7e-131,我首先會問爲什麼需要這樣做。 – Roland