在R中创建条件二项式随机选择

时间:2018-01-17 19:21:40

标签: r random distribution

我有一个简单的问题。这是我对矢量x1的函数:
    x1 <- rbinom (100, 1, .5)

我还需要另外3个向量,x2,x3和x4,它们也是这样的:
    x2 <- rbinom (100, 1, .5)
    x3 <- rbinom (100, 1, .5)
    x4 <- rbinom (100, 1, .5)

然而,这给了我随机分布。我想要的是拥有这4个单独的向量,但它们相互依赖。我需要得到这样的东西:

x1: 1 0 0 0 1 0 1 0 1 0
x2: 0 0 0 1 0 0 0 0 0 1
x3: 0 1 0 0 0 0 0 1 0 0
x4: 0 0 1 0 0 1 0 0 0 0 

换句话说,如果第一个点上的x1中有1个,则x1,x2和x3中的第一个点中需要有0。

非常感谢!

2 个答案:

答案 0 :(得分:1)

坦率地说,看起来像Multinomial distribution,a.k.a。多次投掷K大小的骰子。在你的情况下,K等于4.多项式是二项式的自然延伸

从多项式中采样有 R 函数,例如10个概率相等的样本

set.seed(12345)
prob <- c(.25, .25, .25, .25)
q <- rmultinom(10, 1, prob)
print(q)

要计算密度函数,您可以使用dmultinom。有关详细信息,请参阅https://stat.ethz.ch/R-manual/R-devel/library/stats/html/Multinom.html

输出

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    1    1    0    0    1    0    0    0     1
[2,]    1    0    0    0    1    0    0    0    0     0
[3,]    0    0    0    0    0    0    1    0    0     0
[4,]    0    0    0    1    0    0    0    1    1     0

还有一件,概率检查,应该接近1/4

set.seed(12345)
q <- rmultinom(100000, 1, prob)
rowMeans(q)

产生

[1] 0.25075 0.24964 0.24871 0.25090

答案 1 :(得分:0)

所以你想拥有4个互斥选项。然后从中直接进行采样,然后您可以在以后将它们变成基本上为虚拟变量。

你可以做到

x <- sample(1:4, 100, replace=T)
x1 <- (x==1)+0
x2 <- (x==2)+0
x3 <- (x==3)+0
x4 <- (x==4)+0

如果你想在每次抽奖中获得1-4的概率相同,这是有效的。这与每列的rbinom(prob=.5)不同。