2026a

# fitdist


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

函数库: TyStatistics

# 语法

pd = fitdist(x,distname)

pd = fitdist(x,distname;Name=Value)

list = fitdist()

# 说明

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


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


list = fitdist() 返回一个字符串数组,其中包含 makedist 可以创建的概率分布列表。示例

# 示例

对数据进行正态分布拟合

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

从数据文件中加载患者体重。

using TyStatistics
using TyPlot
file_path = pkgdir(TyStatistics) * "/examples/ProbabilityDistributions/fitdist/fitdist_data1.jl";
include(file_path);
x = Weight;

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

pd = fitdist(x,"Normal")
pd = 
正态分布
μ = 154.0  [148.72765363944046, 159.27234636055954]
σ = 26.571420813355164  [23.329889366232717, 30.867362056895168]

分布对象的输出包括均值 (mu) 和标准差 (sigma) 的参数估计值,以及每个参数的 95% 置信区间。

使用 paramci 函数获得 95% 置信区间。

ci95 = paramci(pd)
ci95 = 2×2 Matrix{Float64}:
 148.728  23.3299
 159.272  30.8674

指定显著性水平 (Alpha) 以获得具有不同置信水平的置信区间。计算 99% 置信区间。

ci99 = paramci(pd,alpha=0.01)
ci99 = 2×2 Matrix{Float64}:
 147.021  22.4257
 160.979  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.Pd)

绘图不是一条直线,说明数据不遵循正态分布。

输出所支持的分布列表
using TyStatistics
fitdist()
24-element Vector{String}:
 "rician"
 "poisson"
 "exponential"
 "lognormal"
 "nakagami"
 "stable"
 "generalizedextremevalue"
 "binomial"
 "burr"
 "weibull"
 "birnbaumsaunders"       
 "halfnormal"
 "inversegaussian"        
 "generalizedpareto"      
 "beta"
 "normal"
 "negativebinomial"       
 "kernel"
 "tlocationscale"
 "gamma"
 "logistic"
 "loglogistic"
 "extremevalue"
 "rayleigh"

这些就是fitdist函数支持拟合的分布列表。

# 输入参数

x - 输入数据
列向量

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

数据类型: Int | Float

distname - 分布名称
字符串

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

分布名称 描述 分布对象
"Beta" beta 分布 BetaDistribution
"Binomial" 二项分布 BinomialDistribution
"BirnbaumSaunders" 伯恩鲍姆-桑德斯分布 BirnbaumSaundersDistribution
"Burr" 伯尔分布 BurrDistribution
"Exponential" 指数分布 ExponentialDistribution
"ExtremeValue" 极值分布 ExtremeValueDistribution
"Gamma" gamma 分布 GammaDistribution
"GeneralizedExtremeValue" 广义极值分布 GeneralizedExtremeValueDistribution
"GeneralizedPareto" 广义帕累托分布 GeneralizedParetoDistribution
"HalfNormal" 半正态分布 HalfNormalDistribution
"InverseGaussian" 逆高斯分布 InverseGaussianDistribution
"Logistic" 逻辑分布 LogisticDistribution
"Loglogistic" 对数逻辑分布 LoglogisticDistribution
"Lognormal" 对数正态分布 LognormalDistribution
"Kernel" 核分布 KernelDistribution
"Nakagami" Nakagami 分布 NakagamiDistribution
"NegativeBinomial" 负二项分布 NegativeBinomialDistribution
"Normal" 正态分布 NormalDistribution
"Poisson" 泊松分布 PoissonDistribution
"Rayleigh" 瑞利分布 RayleighDistribution
"Rician" 莱斯分布 RicianDistribution
"Stable" 稳定分布 StableDistribution
"Weibull" 威布尔分布 WeibullDistribution

# 关键字参数

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

示例: fitdist(x,"Binomial",NTrials=10) 对 x 中的数据进行二项分布对象拟合,试验次数为 10。

cens - 删失数据的逻辑标志
0 数组(默认) | 逻辑值向量

指示删失数据的逻辑标志,指定为与输入向量 x 大小相同的逻辑值向量。当 x 中的对应元素是右删失观测值时,该值为 1,当对应元素是精确观测值时,该值为 0。默认值为由 0 组成的向量,表示所有观测值均为准确的。

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

仅当 distname 是 "BirnbaumSaunders"、"Burr"、"Exponential"、"ExtremeValue"、"Gamma"、"InverseGaussian"、"Logistic"、"Loglogistic"、"Lognormal"、"Nakagami"、"Normal"、"Rician"、"tLocationScale" 或 "Weibull" 时,此参数才有效。

数据类型: Integer

freq - 观测值频率
1 数组(默认) | 非负整数向量

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

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

数据类型: Integer

Options - 控制参数
结构体

迭代拟合算法的控制参数,指定为结构体,根据分布不同有所区别,由 statset 函数创建。

数据类型: struct

NTrials - 二项分布的试验次数
1 (默认) | 正整数值

二项分布的试验次数,指定为正整数值。

仅当 distname 为 "Binomial"(二项分布)时,此参数才有效。

示例: Ntrials=10

数据类型: Integer

theta - 广义帕累托分布的位置(阈值)参数
标量值

广义帕累托分布的位置(阈值)参数,指定为标量。

仅当 distname 为 "GeneralizedPareto"(广义帕累托分布)时,此参数才有效。

当样本数据 x 仅包括非负值时,默认值为 0。如果 x 包含负值,则必须指定 theta。

示例: theta=1

数据类型: Number

mu - 半正态分布的位置参数
标量值

半正态分布的位置参数,指定为标量。

仅当 distname 为 "HalfNormal"(半正态分布)时,此参数才有效。

当样本数据 x 仅包括非负值时,默认值为 0。如果 x 包含负值,则必须指定 mu。

示例: mu=1

数据类型: Number

kernelname - 核分布的核平滑器类型
"normal" (默认)| "box" | "triangle" | "epanechnikov"

核分布的核平滑器类型。

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

示例: kernelname="box"

数据类型: String

support - 核分布的核密度支持
"unbounded" (默认)| "positive"

核分布的核密度支持,指定为 "unbounded" 或 "positive"。

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

示例: support="positive"

数据类型: String

Width - 核分布的核平滑窗带宽
标量值

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

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

示例: Width=1.0

数据类型: Int | Float

# 输出参数

pd - 概率分布
概率分布相关结构体

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

# 算法

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

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

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

# 替代功能

要对左删失、双删失或区间删失数据进行分布拟合,请使用 mle。您可以使用 mle 函数找到最大似然估计值,并使用 makedist 函数创建一个概率分布对象。

# 参考文献

[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.

# 另请参阅

makedist | paramci | histfit | mle | qqplot | statset