Main Content

確率分布の操作

確率分布は、本来の母集団に関する仮定に基づく理論上の分布です。確率分布は、確率変数が特定の離散値をもつ事象、あるいは指定の連続値の範囲に収まる事象に対して確率を与えます。

Statistics and Machine Learning Toolbox™ には、確率分布を処理する方法がいくつか用意されています。

  • 確率分布オブジェクト — 確率分布を標本データに当てはめるかパラメーター値を指定することにより、確率分布オブジェクトを作成します。そして、オブジェクト関数を使用して、分布の評価や乱数の生成などを行います。

  • アプリと対話型ユーザー インターフェイス分布フィッター アプリ、確率分布関数ユーザー インターフェイス、および乱数発生ツール (randtool) を使用して、確率分布を対話的に当てはめて調べます。

  • 分布特有の関数と汎用の分布関数 — これらの関数は、乱数の生成、ループ内またはスクリプト内での要約統計量の計算、cdf または pdf を関数ハンドルとして別の関数に渡す操作に便利です。これらの関数は、単一のパラメーター セットだけでなく、パラメーター値の配列についての計算の実行にも使用できます。

    • 分布パラメーターを指定して、normpdfnormcdf などの分布特有の関数を使用します。

    • 分布名とパラメーターを指定して、汎用の分布関数 (cdficdfpdf および random) を使用します。

Statistics and Machine Learning Toolbox でサポートされている分布の一覧については、サポートされている分布を参照してください。

確率分布オブジェクト

確率分布オブジェクトを使用すると、確率分布による標本データへの当てはめと、パラメーター値の指定によって分布を定義できます。その後、分布オブジェクトに対してさまざまな解析を実行できます。

確率分布オブジェクトの作成

fitdist を使用して確率分布オブジェクトで標本データを近似することにより、標本データから確率分布のパラメーターを推定します。指定した単一のパラメトリック分布またはノンパラメトリック分布を標本データに当てはめることができます。また、グループ化変数に基づいて、同じタイプの複数の分布を標本データに当てはめることもできます。fitdist は、標本データから分布パラメーターを推定するために、ほとんどの分布には最尤推定法 (MLE) を使用します。詳細とその他の構文オプションについては、fitdist を参照してください。

また、makedist を使用してパラメーター値を指定することにより確率分布オブジェクトを作成することもできます。

確率分布オブジェクトの処理

確率分布オブジェクトを作成すると、オブジェクト関数を使用して以下を行うことができます。

  • 分布パラメーターに対して信頼区間を計算する (paramci)。

  • 平均値 (mean)、中央値 (median)、四分位数間範囲 (iqr)、分散 (var)、標準偏差 (std) などの要約統計量を計算する。

  • 確率密度関数 (pdf) を評価する。

  • 累積分布関数 (cdf) または逆累積分布関数 (icdf) を評価する。

  • 分布について負の対数尤度 (negloglik) とプロファイル尤度関数 (proflik) を計算する。

  • 分布から乱数を生成する (random)。

  • 下限と上限を指定して分布を打ち切る (truncate)。

  • 確率密度関数、累積分布、確率プロットをプロットする (plot)

確率分布オブジェクトの保存

確率分布オブジェクトを .MAT ファイルに保存するには、次のようにします。

  • ツールバーで [ワークスペースの保存] をクリックします。確率分布オブジェクトも含めて、ワークスペース内にあるすべての変数が保存されます。

  • ワークスペース ブラウザーで確率分布オブジェクトを右クリックして、[名前を付けて保存] を選択します。選択した確率分布オブジェクトのみが保存されます。ワークスペース内にある他の変数は保存されません。

また、コマンド ラインで関数 save を使用して確率分布オブジェクトを直接保存できます。save は、ファイル名を選択し、保存する確率分布オブジェクトを指定できます。オブジェクト (または他の変数) を指定しなかった場合、確率分布オブジェクトを含めて、ワークスペース内にあるすべての変数が、指定したファイル名で MATLAB® によって保存されます。詳細とその他の構文オプションについては、save を参照してください。

確率分布オブジェクトの使用による分布の解析

この例では、確率分布オブジェクトを使用した、近似分布に対する多段階解析の実施方法を示します。

この解析では、次のことを行う方法を示します。

  • 120 人の学生の試験の成績が含まれている標本データに確率分布を当てはめる (fitdistを使用)。

  • 試験の成績の平均値を計算する (meanを使用)。

  • 近似分布の pdf のプロットを重ねて試験成績データのヒストグラムをプロットする (plotpdfを使用)。

  • 上位 10% の成績の学生について境界を計算する (icdfを使用)。

  • 当てはめた確率分布オブジェクトを保存する (save を使用)。

標本データを読み込みます。

load examgrades

標本データは 120 行 5 列の行列で、試験の成績が格納されています。試験の得点は 0 ~ 100 のスケールです。

試験成績データの 1 列目が含まれているベクトルを作成します。

x = grades(:,1);

fitdist を使用して確率分布オブジェクトを作成することにより、正規分布で標本データを近似します。

pd = fitdist(x,'Normal')
pd = 
  NormalDistribution

  Normal distribution
       mu = 75.0083   [73.4321, 76.5846]
    sigma =  8.7202   [7.7391, 9.98843]

fitdist は、NormalDistribution 型の確率分布オブジェクト pd を返します。このオブジェクトには、近似した正規分布について推定したパラメーター値 mu および sigma が含まれています。パラメーター推定の横にある区間は分布パラメーターの 95% 信頼区間です。

近似分布オブジェクト pd を使用して、学生の試験成績の平均値を計算します。

m = mean(pd)
m = 75.0083

試験成績の平均値は、fitdist で推定した mu パラメーターと等しくなります。

試験成績のヒストグラムをプロットします。当てはめた正規分布と実際の試験成績を視覚的に比較するため、当てはめた pdf のプロットを重ねます。

x_pdf = [1:0.1:100];
y = pdf(pd,x_pdf);
 
figure
histogram(x,'Normalization','pdf')
line(x_pdf,y)

Figure contains an axes object. The axes object contains 2 objects of type histogram, line.

近似分布の pdf は、試験成績のヒストグラムと同じ形状になっています。

逆累積分布関数 (icdf) を使用して、学生の試験成績の上位 10% の境界を判別します。この境界は、確率分布の cdf が 0.9 に等しくなる値と同じです。つまり、90% の試験成績はこの境界値以下になります。

A = icdf(pd,0.9)
A = 86.1837

近似分布に基づくと、10% の学生の試験成績は 86.1837 より高くなっています。同様に、90% の学生は試験成績が 86.1837 以下です。

近似した確率分布 pd を、myobject.mat という名前のファイルとして保存します。

save('myobject.mat','pd')

アプリと対話型ユーザー インターフェイス

アプリとユーザー インターフェイスを使用すると、パラメトリックおよびノンパラメトリックな確率分布を処理するための対話型のアプローチが可能となります。

  • 分布フィッター アプリを使用して、対話的に分布を標本データに当てはめたり、確率分布オブジェクトをワークスペースにエクスポートします。

  • 確率分布関数ユーザー インターフェイスを使用して、分布パラメーターの値を変更すると pdf および cdf にどのような影響があるかを視覚的に調べます。

  • 乱数発生ユーザー インターフェイス (randtool) を使用して、パラメーター値を指定して確率分布から乱数を対話的に発生させ、ワークスペースにエクスポートします。

分布フィッター アプリ

分布フィッター アプリでは、対話的に確率分布をデータに当てはめることができます。さまざまなタイプのプロットを表示し、信頼限界の計算、およびデータの近似を評価できます。また、近似からデータを除外することもできます。データを保存し、近似をワークスペースに確率分布オブジェクトとしてエクスポートして、さらに解析を行うことができます。

分布フィッター アプリを読み込むには、[アプリ] タブを使用するか、コマンド ウィンドウで「distributionFitter」と入力します。詳細は、分布フィッター アプリを使用したデータのモデリングを参照してください。

Default view of the Distribution Fitter app

確率分布関数ツール

確率分布関数ユーザー インターフェイスでは、確率分布を視覚的に調べることができます。確率分布関数ユーザー インターフェイスを読み込むには、コマンド ウィンドウで「disttool」と入力します。

Default view of the Probability Distribution Function Tool

乱数発生ツール

乱数発生ユーザー インターフェイスでは、指定した分布から乱数データを発生させ、結果をワークスペースにエクスポートできます。このツールを使用すると、パラメーターと標本サイズの変更が分布に与える影響を調べることができます。

乱数発生ユーザー インターフェイスでは、分布のパラメーター値の設定と下限および上限の変更を行うこと、同じサイズおよびパラメーターを使用して同じ分布から別の標本を抽出すること、および詳しく解析するために無作為標本をワークスペースにエクスポートすることができます。ダイアログ ボックスにより、標本に名前を付けることができます。

Default view of the Random Number Generation Tool

分布特有の関数と汎用の分布関数

分布特有の関数と汎用の分布関数を使用すると、乱数の生成、ループ内またはスクリプト内での要約統計量の計算、cdf または pdf を関数ハンドルとして別の関数に渡す操作に便利です。これらの関数は、単一のパラメーター セットだけでなく、パラメーター値の配列についての計算の実行にも使用できます。

  • 分布特有の関数 — サポートされている分布の一部には、その分布特有の関数があります。これらの関数は、normpdfnormcdfnorminvnormstatnormfitnormlike および normrnd が以下のようになるのと同様、略語を使用します。

    • pdf — 確率密度関数

    • cdf — 累積分布関数

    • inv — 逆累積分布関数

    • stat — 分布統計関数

    • fit — 分布近似関数

    • like — 負の対数尤度関数

    • rnd — 乱数発生器

  • 汎用の分布関数 — 分布名とパラメーターを指定して、cdficdfmlepdf および random を使用します。

    • cdf — 累積分布関数

    • icdf — 逆累積分布関数

    • mle — 分布近似関数

    • pdf — 確率密度関数

    • random — 乱数生成関数

分布特有の関数の使用による分布の解析

この例では、分布特有の関数を使用した、近似分布に対する多段階解析の実施方法を示します。

この解析では、次のことを行う方法を示します。

  • 120 人の学生の試験の成績が含まれている標本データに確率分布を当てはめる (normfitを使用)。

  • 近似分布の pdf のプロットを重ねて試験成績データのヒストグラムをプロットする (plotnormpdfを使用)。

  • 上位 10% の成績の学生について境界を計算する (norminvを使用)。

  • save を使用して、推定した分布パラメーターを保存する。

確率分布オブジェクトを使用して、同じ解析を実行できます。確率分布オブジェクトの使用による分布の解析を参照してください。

標本データを読み込みます。

load examgrades

標本データは 120 行 5 列の行列で、試験の成績が格納されています。試験の得点は 0 ~ 100 のスケールです。

試験成績データの 1 列目が含まれているベクトルを作成します。

x = grades(:,1);

normfit を使用して、正規分布オブジェクトを標本データに当てはめます。

[mu,sigma,muCI,sigmaCI] = normfit(x)
mu = 75.0083
sigma = 8.7202
muCI = 2×1

   73.4321
   76.5846

sigmaCI = 2×1

    7.7391
    9.9884

関数 normfit は、正規分布パラメーターの推定値およびパラメーター推定値の 95% 信頼区間を返します。

試験成績のヒストグラムをプロットします。当てはめた正規分布と実際の試験成績を視覚的に比較するため、当てはめた pdf のプロットを重ねます。

x_pdf = [1:0.1:100];
y = normpdf(x_pdf,mu,sigma);
 
figure
histogram(x,'Normalization','pdf')
line(x_pdf,y)

Figure contains an axes object. The axes object contains 2 objects of type histogram, line.

近似分布の pdf は、試験成績のヒストグラムと同じ形状になっています。

正規逆累積分布関数を使用して、学生の試験成績の上位 10% の境界を判別します。この境界は、確率分布の cdf が 0.9 に等しくなる値と同じです。つまり、90% の試験成績はこの境界値以下になります。

A = norminv(0.9,mu,sigma)
A = 86.1837

近似分布に基づくと、10% の学生の試験成績は 86.1837 より高くなっています。同様に、90% の学生は試験成績が 86.1837 以下です。

推定した分布パラメーターを、myparameter.mat という名前のファイルとして保存します。

save('myparameter.mat','mu','sigma')

関数ハンドルとしての確率分布関数の使用

この例では、確率分布関数 normcdf をカイ二乗適合度検定 (chi2gof) で関数ハンドルとして使用する方法を示します。

この例では、入力ベクトル x に含まれている標本データが正規分布に由来しており、この正規分布ではパラメーター µ および σ がそれぞれ標本データの平均 (mean) および標準偏差 (std) に等しいという帰無仮説を検定します。

rng('default') % For reproducibility
x = normrnd(50,5,100,1);
h = chi2gof(x,'cdf',{@normcdf,mean(x),std(x)})
h = 0

h = 0 という結果は、5% という既定の有意水準で chi2gof が帰無仮説を棄却しなかったことを示しています。

次の例では、確率分布関数をスライス サンプラー (slicesample) で関数ハンドルとして使用する方法を示します。この例では、normpdf を使用して 2,000 個の値がある無作為標本を標準正規分布から生成し、生成された値のヒストグラムをプロットします。

rng('default') % For reproducibility
x = slicesample(1,2000,'pdf',@normpdf,'thin',5,'burnin',1000);
histogram(x)

Figure contains an axes object. The axes object contains an object of type histogram.

このヒストグラムは、normpdf を使用した場合に生成される無作為標本が標準正規分布になることを示しています。

normpdf ではなく指数分布 pdf の確率分布関数 (exppdf) を関数ハンドルとして渡した場合、slicesampleµ が 1 に等しいという既定パラメーター値の指数分布から 2,000 個の無作為標本を生成します。

rng('default') % For reproducibility
x = slicesample(1,2000,'pdf',@exppdf,'thin',5,'burnin',1000);
histogram(x)

Figure contains an axes object. The axes object contains an object of type histogram.

このヒストグラムは、exppdf を使用した場合に生成される無作為標本が指数分布になることを示しています。

参考

| | | |

関連するトピック