# paretotails
具有 Pareto 尾部的广义帕累托分布
函数库: TyStatistics
# 描述
paretotails 对象是在尾部具有广义帕累托分布 (GPD) 的分段分布。
paretotails 对象由尾部的一个或两个 GPD 和中心的另一个分布组成。 您可以在创建对象时使用 paretotails 的 cdffun 参数指定中心的分布类型。 有效值为“ecdf”和函数。
paretotails 将 cdffun 类型的分布拟合到观测值 (x),并找到对应于下尾和上尾累积概率(分别为 pl 和 pu)的分位数。 然后,paretotails 将两个 GPD 分别拟合到观测值的较低 100 * pl% 和观测值的较高 100 * (1–pu)%。 如果 x 在尾部没有至少两个不同的观测值,则 paretotails 不会创建相应的尾部段。
使用对象函数 boundary、segment、upperparams和 lowerparams 查找分布特征。 lowerparams 和 upperparams 返回尾部 GPD 的参数。 boundary 返回分段分布段之间的边界点,segment 返回包含输入值的分段分布段,nsegments 返回对象中的段数。
使用对象函数 cdf、icdf、pdf 和 random 来评估分布。 这些函数非常适合 copula 和其他 Monte Carlo 模拟。 pdf 返回尾部的 GPD 密度和中心的累积分布函数 (cdf) 的斜率。 中心的这些概率密度函数 (pdf) 值通常不能很好地估计原始数据的基础密度。
# 创建
使用 paretotails 创建广义帕累托分布对象。
# 语法
pd = paretotails(x,pl,pu,cdffun)
# 说明
pd = paretotails(x,pl,pu) 返回分段分布对象 pd,它由中心的经验分布和尾部的广义帕累托分布组成。 分别使用下尾部和上部尾部累积概率 pl 和 pu 指定尾部的边界。示例
pd = paretotails(x,pl,pu,cdffun) 使用 cdffun 指定中心分布段的类型。
# 输入参数
x - 输入数据
数值向量
输入数据,指定为数值向量。
数据类型: Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128 | Float16 | Float32 | Float64
pl - 下尾累积概率
范围[0,1]中的数值标量
下尾累积概率,指定为 [0,1] 范围内的数值标量。 pl 的分位数是下尾观测值的边界。
如果 pl 为 0 或 x 在下尾部没有至少两个不同的观察值,则 paretotails 将 x 中的输入数据分成两组,中心和上尾部。 在这种情况下,拟合的分段分布对象 pd 由两部分组成:中心的经验分布和上尾的 GPD。
示例: 0.1
数据类型: Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128 | Float16 | Float32 | Float64
pu - 上尾累积概率
范围 [0,1] 中的数值标量
上尾累积概率,指定为 [0,1] 范围内的数值标量。 pu 的分位数是上尾观测值的边界。
如果 pu 为 1 或 x 在上尾没有至少两个不同的观测值,则 paretotails 将 x 中的输入数据分成两组,中心和下尾。 在这种情况下,拟合的分段分布对象 pd 由两部分组成:中心的经验分布和下尾的 GPD。
示例: 0.9
数据类型: Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128 | Float16 | Float32 | Float64
cdffun - 中心分布段的类型
"ecdf" (default) | 函数
中心分布段的类型,指定为"ecdf"或函数。
| 参数值 | 说明 |
|---|---|
| "ecdf" | 插值经验 cdf。 paretotails 使用 x 中的值作为经验 cdf 垂直步长的中点,并通过线性插值计算 x 中值之间的点的估计值。 |
| 函数 | 使用指定函数的插值估计。 paretotails 使用函数,该函数接受输入数据向量 x 并返回 cdf 值向量 p 和评估点向量 xi。 xi 中的值必须排序且不同,但不必等于 x 中的值。 paretotails 函数通过线性插值计算 xi 中值之间的点的 cdf 估计值。 |
paretotails 使用 cdffun 计算对应于 pl 和 pu 的分位数。
示例: "ecdf"
# 对象相关函数
| boundary | 帕累托分布边界 |
| cdf | 累积分布函数 |
| icdf | 逆累积分布函数 |
| lowerparams | 下帕累托尾部参数 |
| nsegments | 广义帕累托分布中的段数 |
| 概率密度函数 | |
| random | 随机数 |
| segment | 包含输入值的广义帕累托分布段 |
| upperparams | 上帕累托尾部参数 |
# 示例
使用经验分布创建 paretotails
生成一个样本数据集,并将具有帕累托尾部的分段分布拟合到数据中。 通过使用具有默认设置的 paretotails 指定中心的经验分布。
生成包含 100 个来自具有 3 个自由度的 t 分布的随机数的样本数据集。
using TyMath
using TyStatistics
using TyPlot
rng = MT19937ar(5489) # For reproducibility
t = trnd(rng,3,100,1);
通过将分段分布拟合到 t 创建一个 paretotails 对象。 使用下尾部和上部尾部累积概率指定尾部边界,以便拟合对象由数据集中间 80% 的经验分布和数据集下部和上部 10% 的 GPD 组成。
pd = paretotails(t,0.1,0.9)
pd =
具有 3 个段的分段分布
-Inf < x < -1.84875 (0 < p < 0.1): 下尾,GPD(0.183032,1.00347)
-1.84875 < x < 2.07662 (0.1 < p < 0.9): interpolated empirical cdf
2.07662 < x < Inf (0.9 < p < 1): 上尾,GPD(0.333239,1.19705)
对象显示的每一行显示每个段的摘要,包括 GPD 参数(形状和尺度参数)以及分位数和累积概率中的边界值。 使用对象函数 boundary、lowerparams 和 upperparams 返回这些值。
您可以使用 nsegments 函数返回段数,使用 segment 函数返回包含输入值的段。
您还可以使用分布函数 cdf、icdf、pdf 和 random 来评估分布并生成随机样本。
在同一图上绘制 t 分布的 cdf 和 paretotails 对象的 cdf。
figure()
x = LinRange(-5,5,100);
plot(x,tcdf(x,3),"r--")
hold("on")
plot(x,cdf(pd,x),"b-")
使用 boundary 找到 paretotails 对象的线段之间的边界点,并在图形上标记这些点。
p, q = boundary(pd);
plot(q,p,"bo")
legend(["t Distribution","Pareto Tails Object","Boundary Points","Location","best"])
hold("off")
