3

ベータ分布 Beta(a, b) を使用して、0 から 1 までの乱数を生成する必要があります。

パラメータ α = alpha および β = beta とデフォルト ドメイン (0, 1) を持つ BetaDist オブジェクトを構築するコンストラクタ BetaDist(double alpha, double beta) を持つ Class BetaDist を見つけました。

しかし、アルファとベータだけを使用して、BetaDist オブジェクトを使用してランダムに x (0, 1) を描画するメソッドが見つかりません。

私はstackoverflowの別の投稿を読みました:ジャンプのない累積分布関数を持つ任意の分布から乱数を生成する一般的な方法は、累積分布関数に逆関数を使用することです:G(y)= F ^ {-1}(y)。u(1), ..., u(n) が (0,1) 上の一様分布からの乱数である場合、G(u(1)), ..., G(u(n)) は乱数です。 cdf F(x) を使用した分布からのサンプル。

BetaDist クラスには cdf(double x) メソッドがありますが、次に何をすべきかまだ迷っています。私は統計学を学んでおらず、上記の投稿はまだ複雑すぎます。

どうもありがとうございます。

4

1 に答える 1

2

私はあなたと同じ問題に遭遇しました。あなたが言及したスキームは有効ですが、私の場合はテストしたばかりです。

手順は次のとおりです。

  1. ベータ分布を生成します-パラメータalphaとbetaを持つベータ。
  2. 一様分布から乱数を生成します--x;
  3. 逆累積分布関数を呼び出して、ベータ分布の乱数を取得します--b、ここでは「x」が関数入力として使用され、逆累積分布関数は必要な乱数を返すことができます。注意:ベータ分布には、cdfだけでなく、これを行うための逆cdfが必要です。

    import org.apache.commons.math3.distribution.BetaDistribution;
    
    public class test {
        /**
         * @param args
         */
        public static void main(String[] args) {
            double x;
            double b;
            BetaDistribution beta = new BetaDistribution(40.0, 40.0);
            for (int i = 0; i < 100; i++) {
                x = Math.random();
                b = beta.inverseCumulativeProbability(x);
                System.out.println(b);
            }
        }
    }
    
于 2013-01-16T22:00:50.953 に答える