# fitdist
对数据进行概率分布对象拟合
函数库: TyStatistics
# 语法
pd = fitdist(x,distname;Name=Value)
# 说明
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.