2026a
# 对数均匀分布
# 概述
对数均匀分布(也称为倒数分布)是一个两参数分布。该分布的概率密度函数在上下界之间(其支集的上下确界)与变量值成比例。
指定参数值(makedist) 构造概率分布对象 LoguniformDistribution。然后,使用对象函数计算分布、生成随机数等。
# 参数
对数均匀分布使用以下参数。
| 参数 | 描述 | 范围 |
|---|---|---|
| a | 下限 | 0 < a < b |
| b | 上限 | a < b < ∞ |
# 概率密度函数
对数均匀分布的概率密度函数 (pdf) 为:
示例请参见计算与绘制对数均匀分布 pdf。
# 累积分布函数
对数均匀分布的累积分布函数(cdf)为:
这里得到的结果 p 为来自具有参数 a 和 b 的对数均匀分布的单个样本位于区间 [a,x] 的概率。
示例请参见计算对数均匀分布 cdf。
# 描述性统计量
对数均匀分布的均值为
对数均匀分布的方差为
# 示例
计算与绘制对数均匀分布
构造具有不同参数的三个对数均匀分布对象。
using TyStatistics
using TyPlot
pd1 = makedist("Loguniform") # 具有默认参数 a = 1, b = 4 的对数均匀分布
pd1 = Loguniform{Float64}(Lower=1.0, Upper=4.0, Truncation=Float64[])
pd2 = makedist("Loguniform",Lower=1,Upper=5) # a = 1, b = 5 的对数均匀分布
pd3 = makedist("Loguniform",Lower=2,Upper=6) # a = 2, b = 6 的对数均匀分布
计算这三个对数均匀分布的 pdf。
x = 0:0.01:6
pdf1 = pdf(pd1,x)
pdf2 = pdf(pd2,x)
pdf3 = pdf(pd3,x)
在同一个轴上绘制这些 pdf。
figure()
plot(x,pdf1,"r",linewidth=2)
hold("on")
plot(x,pdf2,"k:",linewidth=2)
plot(x,pdf3,"b-.",linewidth=2)
legend(["a = 1, b = 4","a = 1, b = 5","a = 2, b = 6"],loc="northwest")
xlabel("Observation")
ylabel("Probability Density")
hold("off")
概率密度在 a 与 b 之间与变量值成比例,因此 pdf 值随着变量值增加而降低。
计算对数均匀分布
构造具有不同参数的三个对数均匀分布对象。
using TyStatistics
using TyPlot
pd1 = makedist("Loguniform") # 具有默认参数 a = 1, b = 4 的对数均匀分布
pd2 = makedist("Loguniform",Lower=1,Upper=5) # a = 1, b = 5 的对数均匀分布
pd3 = makedist("Loguniform",Lower=2,Upper=6) # a = 2, b = 6 的对数均匀分布
计算三个对数均匀分布的 cdf。
x = 1:0.01:6
cdf1 = cdf(pd1,x)
cdf2 = cdf(pd2,x)
cdf3 = cdf(pd3,x)
在同一个轴上绘制这些 cdf。
figure()
plot(x,cdf1,"r",linewidth=2)
hold("on")
plot(x,cdf2,"k:",linewidth=2)
plot(x,cdf3,"b-.",linewidth=2)
legend(["a = 1, b = 4","a = 1, b = 5","a = 2, b = 6"],loc="northwest")
xlabel("Observation")
ylabel("Cumulative Probability")
hold("off")

将标准均匀分布样本转为对数均匀分布样本
构造 30 个符合标准均匀分布的样本。
using TyStatistics
using TyMath
rng = MT19937ar(5489)
pd = makedist("Uniform",0,1)
p = random(rng,pd,30)
计算来自于 p 中的标准均匀分布值的、支集为 (2,7) 的对数均匀分布样本。
logunifval = icdf("Loguniform",p,2,7)
另外也可以先创建一个支集为 (2,7) 的对数均匀分布对象,然后再在 icdf 中使用它。
logunifpd = makedist("Loguniform",Lower=2,Upper=7)
logunifpd = Loguniform{Float64}(Lower=2.0, Upper=7.0, Truncation=Float64[])
logunifval2 = icdf(logunifpd,p)
这两种方式计算的值是相同的。
all(iszero,logunifval-logunifval2)
ans = true
生成来自对数均匀分布的随机数
为了生成来自对数均匀分布的随机数,必须首先构造一个对数均匀分布对象。构造一个支集为 (3,10) 的对数均匀分布对象。
using TyStatistics
using TyMath
pd = makedist("Loguniform",3,10)
pd = Loguniform{Float64}(Lower=3.0, Upper=10.0, Truncation=Float64[])
构造来自对数均匀分布的 3x4 的随机数矩阵。
rng = MT19937ar(5489)
R = random(rng,pd,3,4)
R = 3×4 Matrix{Float64}:
8.00061 9.00961 4.1951 9.58608
8.92772 6.42345 5.79527 3.62688
3.49559 3.37383 9.50126 9.65214
# 相关分布
均匀分布 —— 连续均匀分布具有参数 a(下界) 和 b(上界)。如果 X 是一个具有支集 a 和 b 的对数均匀分布,则