Main Content

三角分布を使用した乱数の生成

この例では、標本データに基づいて三角確率分布オブジェクトを作成し、シミュレーションで使用する乱数の生成方法を示します。

手順 1. 標本データを入力する。

データ ベクトル time を入力します。これには、10 台の異なる車に関して、ハイウェイの料金所で観測された停止時間の長さ (秒単位) が含まれています。

time = [6 14 8 7 16 8 23 6 7 15];

データから、ほとんどの車の停止時間は 6 秒から 16 秒ですが、1 つの外れ値の停止時間が 23 秒であることがわかります。

手順 2. 分布パラメーターを推定する。

標本データから三角分布パラメーターを推定します。

lower = min(time);
peak = median(time);
upper = max(time);

三角分布は、標本データが制限されている場合に、確率分布を単純化した形式で表現します。標本データの最小値と最大値を検出して、分布の上下の境界を推定します。ピークのパラメーターについて、データには外れ値が含まれるため、中央値の推定は、平均値よりも最頻値の方が適切な場合もあります。

手順 3. 確率分布オブジェクトを作成する。

推定したパラメーター値を使用して三角確率分布オブジェクトを作成します。

pd = makedist('Triangular','A',lower,'B',peak,'C',upper)
pd = 
  TriangularDistribution

A = 6, B = 8, C = 23

三角分布の pdf を計算してプロットします。

x = 0:.1:230;
y = pdf(pd,x);
plot(x,y)
title('Time Spent at Tollbooth')
xlabel('Time (seconds)')
xlim([0 30])

Figure contains an axes object. The axes object with title Time Spent at Tollbooth, xlabel Time (seconds) contains an object of type line.

プロットは、この三角分布が右に偏っていることを示しています。ただし、推定したピーク値は標本の中央値であるため、分布はピークの付近で対称になります。この偏りのために、このモデルは最初の標本と比較して異常に高く見える乱数を生成する可能性があります。

手順 4. 乱数を生成する。

この分布から乱数を生成し、料金所を通過する将来の交通量をシミュレーションします。

rng('default');  % For reproducibility
r = random(pd,10,1)
r = 10×1

   16.1265
   18.0987
    8.0796
   18.3001
   13.3176
    7.8211
    9.4360
   12.2508
   19.7082
   20.0078

r の戻り値は、次のシミュレーション対象の 10 台の車が料金所に停車する秒単位の時間です。外れ値によって分布が右側で歪んでいるため、これらの値は元のデータ ベクトル time と比較して高く見えます。上限のパラメーターとして 2 番目に高い値を使用すると、外れ値の影響を軽減し、最初の標本データにより近い一連の乱数を生成できることがあります。

手順 5. 推定したパラメーターを修正する。

標本データの 2 番目に大きい値を使用して分布の上限を推定します。

sort_time = sort(time,'descend');
secondLargest = sort_time(2);

手順 6. 新しい分布オブジェクトを作成して pdf をプロットする。

修正した推定パラメーターを使用して新しい三角確率分布オブジェクトを作成し、pdf をプロットします。

figure
pd2 = makedist('Triangular','A',lower,'B',peak,'C',secondLargest);
y2 = pdf(pd2,x);
plot(x,y2,'LineWidth',2)
title('Time Spent at Tollbooth')
xlabel('Time (seconds)') 
xlim([0 30])

Figure contains an axes object. The axes object with title Time Spent at Tollbooth, xlabel Time (seconds) contains an object of type line.

プロットは、この三角分布がまだ若干右に歪んでいることを示しています。ただし、上限の推定に標本データの最大値を使用した分布よりもピークの付近でかなり対称になっています。

手順 7. 新しい乱数を生成する。

修正した分布から新しい乱数を生成します。

rng('default'); % For reproducibility
r2 = random(pd2,10,1)
r2 = 10×1

   12.1501
   13.2547
    7.5937
   13.3675
   10.5768
    7.3967
    8.4026
    9.9792
   14.1562
   14.3240

これらの新しい値は、元のデータ ベクトル time の値により近付いています。また、上限の推定に外れ値を使用した分布で生成された乱数よりも、標本の中央値に近くなっています。この例では、中央値を計算するときに標本データから外れ値を削除しません。パラメーター推定のその他の方法として、標本データ全体から外れ値を削除する方法や、標本データの平均または最頻値をピーク値として使用する方法もあります。

参考

| |

関連するトピック