Main Content

fitdist

对数据进行概率分布对象拟合

说明

示例

pd = fitdist(x,distname) 通过对列向量 x 中的数据进行 distname 指定的分布拟合,创建概率分布对象。

示例

pd = fitdist(x,distname,Name,Value) 使用一个或多个名称-值对组参数指定的附加选项创建概率分布对象。例如,您可以为迭代拟合算法指示删失数据或指定控制参数。

示例

[pdca,gn,gl] = fitdist(x,distname,'By',groupvar) 基于分组变量 groupvarx 中的数据进行 distname 指定的分布拟合,以创建概率分布对象。它返回拟合后的概率分布对象的元胞数组 pdca、组标签的元胞数组 gn 以及分组变量水平的元胞数组 gl

示例

[pdca,gn,gl] = fitdist(x,distname,'By',groupvar,Name,Value) 使用一个或多个名称-值对组参数指定的附加选项返回上述输出参数。例如,您可以为迭代拟合算法指示删失数据或指定控制参数。

示例

全部折叠

对样本数据进行正态分布拟合,并使用直方图和分位数-分位数图检查拟合情况。

从数据文件 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

计算并绘制分布的 pdf 值。

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.

直方图显示数据有两种模式,正态分布拟合模式介于这两种模式之间。

使用 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;

通过对数据进行核分布拟合来创建核分布对象。使用依潘涅契科夫核函数。

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

    Kernel = epanechnikov
    Bandwidth = 14.3792
    Support = unbounded

绘制分布的 pdf。

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'}

元胞数组 pdca 包含两个概率分布对象,分别对应每个性别组。元胞数组 gn 包含两个组标签。元胞数组 gl 包含两个组水平。

查看元胞数组 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]

计算每个分布的 pdf。

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

对 pdf 绘图,以直观地比较各性别的体重分布。

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');

查看元胞数组 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

计算每个分布的 pdf。

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

对 pdf 绘图,以直观地比较各性别的体重分布。

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.

输入参数

全部折叠

输入数据,指定为列向量。fitdist 忽略 x 中的 NaN 值。此外,删失向量或频数向量中的任何 NaN 值都会导致 fitdist 忽略 x 中的对应值。

数据类型: double

分布名称,指定为下列字符向量或字符串标量之一。distname 指定的分布决定返回的概率分布对象的类型。

分布名称描述分布对象
'Beta'beta 分布BetaDistribution
'Binomial'二项分布BinomialDistribution
'BirnbaumSaunders'伯恩鲍姆-桑德斯分布BirnbaumSaundersDistribution
'Burr'伯尔分布BurrDistribution
'Exponential'指数分布ExponentialDistribution
'Extreme Value''ev'极值分布ExtremeValueDistribution
'Gamma'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'Nakagami 分布NakagamiDistribution
'Negative Binomial''nbin'负二项分布NegativeBinomialDistribution
'Normal'正态分布NormalDistribution
'Poisson'泊松分布PoissonDistribution
'Rayleigh'瑞利分布RayleighDistribution
'Rician'莱斯分布RicianDistribution
'Stable'稳定分布StableDistribution
'tLocationScale't 位置尺度分布tLocationScaleDistribution
'Weibull''wbl'威布尔分布WeibullDistribution

分组变量,指定为分类数组、逻辑或数值向量、字符数组、字符串数组或字符向量元胞数组。分组变量中的每个唯一值定义一个组。

例如,如果 Gender 是字符向量元胞数组,其值为 'Male''Female',则您可以使用 Gender 作为分组变量,按性别对数据进行分布拟合。

通过指定包含分组变量的元胞数组,可以使用多个分组变量。所有指定分组变量的值相同的观测值会放在同一个组中。

例如,如果 Smoker 是逻辑向量,其中值为 0 表示非吸烟者,值为 1 表示吸烟者,则指定元胞数组 {Gender,Smoker} 会将观测值分为四组:男性吸烟者、男性非吸烟者、女性吸烟者和女性非吸烟者。

示例: {Gender,Smoker}

数据类型: categorical | logical | single | double | char | string | cell

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: fitdist(x,'Kernel','Kernel','triangle') 使用三角核函数对 x 中的数据进行核分布对象拟合。

指示删失数据的逻辑标志,指定为与输入向量 x 大小相同的逻辑值向量。当 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' 或二元素向量。

描述
'unbounded'密度可以取任意实数。
'positive'密度仅限于正值。

您也可以指定二元素向量,给定支持密度的有限下限和上限。

您必须将 distname 指定为 'Kernel' 才能使用此选项。

数据类型: single | double | char | string

核分布的核平滑窗带宽,指定为标量值。fitdist 使用的默认值为估计正态密度的最佳值,但您可能希望选择较小的值来显示一些特征,比如多个众数。您必须将 distname 指定为 'Kernel' 才能使用此选项。

数据类型: single | double

输出参数

全部折叠

概率分布,以概率分布对象形式返回。distname 指定的分布决定返回的概率分布对象的类的类型。有关 distname 值和对应概率分布对象的列表,请参阅 distname

distname 指定类型的概率分布对象,以元胞数组形式返回。有关 distname 值和对应概率分布对象的列表,请参阅 distname

组标签,以字符向量元胞数组形式返回。

分组变量水平,以字符向量元胞数组形式返回,每个分组变量对应于其中包含的一列。

算法

fitdist 函数使用最大似然估计来拟合大多数分布。两个例外是带有未删失数据的正态分布和对数正态分布。

  • 对于未删失的正态分布,sigma 参数的估计值是方差的无偏估计值的平方根。

  • 对于未删失的对数正态分布,sigma 参数的估计值是数据对数的方差的无偏估计值的平方根。

替代功能

  • 分布拟合器打开一个图形用户界面,以便您从工作区导入数据,并以交互方式对该数据进行概率分布拟合。然后,您可以将分布作为概率分布对象保存到工作区。使用 distributionFitter 打开分布拟合器,或点击 App 选项卡上的“分布拟合器”。

  • 要对左删失、双删失或区间删失数据进行分布拟合,请使用 mle。您可以使用 mle 函数找到最大似然估计值,并使用 makedist 函数创建一个概率分布对象。有关示例,请参阅Find MLEs for Double-Censored Data

参考

[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 中推出