对数据进行概率分布对象拟合
全页折叠
语法
pd = fitdist(x,distname)
pd = fitdist(x,distname,Name,Value)
[pdca,gn,gl] = fitdist(x,distname,'By',groupvar)
[pdca,gn,gl] = fitdist(x,distname,'By',groupvar,Name,Value)
说明
示例
pd = fitdist(x,distname)
通过对列向量 x
中的数据进行 distname
指定的分布拟合,创建概率分布对象。
示例
pd = fitdist(x,distname,Name,Value)
使用一个或多个名称-值对组参量指定的附加选项创建概率分布对象。例如,您可以为迭代拟合算法指示删失数据或指定控制参数。
示例
[pdca,gn,gl] = fitdist(x,distname,'By',groupvar)
基于分组变量 groupvar
对 x
中的数据进行 distname
指定的分布拟合,以创建概率分布对象。它返回拟合后的概率分布对象的元胞数组 pdca
、组标签的元胞数组 gn
以及分组变量水平的元胞数组 gl
。
示例
[pdca,gn,gl] = fitdist(x,distname,'By',groupvar,Name,Value)
使用一个或多个名称-值对组参量指定的附加选项返回上述输出参量。例如,您可以为迭代拟合算法指示删失数据或指定控制参数。
示例
全部折叠
对数据进行正态分布拟合
打开实时脚本
对样本数据进行正态分布拟合,并使用直方图和分位数-分位数图检查拟合情况。
从数据文件 patients.mat
中加载患者体重。
load patientsx = 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)
使用 histfit 函数创建具有正态分布拟合的直方图。histfit
使用 fitdist
对数据进行分布拟合。
histfit(x)
直方图显示数据有两种模式,正态分布拟合模式介于这两种模式之间。
使用 qqplot 创建样本数据 x
的分位数对拟合分布的理论分位数值的分位数-分位数图。
qqplot(x,pd)
绘图不是一条直线,说明数据不遵循正态分布。
对数据进行核分布拟合
打开实时脚本
从数据文件 patients.mat
中加载患者体重。
load patientsx = 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)
对分组数据进行正态分布拟合
打开实时脚本
从数据文件 patients.mat
中加载患者体重和性别。
load patientsx = 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 绘图,以直观地比较各性别的体重分布。
figureplot(x_values,femalepdf,'LineWidth',2)hold onplot(x_values,malepdf,'Color','r','LineStyle',':','LineWidth',2)legend(gn,'Location','NorthEast')hold off
对分组数据进行核分布拟合
打开实时脚本
从数据文件 patients.mat
中加载患者体重和性别。
load patientsx = 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 绘图,以直观地比较各性别的体重分布。
figureplot(x_values,femalepdf,'LineWidth',2)hold onplot(x_values,malepdf,'Color','r','LineStyle',':','LineWidth',2)legend(gn,'Location','NorthEast')hold off
输入参数
全部折叠
x
— 输入数据
列向量
输入数据,指定为列向量。fitdist
忽略 x
中的 NaN
值。此外,删失向量或频数向量中的任何 NaN
值都会导致 fitdist
忽略 x
中的对应值。
数据类型: double
distname
— 分布名称
字符向量 | 字符串标量
分布名称,指定为下列字符向量或字符串标量之一。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 |
groupvar
— 分组变量
分类数组 | 逻辑或数值向量 | 字符数组 | 字符串数组 | 字符向量元胞数组
分组变量,指定为分类数组、逻辑或数值向量、字符数组、字符串数组或字符向量元胞数组。分组变量中的每个唯一值定义一个组。
例如,如果 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
中的数据进行核分布对象拟合。
Censoring
— 删失数据的逻辑标志
0
(默认) | 逻辑值向量
指示删失数据的逻辑标志,指定为与输入向量 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
— 观测值频率
1
(默认) | 非负整数值向量
观测值频率,指定为与输入向量 x 大小相同的非负整数值向量。频率向量的每个元素指定 x
中对应元素的频率。默认值为由 1
组成的向量,表示 x
中的每个值仅出现一次。
fitdist
忽略此频率向量中的任何 NaN
值。此外,x
或删失向量中的任何 NaN
值都会导致 fitdist
忽略频率向量中的对应值。
数据类型: single
| double
Options
— 控制参数
结构体
迭代拟合算法的控制参数,指定为使用 statset 创建的结构体。
数据类型: struct
NTrials
— 二项分布的试验次数
1 (默认) | 正整数值
二项分布的试验次数,指定为正整数值。
仅当 distname 为 'Binomial'
(二项分布)时,此参量才有效。
示例: 'Ntrials',10
数据类型: single
| double
theta
— 广义帕累托分布的位置(阈值)参数
标量值
广义帕累托分布的位置(阈值)参数,指定为标量。
仅当 distname 为 'Generalized Pareto'
(广义帕累托分布)时,此参量才有效。
当样本数据 x 仅包括非负值时,默认值为 0。如果 x
包含负值,则必须指定 theta
。
示例: 'theta',1
数据类型: single
| double
mu
— 半正态分布的位置参量
标量值
半正态分布的位置参量,指定为标量。
仅当 distname 为 'Half Normal'
(半正态分布)时,此参量才有效。
当样本数据 x 仅包括非负值时,默认值为 0。如果 x
包含负值,则必须指定 mu
。
示例: 'mu',1
数据类型: single
| double
Kernel
— 核分布的核平滑器类型
'normal'
(默认) | 'box'
| 'triangle'
| 'epanechnikov'
核分布的核平滑器类型,指定为以下项之一:
'normal'
'box'
'triangle'
'epanechnikov'
您必须将 distname 指定为 'Kernel'
才能使用此选项。
Support
— 核分布的核密度支持
'unbounded'
(默认) | 'positive'
| 二元素向量
核分布的核密度支持,指定为 'unbounded'
、'positive'
或二元素向量。
值 | 描述 |
---|---|
'unbounded' | 密度可以取任意实数。 |
'positive' | 密度仅限于正值。 |
您也可以指定二元素向量,给定支持密度的有限下限和上限。
您必须将 distname 指定为 'Kernel'
才能使用此选项。
数据类型: single
| double
| char
| string
Width
— 核分布的核平滑窗带宽
标量值
核分布的核平滑窗带宽,指定为标量值。fitdist
使用的默认值为估计正态密度的最佳值,但您可能希望选择较小的值来显示一些特征,比如多个众数。您必须将 distname 指定为 'Kernel'
才能使用此选项。
数据类型: single
| double
输出参量
全部折叠
pd
— 概率分布
概率分布对象
概率分布,以概率分布对象形式返回。distname
指定的分布决定返回的概率分布对象的类的类型。有关 distname
值和对应概率分布对象的列表,请参阅 distname。
pdca
— 概率分布对象
元胞数组
由 distname
指定类型的概率分布对象,以元胞数组形式返回。有关 distname
值和对应概率分布对象的列表,请参阅 distname。
gn
— 组标签
字符向量元胞数组
组标签,以字符向量元胞数组形式返回。
gl
— 分组变量水平
字符向量元胞数组
分组变量水平,以字符向量元胞数组形式返回,每个分组变量对应于其中包含的一列。
算法
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.
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
支持的语法包括:
代码生成不支持包含分组变量pd
= fitdist(x
,distname
)pd
= fitdist(x
,distname
,Name,Value
)'By',groupvar
和相关输出参量pdca
、gn
和gl
的语法。fitdist
支持 beta 分布、指数分布、极值分布、对数正态分布、正态分布和威布尔分布的代码生成。distname
的值可以是'Beta'
、'Exponential'
、'ExtremeValue'
、'Lognormal'
、'Normal'
或'Weibull'
。distname
的值必须为编译时常量。
x
、'Censoring'
、'Frequency'
的值不能包含NaN
值。代码生成会忽略 beta 分布的
'Frequency'
值,所以您需要手动将重复值添加到x
中(而不是通过指定'Frequency'
值),以便x
中的值具有所需的频数。代码生成不支持这些输入参量:
groupvar
、NTrials
、Theta
、mu
、Kernel
、Support
和Width
。名称-值对组参量中的名称必须为编译时常量。
pd
的下列对象函数支持代码生成:cdf、icdf、iqr、mean、median、pdf、std、truncate 和 var。
有关代码生成的详细信息,请参阅 Introduction to Code Generation 和 Code Generation for Probability Distribution Objects。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不能将输入参量
distname
指定为'Rician'
或'Stable'
。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
版本历史记录
在 R2009a 中推出
另请参阅
makedist | distributionFitter | paramci | histfit | mle | qqplot
主题
- Working with Probability Distributions
- Supported Distributions
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 简体中文
- English
- 日本 (日本語)
- 한국 (한국어)
Contact your local office