確率分布の操作
確率分布は、本来の母集団に関する仮定に基づく理論上の分布です。確率分布は、確率変数が特定の離散値をもつ事象、あるいは指定の連続値の範囲に収まる事象に対して確率を与えます。
Statistics and Machine Learning Toolbox™ には、確率分布を処理する方法がいくつか用意されています。
確率分布オブジェクト — 確率分布を標本データに当てはめるかパラメーター値を指定することにより、確率分布オブジェクトを作成します。そして、オブジェクト関数を使用して、分布の評価や乱数の生成などを行います。
アプリと対話型ユーザー インターフェイス — 分布フィッター アプリ、確率分布関数ユーザー インターフェイス、および乱数発生ツール (
randtool
) を使用して、確率分布を対話的に当てはめて調べます。分布特有の関数と汎用の分布関数 — これらの関数は、乱数の生成、ループ内またはスクリプト内での要約統計量の計算、cdf または pdf を関数ハンドルとして別の関数に渡す操作に便利です。これらの関数は、単一のパラメーター セットだけでなく、パラメーター値の配列についての計算の実行にも使用できます。
Statistics and Machine Learning Toolbox でサポートされている分布の一覧については、サポートされている分布を参照してください。
確率分布オブジェクト
確率分布オブジェクトを使用すると、確率分布による標本データへの当てはめと、パラメーター値の指定によって分布を定義できます。その後、分布オブジェクトに対してさまざまな解析を実行できます。
確率分布オブジェクトの作成
fitdist
を使用して確率分布オブジェクトで標本データを近似することにより、標本データから確率分布のパラメーターを推定します。指定した単一のパラメトリック分布またはノンパラメトリック分布を標本データに当てはめることができます。また、グループ化変数に基づいて、同じタイプの複数の分布を標本データに当てはめることもできます。fitdist
は、標本データから分布パラメーターを推定するために、ほとんどの分布には最尤推定法 (MLE) を使用します。詳細とその他の構文オプションについては、fitdist
を参照してください。
また、makedist
を使用してパラメーター値を指定することにより確率分布オブジェクトを作成することもできます。
確率分布オブジェクトの処理
確率分布オブジェクトを作成すると、オブジェクト関数を使用して以下を行うことができます。
確率分布オブジェクトの保存
確率分布オブジェクトを .MAT ファイルに保存するには、次のようにします。
ツールバーで [ワークスペースの保存] をクリックします。確率分布オブジェクトも含めて、ワークスペース内にあるすべての変数が保存されます。
ワークスペース ブラウザーで確率分布オブジェクトを右クリックして、[名前を付けて保存] を選択します。選択した確率分布オブジェクトのみが保存されます。ワークスペース内にある他の変数は保存されません。
また、コマンド ラインで関数 save
を使用して確率分布オブジェクトを直接保存できます。save
は、ファイル名を選択し、保存する確率分布オブジェクトを指定できます。オブジェクト (または他の変数) を指定しなかった場合、確率分布オブジェクトを含めて、ワークスペース内にあるすべての変数が、指定したファイル名で MATLAB® によって保存されます。詳細とその他の構文オプションについては、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)
近似分布の 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')
アプリと対話型ユーザー インターフェイス
アプリとユーザー インターフェイスを使用すると、パラメトリックおよびノンパラメトリックな確率分布を処理するための対話型のアプローチが可能となります。
分布フィッター アプリ
分布フィッター アプリでは、対話的に確率分布をデータに当てはめることができます。さまざまなタイプのプロットを表示し、信頼限界の計算、およびデータの近似を評価できます。また、近似からデータを除外することもできます。データを保存し、近似をワークスペースに確率分布オブジェクトとしてエクスポートして、さらに解析を行うことができます。
分布フィッター アプリを読み込むには、[アプリ] タブを使用するか、コマンド ウィンドウで「distributionFitter
」と入力します。詳細は、分布フィッター アプリを使用したデータのモデリングを参照してください。
確率分布関数ツール
確率分布関数ユーザー インターフェイスでは、確率分布を視覚的に調べることができます。確率分布関数ユーザー インターフェイスを読み込むには、コマンド ウィンドウで「disttool
」と入力します。
乱数発生ツール
乱数発生ユーザー インターフェイスでは、指定した分布から乱数データを発生させ、結果をワークスペースにエクスポートできます。このツールを使用すると、パラメーターと標本サイズの変更が分布に与える影響を調べることができます。
乱数発生ユーザー インターフェイスでは、分布のパラメーター値の設定と下限および上限の変更を行うこと、同じサイズおよびパラメーターを使用して同じ分布から別の標本を抽出すること、および詳しく解析するために無作為標本をワークスペースにエクスポートすることができます。ダイアログ ボックスにより、標本に名前を付けることができます。
分布特有の関数と汎用の分布関数
分布特有の関数と汎用の分布関数を使用すると、乱数の生成、ループ内またはスクリプト内での要約統計量の計算、cdf または pdf を関数ハンドルとして別の関数に渡す操作に便利です。これらの関数は、単一のパラメーター セットだけでなく、パラメーター値の配列についての計算の実行にも使用できます。
分布特有の関数の使用による分布の解析
この例では、分布特有の関数を使用した、近似分布に対する多段階解析の実施方法を示します。
この解析では、次のことを行う方法を示します。
確率分布オブジェクトを使用して、同じ解析を実行できます。確率分布オブジェクトの使用による分布の解析を参照してください。
標本データを読み込みます。
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)
近似分布の 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)
このヒストグラムは、normpdf
を使用した場合に生成される無作為標本が標準正規分布になることを示しています。
normpdf
ではなく指数分布 pdf の確率分布関数 (exppdf
) を関数ハンドルとして渡した場合、slicesample
は µ が 1 に等しいという既定パラメーター値の指数分布から 2,000 個の無作為標本を生成します。
rng('default') % For reproducibility x = slicesample(1,2000,'pdf',@exppdf,'thin',5,'burnin',1000); histogram(x)
このヒストグラムは、exppdf
を使用した場合に生成される無作為標本が指数分布になることを示しています。
参考
fitdist
| makedist
| randtool
| 分布フィッター | 確率分布関数