2

値が分布の平均/中央値からかけ離れているかどうかを確認するために、z スコアを計算しています。私はもともと平均を使用してそれを行っていましたが、これらを両側のpvalueに変換しました。しかし、今中央値を使用して、pvalues にいくつかの Na があることに気付きました。

これは、中央値から非常に離れた値で発生していると判断しました。そして、pnorm 計算に関連しているように見えます。"「qnorm」は、約 16 桁までの正確な結果を提供する Wichura のアルゴリズム AS 241 に基づいています。"

非常に小さなpvaluesが欲しいので、これを回避する方法を知っている人はいますか? ありがとう、

> z<- -12.5
> 2-2*pnorm(abs(z))
[1] 0
> z<- -10  
> 2-2*pnorm(abs(z))
[1] 0 
> z<- -8 
> 2-2*pnorm(abs(z))
[1] 1.332268e-15
4

3 に答える 3

2

途中で、実際には非常に高いp 値を計算しています。

options(digits=22)
z <- c(-12.5,-10,-8)
pnorm(abs(z))
# [1] 1.0000000000000000000000 1.0000000000000000000000 0.9999999999999993338662
2-2*pnorm(abs(z))
# [1] 0.000000000000000000000e+00 0.000000000000000000000e+00 1.332267629550187848508e-15

低い p 値 (ゼロに近い) を使用する方がよいと思いますが、1 に近い p 値のエラーが AS241 アルゴリズムにあるのか、浮動小数点ストレージにあるのかを知るには数学が苦手です。 . 低い値がどれだけうまく表示されているか見てください:

pnorm(z)
# [1] 3.732564298877713761239e-36 7.619853024160526919908e-24 6.220960574271784860433e-16

1 - pnorm(x)に相当することに注意してくださいpnorm(-x)。したがって、2-2*pnorm(abs(x))は と同等2*(1 - pnorm(abs(x))です と同等な2*pnorm(-abs(x))ので、次のようにします。

2 * pnorm(-abs(z))
#  [1] 7.465128597755427522478e-36 1.523970604832105383982e-23 1.244192114854356972087e-15

探しているものをより正確に取得する必要があります。

于 2014-10-20T15:54:37.547 に答える
1

考えてみると、より高い精度で exp() を使用する必要がありますが、log(p) を使用して末尾の精度を少し高めることができる場合があります。そうしないと、非対数 p 値に対して効果的に 0 になります。計算できる範囲に関して:

> z<- -12.5
> pnorm(abs(z),log.p=T)
[1] -7.619853e-24

p 値に戻す変換はうまくいきませんが、log(p) で比較できます...

> exp(pnorm(abs(z),log.p=T))
[1] 1
于 2014-10-20T17:05:38.303 に答える