Main Content

fitdist

データへの確率分布オブジェクトの近似

説明

pd = fitdist(x,distname) は、distname で指定された分布を列ベクトル x 内のデータに近似して、確率分布オブジェクトを作成します。

pd = fitdist(x,distname,Name,Value) は、1 つ以上の名前と値のペア引数で指定された追加オプションを使用して、確率分布オブジェクトを作成します。たとえば、打ち切りデータを示すか、反復近似アルゴリズムの制御パラメーターを指定できます。

[pdca,gn,gl] = fitdist(x,distname,'By',groupvar) は、distname で指定された分布をグループ化変数 groupvar に基づいて x 内のデータに近似して、確率分布オブジェクトを作成します。近似確率分布オブジェクトの cell 配列 pdca、グループ ラベルの cell 配列 gn およびグループ化変数レベルの cell 配列 gl を返します。

[pdca,gn,gl] = fitdist(x,distname,'By',groupvar,Name,Value) は、1 つ以上の名前と値のペア引数で指定された追加オプションを使用する上記の出力引数を返します。たとえば、打ち切りデータを示すか、反復近似アルゴリズムの制御パラメーターを指定できます。

すべて折りたたむ

正規分布を標本データに当てはめ、ヒストグラムおよび分位数-分位数プロットを使用して、この当てはめを検証します。

データ ファイル patients.mat から患者の体重を読み込みます。

load patients
x = Weight;

正規分布をデータに近似することにより、正規分布オブジェクトを作成します。

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

  Normal distribution
       mu =     154   [148.728, 159.272]
    sigma = 26.5714   [23.3299, 30.8674]

この分布オブジェクト表示には、パラメーターの平均 (mu)、標準偏差 (sigma)、および 95% 信頼区間に対するパラメーター推定が含まれます。

pd のオブジェクト関数を使用して、分布の評価と乱数の生成を実行できます。サポートされるオブジェクト関数を表示します。

methods(pd)
Methods for class prob.NormalDistribution:

cdf        gather     icdf       iqr        mean       median     negloglik  paramci    pdf        plot       proflik    random     std        truncate   var        

たとえば、関数 paramci を使用して、95% 信頼区間を取得します。

ci95 = paramci(pd)
ci95 = 2×2

  148.7277   23.3299
  159.2723   30.8674

有意水準 (Alpha) を指定して、異なる信頼水準の信頼区間を取得します。99% の信頼区間を計算します。

ci99 = paramci(pd,'Alpha',.01)
ci99 = 2×2

  147.0213   22.4257
  160.9787   32.4182

分布の確率密度関数の値を評価して、プロットします。

x_values = 50:1:250;
y = pdf(pd,x_values);
plot(x_values,y)

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

関数 histfit を使用して、正規分布当てはめによるヒストグラムを作成します。histfit は、fitdist を使用して分布をデータに当てはめます。

histfit(x)

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

ヒストグラムは、データに 2 つの最頻値があることと、正規分布当てはめの最頻値がこの 2 つの最頻値の間にあることを示しています。

qqplot を使用して、当てはめた分布の理論的な分位数値に対する標本データ x の分位数の分位数-分位数プロットを作成します。

qqplot(x,pd)

Figure contains an axes object. The axes object with title QQ Plot of Sample Data versus Distribution, xlabel Quantiles of Normal Distribution, ylabel Quantiles of Input Sample contains 3 objects of type line. One or more of the lines displays its values using only markers

プロットでは直線になっていないので、データは正規分布に従わないことがわかります。

データ ファイル patients.mat から患者の体重を読み込みます。

load patients
x = Weight;

カーネル分布をデータに近似することにより、カーネル分布オブジェクトを作成します。Epanechnikov カーネル関数を使用します。

pd = fitdist(x,'Kernel','Kernel','epanechnikov')
pd = 
  KernelDistribution

    Kernel = epanechnikov
    Bandwidth = 14.3792
    Support = unbounded

分布の確率密度関数をプロットします。

x_values = 50:1:250;
y = pdf(pd,x_values);
plot(x_values,y)

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

データ ファイル patients.mat から患者の体重および性別を読み込みます。

load patients
x = Weight;

正規分布をデータに近似することにより、患者の性別でグループ化された、正規分布オブジェクトを作成します。

[pdca,gn,gl] = fitdist(x,'Normal','By',Gender)
pdca=1×2 cell array
    {1x1 prob.NormalDistribution}    {1x1 prob.NormalDistribution}

gn = 2x1 cell
    {'Male'  }
    {'Female'}

gl = 2x1 cell
    {'Male'  }
    {'Female'}

cell 配列 pdca には、各性別グループに 1 つずつ、2 つの確率分布オブジェクトが含まれます。cell 配列 gn には、2 つのグループ ラベルが含まれています。cell 配列 gl には、2 つのグループ レベルが含まれています。

cell 配列 pdca の各分布を表示して、平均値 mu と患者の性別でグループ化された標準偏差 sigma を比較します。

female = pdca{1}  % Distribution for females
female = 
  NormalDistribution

  Normal distribution
       mu = 180.532   [177.833, 183.231]
    sigma = 9.19322   [7.63933, 11.5466]

male = pdca{2}  % Distribution for males
male = 
  NormalDistribution

  Normal distribution
       mu = 130.472   [128.183, 132.76]
    sigma = 8.30339   [6.96947, 10.2736]

分布ごとに確率密度関数を計算します。

x_values = 50:1:250;
femalepdf = pdf(female,x_values);
malepdf = pdf(male,x_values);

性別の体重分布を視覚的に比較するために確率密度関数をプロットします。

figure
plot(x_values,femalepdf,'LineWidth',2)
hold on
plot(x_values,malepdf,'Color','r','LineStyle',':','LineWidth',2)
legend(gn,'Location','NorthEast')
hold off

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Male, Female.

データ ファイル patients.mat から患者の体重および性別を読み込みます。

load patients
x = Weight;

カーネル分布をデータに近似することにより、患者の性別でグループ化された、カーネル分布オブジェクトを作成します。三角カーネル関数を使用します。

[pdca,gn,gl] = fitdist(x,'Kernel','By',Gender,'Kernel','triangle');

cell 配列 pdca の各分布を表示して、各性別のカーネル分布を確認します。

female = pdca{1}  % Distribution for females
female = 
  KernelDistribution

    Kernel = triangle
    Bandwidth = 5.08961
    Support = unbounded

male = pdca{2}  % Distribution for males
male = 
  KernelDistribution

    Kernel = triangle
    Bandwidth = 4.25894
    Support = unbounded

分布ごとに確率密度関数を計算します。

x_values = 50:1:250;
femalepdf = pdf(female,x_values);
malepdf = pdf(male,x_values);

性別の体重分布を視覚的に比較するために確率密度関数をプロットします。

figure
plot(x_values,femalepdf,'LineWidth',2)
hold on
plot(x_values,malepdf,'Color','r','LineStyle',':','LineWidth',2)
legend(gn,'Location','NorthEast')
hold off

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Male, Female.

入力引数

すべて折りたたむ

列ベクトルとして指定される入力データ。fitdistx 内の NaN 値を無視します。また、打ち切りベクトルまたは頻度ベクトルに NaN 値が含まれている場合、fitdistx 内の対応する値を無視します。

データ型: double

分布名。以下のいずれかの文字ベクトルまたは string スカラーを指定します。distname で指定された分布により、返される確率分布オブジェクトのタイプが決まります。

分布名説明分布オブジェクト
'Beta'ベータ分布BetaDistribution
'Binomial'二項分布BinomialDistribution
'BirnbaumSaunders'バーンバウム・サンダース分布BirnbaumSaundersDistribution
'Burr'ブール分布BurrDistribution
'Exponential'指数分布ExponentialDistribution
'Extreme Value' または 'ev'極値分布ExtremeValueDistribution
'Gamma'ガンマ分布GammaDistribution
'Generalized Extreme Value' または 'gev'一般化極値分布GeneralizedExtremeValueDistribution
'Generalized Pareto' または 'gp'一般化パレート分布GeneralizedParetoDistribution
'Half Normal' または 'hn'半正規分布HalfNormalDistribution
'InverseGaussian'逆ガウス分布InverseGaussianDistribution
'Kernel'カーネル分布KernelDistribution
'Logistic'ロジスティック分布LogisticDistribution
'Loglogistic'対数ロジスティック分布LoglogisticDistribution
'Lognormal'対数正規分布LognormalDistribution
'Nakagami'仲上分布NakagamiDistribution
'Negative Binomial' または 'nbin'負の二項分布NegativeBinomialDistribution
'Normal'正規分布NormalDistribution
'Poisson'ポアソン分布PoissonDistribution
'Rayleigh'レイリー分布RayleighDistribution
'Rician'ライス分布RicianDistribution
'Stable'安定分布StableDistribution
'tLocationScale't 位置-スケール分布tLocationScaleDistribution
'Weibull' または 'wbl'ワイブル分布WeibullDistribution

グループ化変数。categorical 配列、logical ベクトル、数値ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列を指定します。グループ化変数内の各一意の値が 1 つのグループを定義します。

Gender が文字ベクトルの cell 配列であり、'Male' および 'Female' という値が格納されている場合、Gender をグループ化変数として使用すると、性別で分布をデータに当てはめることができます。

複数のグループ化変数を使用するには、グループ化変数の cell 配列を指定します。観測値は、指定されたすべてのグループ化変数の共通の値をもつ場合、同じグループに配置されます。

たとえば、Smoker は、非喫煙者の値が 0、喫煙者の値が 1 の logical ベクトルである場合、{Gender,Smoker} という cell 配列を指定すると、観測値は次の 4 つのグループに分割されます。Male Smoker、Male Nonsmoker、Female Smoker および Female Nonsmoker。

例: {Gender,Smoker}

データ型: categorical | logical | single | double | char | string | cell

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: fitdist(x,'Kernel','Kernel','triangle') は、三角カーネル関数を使用してカーネル分布オブジェクトを x 内のデータに近似します。

打ち切りデータの logical フラグ。入力ベクトル x と同じサイズの logical 値のベクトルで指定します。x 内の対応する要素が右側打ち切り観測値である場合、この値は 1 になります。対応する要素が正確な観測値である場合は 0 になります。既定値は 0 のベクトルで、すべての観測値が正確であることを示します。

fitdist は、この打ち切りベクトルのどの NaN 値も無視します。また、x または頻度ベクトルに NaN 値が含まれている場合、fitdist は打ち切りベクトル内の対応する値を無視します。

この引数は、distname'BirnbaumSaunders''Burr''Exponential''ExtremeValue''Gamma''InverseGaussian''Kernel''Logistic''Loglogistic''Lognormal''Nakagami''Normal''Rician''tLocationScale' または 'Weibull' である場合のみ有効です。

データ型: logical

観測の頻度。入力ベクトル x と同じサイズである非負の整数値のベクトルで指定します。頻度ベクトルの各要素は、x の対応する要素の頻度を指定します。既定値は 1 のベクトルで、x の各値が一度しか現れないことを示します。

fitdist は、この頻度ベクトルの NaN 値をすべて無視します。また、x または打ち切りベクトルに NaN 値が含まれている場合、fitdist は頻度ベクトル内の対応する値を無視します。

データ型: single | double

反復近似アルゴリズムの制御パラメーター。statset を使用して作成する構造体として指定します。

データ型: struct

二項分布の試行回数。正の整数値として指定します。

この引数は、distname'Binomial' である場合 (二項分布) のみ有効です。

例: 'Ntrials',10

データ型: single | double

一般化パレート分布の位置 (しきい値) パラメーター。スカラーとして指定します。

この引数は、distname'Generalized Pareto' である場合 (一般化パレート分布) のみ有効です。

標本データ x に非負値のみが含まれる場合、既定値は 0 です。x に負の値が含まれる場合、theta を指定しなければなりません。

例: 'theta',1

データ型: single | double

半正規分布の位置パラメーター。スカラーを指定します。

この引数は、distname'Half Normal' である場合 (半正規分布) のみ有効です。

標本データ x に非負値のみが含まれる場合、既定値は 0 です。x に負の値が含まれる場合、mu を指定しなければなりません。

例: 'mu',1

データ型: single | double

カーネル分布のカーネル平滑化タイプ。次のいずれかを指定します。

  • 'normal'

  • 'box'

  • 'triangle'

  • 'epanechnikov'

このオプションを使用するには、distname'Kernel' として指定しなければなりません。

カーネル分布のカーネル密度サポート。'unbounded''positive'、または 2 要素ベクトルとして指定します。

説明
'unbounded'密度は、実数直線全体に拡張できます。
'positive'密度は正の値に制限されます。

または、密度のサポートのために、有限の下限および上限を指定する 2 要素ベクトルを指定できます。

このオプションを使用するには、distname'Kernel' として指定しなければなりません。

データ型: single | double | char | string

カーネル分布のカーネル平滑化ウィンドウの帯域幅。スカラー値を指定します。fitdist で使用される既定値は、正規分布の密度を推定するのに最適ですが、複数の最頻値のような特徴量を示すものには、より小さい値を選択してもかまいません。このオプションを使用するには、distname'Kernel' として指定しなければなりません。

データ型: single | double

出力引数

すべて折りたたむ

確率分布。確率分布オブジェクトとして返されます。distname で指定された分布で、返される確率分布オブジェクトのクラス タイプが決まります。distname 値および対応する確率分布オブジェクトのリストについては、distname を参照してください。

distname で指定されるタイプの確率分布オブジェクト。cell 配列として返されます。distname 値および対応する確率分布オブジェクトのリストについては、distname を参照してください。

グループ ラベル。文字ベクトルの cell 配列として返されます。

グループ化変数レベル。各グループ化変数に対して 1 つずつの列が含まれている文字ベクトルの cell 配列として返されます。

アルゴリズム

関数 fitdist は、最尤推定法を使用してほとんどの分布を近似します。2 つの例外は、打ち切りされていないデータを含む正規分布と対数正規分布です。

  • 打ち切りされていない正規分布の場合、sigma パラメーターの推定値は、分散の不偏推定の平方根です。

  • 打ち切りされていない対数正規分布の場合、sigma パラメーターの推定値は、データの対数の分散の不偏推定の平方根です。

代替機能

  • 分布フィッター アプリは、ワークスペースからデータをインポートするためのグラフィカル ユーザー インターフェイスを開き、そのデータに確率分布を対話的に当てはめます。その後、分布を確率分布オブジェクトとしてワークスペースに保存できます。分布フィッター アプリを開くには、distributionFitter を使用するか、[アプリ] タブの [分布フィッター] をクリックします。

  • 分布を左側打ち切りデータ、二重打ち切りデータ、または区間打ち切りデータに当てはめるため、mle を使用します。関数 mle を使用して最尤推定値を確認し、関数 makedist を使用して確率分布オブジェクトを作成できます。例については、二重打ち切りデータの MLE の計算を参照してください。

参照

[1] Johnson, N. L., S. Kotz, and N. Balakrishnan. Continuous Univariate Distributions. Vol. 1, Hoboken, NJ: Wiley-Interscience, 1993.

[2] Johnson, N. L., S. Kotz, and N. Balakrishnan. Continuous Univariate Distributions. Vol. 2, Hoboken, NJ: Wiley-Interscience, 1994.

[3] Bowman, A. W., and A. Azzalini. Applied Smoothing Techniques for Data Analysis. New York: Oxford University Press, 1997.

拡張機能

バージョン履歴

R2009a で導入