我想生成三个随机数,然后将它们标准化,使它们加起来为 1。
我想重复这个过程,这样从长远来看,每个数字的模式都是 0.33。
我想生成三个随机数,然后将它们标准化,使它们加起来为 1。
我想重复这个过程,这样从长远来看,每个数字的模式都是 0.33。
该模式有点像红鲱鱼。这是一个非常简单的解决方案,可以避免精确定义模式的需要。我很惊讶它没有更早提出。通过从对称分布中抽取样本并适当地缩放它们,可以很容易地满足对模式的约束:
在哪里是一个对称分布(因此均值、众数和中位数相同)并且被选择为使得低于 0 的概率质量为 0。例如,选择成为:
a1 <- matrix(rbeta(100*3,2,2), nc=3)
a1 <- sweep(a1, 1, rowSums(a1), FUN="/")
colMeans(a1)
# [1] 0.3342165 0.3341534 0.3316301
产生所需的解决方案
sum(colMeans(a1))
# [1] 1
如果 X1、X2 和 X3 是 iid Gamma(a),则 {X1,X2,X3}/(X1+X2+X3) 将是 Dirichlet(a,a,a)。
如果 a>1,则模式将为 1/3。对于较大的 a 值,峰值将更加尖锐。
这是一个近似的数字答案。它可以很容易地变得更精确。
让, 在哪里是具有梯形密度的独立同分布:
将具有相同的边际。
给定一个数字“a”,我使用 Mathematica 来获取 cdf:
F[u_] = Assuming[0 < u < 1, Simplify@Integrate[
Boole[x < u(x+y+z)] f[x] f[y] f[z], {x,0,1},{y,0,1},{z,0,1}]
区分两次,将结果设置为零,并求解得到的 7 次多项式给出模式。我使用二进制搜索来细化“a”的值。我一直使用精确的算术,直到求解多项式。
a mode
1 .318182
7/8 .322065
13/16 .327099
25/32 .330465
49/64 .332373
97/128 .333376 <-- close enough?
3/4 .334221
1/2 .353738
0 .359187
分析:给定一个联合pdf,, 和 ,如果他们是独立同分布的,那么, 在哪里. 你必须找到pdf
数值:从您的首选分布中抽取三个随机数,将它们标准化并将它们保存在- 行一个 Nx3 矩阵。重复此过程 N 次并绘制每列的频率。
解析解是首选,而不是试图从 R 中的随机样本中证明它,这只是一个数值近似。