本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

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) 使用一个或多个名称-值对组参数指定的附加选项返回上述输出参数。例如,您可以为迭代拟合算法指示删失数据或指定控制参数。

示例

全部折叠

加载样本数据。创建包含患者体重数据的向量。

load hospital
x = hospital.Weight;

通过对数据进行正态分布拟合来创建正态分布对象。

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

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

参数估计值旁边的区间是分布参数的 95% 置信区间。

绘制分布的 pdf。

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

加载样本数据。创建包含患者体重数据的向量。

load hospital
x = hospital.Weight;

通过对数据进行核分布拟合来创建核分布对象。使用 Epanechnikov 核函数。

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)

加载样本数据。创建包含患者体重数据的向量。

load hospital
x = hospital.Weight;

通过对按患者性别分组的数据进行正态分布拟合来创建正态分布对象。

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

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

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

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

查看元胞数组 pdca 中的各个分布,比较各性别的均值 mu 和标准差 sigma

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

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

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

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

计算每个分布的 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

加载样本数据。创建包含患者体重数据的向量。

load hospital
x = hospital.Weight;

通过对按患者性别分组的数据进行核分布拟合来创建核分布对象。使用三角核函数。

gender = hospital.Sex;
[pdca,gn,gl] = fitdist(x,'Kernel','By',gender,'Kernel','triangle');

查看元胞数组 pdca 中的每个分布,以了解每个性别的核分布。

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

    Kernel = triangle
    Bandwidth = 4.25894
    Support = unbounded

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

    Kernel = triangle
    Bandwidth = 5.08961
    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

输入参数

全部折叠

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

数据类型: double

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

分布名称说明分布对象
'Beta'beta 分布BetaDistribution
'Binomial'二项分布BinomialDistribution
'BirnbaumSaunders'Birnbaum-Saunders 分布BirnbaumSaundersDistribution
'Burr'Burr 分布BurrDistribution
'Exponential'指数分布ExponentialDistribution
'ExtremeValue'极值分布ExtremeValueDistribution
'Gamma'gamma 分布GammaDistribution
'GeneralizedExtremeValue'广义极值分布GeneralizedExtremeValueDistribution
'GeneralizedPareto'广义帕累托分布GeneralizedParetoDistribution
'HalfNormal'半正态分布HalfNormalDistribution
'InverseGaussian'逆高斯分布InverseGaussianDistribution
'Kernel'核分布KernelDistribution
'Logistic'逻辑分布LogisticDistribution
'Loglogistic'对数逻辑分布LoglogisticDistribution
'Lognormal'对数正态分布LognormalDistribution
'Nakagami'Nakagami 分布NakagamiDistribution
'NegativeBinomial'负二项分布NegativeBinomialDistribution
'Normal'正态分布NormalDistribution
'Poisson'泊松分布PoissonDistribution
'Rayleigh'瑞利分布RayleighDistribution
'Rician'莱斯分布RicianDistribution
'Stable'稳定分布StableDistribution
'tLocationScale't 位置尺度分布tLocationScaleDistribution
'Weibull'Weibull 分布WeibullDistribution

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

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

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

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

示例: {Gender,Smoker}

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

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号内。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

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

指示删失数据的逻辑标志,指定为以逗号分隔的对组,其中包含 'Censoring' 和与输入向量 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

观测值频率,指定为以逗号分隔的对组,其中包含 'Frequency' 和与输入向量 x 大小相同的非负整数值向量。频率向量的每个元素指定 x 中对应元素的频率。默认值为由 1 组成的向量,表示 x 中的每个值仅出现一次。

fitdist 忽略此频率向量中的任何 NaN 值。此外,x 或删失向量中的任何 NaN 值都会导致 fitdist 忽略频率向量中的对应值。

数据类型: single | double

迭代拟合算法的控制参数,指定为以逗号分隔的对组,其中包含 'Options' 和您使用 statset 创建的结构体。

数据类型: struct

二项分布的试验次数,指定为由 'NTrials' 和正整数值组成的以逗号分隔的对组。您必须将 distname 指定为 'Binomial' 才能使用此选项。

数据类型: single | double

广义帕累托分布的阈值参数,指定为由 'Theta' 和标量值组成的以逗号分隔的对组。您必须将 distname 指定为 'GeneralizedPareto' 才能使用此选项。

数据类型: single | double

半正态分布的位置参数,指定为由 'mu' 和标量值组成的以逗号分隔的对组。您必须将 distname 指定为 'HalfNormal' 才能使用此选项。

数据类型: single | double

核平滑器类型,指定为以逗号分隔的对组,其中包含 'Kernel' 和以下项之一:

  • 'normal'

  • 'box'

  • 'triangle'

  • 'epanechnikov'

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

核密度支持,指定为以逗号分隔的对组,其中包含 'Support''unbounded''positive' 或二元素向量。

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

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

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

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

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

数据类型: single | double

输出参数

全部折叠

概率分布,以概率分布对象形式返回。distname 指定的分布决定返回的概率分布对象的类的类型。

distname 指定类型的概率分布对象,以元胞数组形式返回。

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

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

算法

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

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

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

替代功能

App

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

参考

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