Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 具有和单位和等式约束的正权重抽样_R_Random_Dirichlet - Fatal编程技术网

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;