0

Rでの置換を使用してサンプリングをモデル化したいと思います(壷モデルのように)。つまり、3 つの異なるイベント (たとえば、1、2、3 (実際にはカテゴリカルですが、現時点では重要ではないと思います)) があり、各イベントの確率を知っています。

1 --> 0.5    
2 --> 0.2   
3 --> 0.3

ここで、たとえば 50 個のサンプルを置換して取り、3 つの異なるイベントの可能な組み合わせごとの確率を知りたいと思います。

私の考えは、rmultinomこれらのサンプルを生成するために使用することでした。

rmultinom(n=50,size=3,prob=c(0.5,0.2,0.3))

50 個のランダムに (?) 選択されたサンプルが得られますが、50 個のサンプルを置換して取得するには、可能なすべての組み合わせが必要です。

4

1 に答える 1

0

私の理解が正しければ、あなたが求めている確率は分析的に計算できます。

私の感覚では、同じ数の 1、2、および 3 を持つすべてのドローを同等のものとして扱いたいと考えています (そうでない場合は以下を参照)。つまり、49 回連続の 1 の後に 2 が続く場合、2 の後に 49 回連続の 1 が続く場合と同じ 50 ドローの「結果」としてカウントされます。

その場合、探しているのは、(p1 = 0.5、p2 = 0.2、p3 = 0.3) およびカウント c1、c2、および c3 で評価された多項確率質量関数の値です。 3 秒 (これらの合計は 50 になります)。R の多項 PMF は次のように評価できます。

counts = c(c1, c2, c3)
myProbs = c(0.5, 0.2, 0.3)
dmultinom(x = counts, prob = myProbs)

あとは、50 回の抽選で発生する可能性のある 1、2、3 の組み合わせをすべて列挙するだけです。関数をnsimplex(3,50)(combinatパッケージから) 呼び出すと、これらが 1326 個あることがxsimplex(3,50)わかり、関数 (同じパッケージにある) を呼び出すと、それらが行列形式で生成されます。以下は、1326 列の最初の 5 列です。

      [,1] [,2] [,3] [,4] [,5]
 [1,]   50   49   49   48   48
 [2,]    0    1    0    2    1
 [3,]    0    0    1    0    1

次に、列ごとに使用して、各列の dmultinom を評価する必要がありますapply

mySimplex = xsimplex(3, 50)
myProbs = c(0.5, 0.2, 0.3)
results = apply(mySimplex, 2, dmultinom, prob = myProbs)

ベクトルの n 番目のエントリはresults、行列の n 列目のカウントの確率になりますmySimplex

これはあなたが求めていたものでしたか?

個別の順列: 個別の順列を別の方法でカウントしたい場合、個々の順列の確率は次のようになります。

 0.5^(c_1) * 0.2^(c_2) * 0.3^(c_3)

ここで、 は引き分けc_1の 1c_2の数、2 の数、および3 の数です。c_3しかし、それらすべてを列挙しようとしている場合は、もう一度考えてみてください。各文字が 1、2、または 3 である一意の長さ 50 のシーケンスの数は、3^50 > 10^23 です。

于 2015-07-24T17:12:40.863 に答える