上的均匀分布,所有,称为狄利克雷分布。通过设置上实现均匀分布,因为它会以恒定的比例因子缩小所有内容,因此保留相对区域。y1+y2+y3=1yi≥0(1,1,1)xi=(1−3×0.1)yi+0.1x1+x2+x3=0.7
Dirichlet 分布的值可以通过生成独立的 Gamma 变量并将它们除以它们的总和来获得。意味着这些 Gamma 变量中的每一个都必须具有 Gamma分布(这是一个指数分布)。(1,1,1)(1)
这是示例R代码:
n <- 1e3
alpha <- 1
x <- matrix(rgamma(n*3, alpha), ncol=3)
x <- x / rowSums(x) * 0.7 + 0.1
顺便说一句,生成原始坐标(在第三行)的另一种方法是均匀分布
x <- matrix(-log(runif(3*n)), ncol=3)
因为的分布,对于均匀,是指数的。因此,该方法不需要执行特殊的统计功能。−log(U)U
但是如何确认结果是正确的呢?一种方法是将单纯形旋转到平面中并绘制点。此R代码计算这样一个旋转矩阵,通过验证其叉积是恒等来确认它是一个旋转矩阵,并绘制点。
beta <- apply(contr.helmert(3), 2, function(y) y / sqrt(crossprod(y)))
crossprod(cbind(beta, 1/sqrt(3))) # Outputs the 3 x 3 identity matrix
z <- x %*% beta
plot(z)
他们看起来很统一。
