Main Content

確率分布の操作

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

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

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

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

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

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

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

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

確率分布オブジェクト

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

loadexamgrades

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

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

x = grades(:,1);

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

pd = fitdist(x,'Normal')
pd = NormalDistribution Normal distribution mu = 75.0083 [73.4321, 76.5846] sigma = 8.7202 [7.7391, 9.98843]

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

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

m = mean(pd)
m = 75.0083

試験成績の平均値は、适合distで推定した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')

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

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

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

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

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

Distribution Fitter アプリ

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

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

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- - - - - -分布統計関数

    • 适合- - - - - -分布近似関数

    • like- - - - - -負の対数尤度関数

    • rnd- - - - - -乱数発生器

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

    • cdf- - - - - -累積分布関数

    • icdf- - - - - -逆累積分布関数

    • mle- - - - - -分布近似関数

    • pdf- - - - - -確率密度関数

    • random- - - - - -乱数生成関数

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

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

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

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

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

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

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

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

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

loadexamgrades

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

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

x = grades(:,1);

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

[mu,sigma,muCI,sigmaCI] = normfit(x)
mu = 75.0083
sigma = 8.7202
muCI =2×173.4321 76.5846
sigmaCI =2×17.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 reproducibilityx = 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 reproducibilityx = 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 reproducibilityx = 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を使用した場合に生成される無作為標本が指数分布になることを示しています。

参考

||||

関連するトピック