Main Content

多項確率分布関数

この例では、確率分布関数を使用した乱数の生成、多項分布の pdf の計算およびプロットの方法を示します。

手順 1. 分布パラメーターを定義する。

各結果の確率を含むベクトル p を作成します。結果 1 の確率は 1/2、結果 2 の確率は 1/3、結果 3 の確率は 1/6 です。各実験の試行回数 n は 5、実験の反復数 reps は 8 です。

p = [1/2 1/3 1/6];
n = 5;
reps = 8;

手順 2. 1 つの乱数を生成する。

1 回の試行の結果である多項分布から 1 つの乱数を生成します。

rng('default')  % For reproducibility
r = mnrnd(1,p,1)
r = 1×3

     0     1     0

返されるベクトル r には 3 つの要素が含まれ、起こりうる各結果のカウントが示されます。この 1 回の試行の結果が結果 2 です。

手順 3. 乱数の行列を生成する。

多項分布から乱数の行列を生成することもできます。この行列は、それぞれ複数の試行を含む複数の実験の結果を報告します。試行回数 n = 5、反復数 reps = 8 の実験の結果を含む行列を生成します。

r = mnrnd(n,p,reps)
r = 8×3

     1     1     3
     3     2     0
     1     1     3
     0     4     1
     5     0     0
     1     2     2
     3     1     1
     3     1     1

生成された行列の各行には、k 個の多項分布のビンそれぞれのカウントが含まれます。たとえば、最初の実験 (最初の行に対応する) では、5 回の試行のうちの 1 回が結果 1、5 回の試行のうちの 1 回が結果 2、5 回の試行のうちの 3 回が結果 3 となります。

手順 4. pdf を計算する。

多項関数はビン数を使用するため、可能性のある結果をすべて組み合わせた多次元配列を作成し、mnpdf を使用して pdf を計算します。

count1 = 1:n;
count2 = 1:n;
[x1,x2] = meshgrid(count1,count2);
x3 = n-(x1+x2);
y = mnpdf([x1(:),x2(:),x3(:)],repmat(p,(n)^2,1));

手順 5. 確率密度関数をプロットする。

3 次元の棒グラフを作成し、結果の頻度の組み合わせごとに確率密度関数を可視化します。

y = reshape(y,n,n);
bar3(y)
set(gca,'XTickLabel',1:n);
set(gca,'YTickLabel',1:n);
xlabel('x_1 Frequency')
ylabel('x_2 Frequency')
zlabel('Probability Mass')

Figure contains an axes object. The axes object with xlabel x_1 Frequency x_1 Frequency, ylabel x_2 Frequency x_2 Frequency contains 5 objects of type surface.

プロットは、起こり得る結果の組み合わせごとの確率質量を示しています。x3 は制約 x1+x2+x3=n により決定されるため、表示されません。

関連するトピック