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 的对数均匀分布,则 为在 之间的均匀分布。

# 另请参阅

LoguniformDistribution