R 具有和单位和等式约束的正权重抽样
假设我有一个正权重向量R 具有和单位和等式约束的正权重抽样,r,random,dirichlet,R,Random,Dirichlet,假设我有一个正权重向量a=(a1,a2,a3,a4),这样a2=a3和a1+a2+a3+a4=1。有没有办法用R对这种重量进行取样?我试着考虑使用狄里克莱分布,但它并没有给出强制两个变量相等的机制 要在整个集合中均匀采样{(a1,a2,a3,a4 | a2=a3,a1+a2+a3+a4=1,a1>0,a2>0,a3>0,a4>0},我首先对a2的值进行采样(该值等于a3)要做到这一点,我们需要知道这个值的分布。如果a2=a3=r,那么我们有a1+a4=1-2r;对于正a1和a4,有一段长度(1-
a=(a1,a2,a3,a4)
,这样a2=a3
和a1+a2+a3+a4=1
。有没有办法用R对这种重量进行取样?我试着考虑使用狄里克莱分布,但它并没有给出强制两个变量相等的机制 要在整个集合中均匀采样{(a1,a2,a3,a4 | a2=a3,a1+a2+a3+a4=1,a1>0,a2>0,a3>0,a4>0}
,我首先对a2
的值进行采样(该值等于a3
)要做到这一点,我们需要知道这个值的分布。如果a2=a3=r
,那么我们有a1+a4=1-2r
;对于正a1和a4,有一段长度(1-2k)*sqrt(2)的线段
包含a1
和a4
的所有可行值。积分后,a2
小于等于k
的概率为4(k-k^2)
。更详细地说:
Prob (a2 <= k) = Integral(0 to k) (1-2r)*sqrt(2) dr / Integral(0 to 0.5) (1-2r)*sqrt(2) dr
= ((k-k^2)*sqrt(2)) / (sqrt(2)/4)
= 4k - 4k^2
在R中,我们可以对a2
的1000个值进行采样:
set.seed(144)
a2 <- 0.5 * (1 - sqrt(1 - runif(1000)))
a3 <- a2
指定了a1
、a2
和a3
,对于a4
,只有一个可能的值:
a4 <- 1 - a1 - a2 - a3
以下是a1
值的分布(注意,对称性与a4
值的分布相同)。因为我们在[0,1-2*a2]
范围内统一选择a1
,所以较低的值比较高的值更常见:
以下是a2
值的分布(根据定义,这与a3
值的分布相同)。分布的形状与a1
的形状相似,但最大值为0.5:
我试着考虑使用Dirichlet分布
对我来说,它看起来像狄里克莱分布
但它并没有给出强制两个变量相等的机制
但你不必这样,你实际上有三个来自狄里克莱分布的变量-A,B,C,都>=0,均匀分布的U(0,1),所以A+B+C=1
采样(A、B、C)后,您只需分配
a1 = A;
a2 = B/2.0;
a3 = B/2.0;
a4 = C;
请看一下如何进行示例(用Python)
谢谢@SeverinPapadeux。这是一个很好的观察结果。我在StackExchange中向您提出了一个疑问,因为这不是一个与代码相关的问题。您能否编辑您的答案,以说明为什么这样对空间进行均匀采样
{(a1,a2,a3,a4 | a2=a3,a1+a2+a3+a4=1,a1>0,a2>0,a3>0,a4>0}
?我已经根据我的答案和你的答案计算了随机变量,它们具有不同的分布(例如,变量对之间的相关性不同)@josilber我已经根据我的答案和你的答案计算了随机变量,它们有不同的分布。它们可能是。我相信我们有一个n=3的狄里克莱分布的例子。狄里克莱分布的性质是x_I在[0…1]之内,和(x_I)=1,但也由\alpha_i参数化。最简单的情况是,在我的python代码中,所有\alpha_i=1。我懒得检查,但如果您使用不同的\alpha_i(\alpha_i=0.5?)构建Dirichlet分布,我不会感到惊讶。在这种情况下,您的解决方案是一个令人满意的答案(和我的一样)我相信我们有一个n=3迪里克莱分布的例子。
你能说说为什么你会相信吗?我不知道这个集合是否是迪里克莱分布(我不清楚为什么会是这样),但我很确定它不是一个Dirichlet分布,所有变量的alpha_I=1,正如你目前在回答中所建议的那样。你能提供一些数学推理来解释为什么你认为它是Dirichlet分布的吗?你假设a2
的pdf与包含所有可能va的线段长度成比例a1
和a4
的值,即(1-2a_2)sqrt(2)
。正确吗?随着线段长度的增加,a_2的值应该减小。
a4 <- 1 - a1 - a2 - a3
head(cbind(a1, a2, a2, a4))
# a1 a2 a2 a4
# [1,] 0.83455239 0.01251016 0.01251016 0.14042729
# [2,] 0.02744599 0.22932773 0.22932773 0.51389856
# [3,] 0.45835472 0.23860119 0.23860119 0.06444291
# [4,] 0.36843649 0.14679703 0.14679703 0.33796946
# [5,] 0.35109881 0.08702039 0.08702039 0.47486041
# [6,] 0.02916818 0.19942616 0.19942616 0.57197949
a1 = A;
a2 = B/2.0;
a3 = B/2.0;
a4 = C;