2016-10-20 13 views
3

カイ2乗分布の累積分布関数を計算するためにRのpchisq関数を使用しています。 1-pchisq(...)が2.2e-16(Rの数値形式の数値精度限界)より小さい値を持つような非常に小さな値を計算したいと思います。R-数値精度のカイ二乗分布のための極小数の計算

増加精度のためRmpfrパッケージを使用した22桁の表示オプション(最大)

  • を設定

    • :今のところ、これらの非常に小さな値は単に私が試した0

      事になりますその番号形式はpchisq関数では機能しません

    • CDF関数をコンポーネントのガンマ関数に分割しても、同様の精度制限が発生します。どのように私は私が欲しいものを計算することができますか?

    背景:Fisher's methodを使用して、複数のp値を結合しています。はい、私はこれらのp値が非常に小さいことを知っていますが、それは実際に私が分析しているものにとって有益です。

  • +0

    これはおそらく統計情報について質問するのに間違った場所です。 – Mox

    +0

    ログ(1-pchisq)を計算できますか? –

    答えて

    2

    いくつかのことがあります。

    • 2.2E-16 Rの値のない低い精度の限界です。それはformat.pvalを使用して、デフォルトでRは版画非常に小さいp値をそのだけの方法です:
    format.pval(1e-20) 
    ## [1] "< 2.22e-16" 
    
    約1E-320 がゼロにダウンラウンドを行うよりも小さい
    • 値:
    1e-330 
    ## [1] 0 
    

    @ SeverinPappadeuxの提案は正確です。

    pchisq(121231,1,lower.tail=FALSE,log.p=TRUE) 
    ## [1] -60621.58 
    

    これは10 ^と同等です( - 26327):あまり極端な値の

    -60621.58/log(10) 
    ## -26327.62 
    

    チェック:さらに

    log10(pchisq(100,1,lower.tail=FALSE)) 
    ## [1] -22.81702 
    pchisq(100,1,lower.tail=FALSE,log.p=TRUE)/log(10) 
    ## [1] -22.81702 
    

    log(p)はあなたが使用する必要が正確に何でありますフィッシャーの方法。