模拟6个特征的Beta分布

时间:2018-07-26 13:33:04

标签: r statistics simulation probability-theory probability-distribution

我如何针对1000个项目(行)在R中生成1和0的矩阵,其中对于单个特征,每个项只能是1个,在6个可能的(列)特征A,B,C,D中, E和F例如

item A  B   C   D   E   F
1    1  0   0   0   0   0
2    0  1   0   0   0   0
3    1  0   0   0   0   0
4    0  0   0   0   1   0
5    0  0   0   0   1   0
6    0  0   1   0   0   0
7    0  0   0   1   0   0
8    0  1   0   0   0   0
9    1  0   0   0   0   0
10   0  0   0   0   1   0

因此,当绘制这6个性状(在x轴上A = 0,B = 0.2,C = 0.4,D = 0.6,E = 0.8,F = 1)时,它们的密度概率遵循beta(3,7 )分配?

我的目标是生成一组相似的矩阵,每个矩阵表示不同的beta分布,例如(7,3),(2,8),(8,2),(3,3),以便它们可以共同覆盖它们的范围很广,如果可能的话,还包括(0.5,0.5)以外的双峰分布。

1 个答案:

答案 0 :(得分:0)

请查看模拟结果。我使用sample函数,并通过概率参数设置了概率分布。至于 B(0.5,0.5),您可以调整x0邻域中的1向量以排除无穷大:

set.seed(123)

x <- c(0.0, 0.2, 0.4, 0.6, 0.8, 1)
# for beta w/7 & 3 shapes
y <- dbeta(x, 7, 3)

# sample with probabilities y
samp <- data.frame(id = sample(1:6, 1000, y, replace = TRUE))

# prepare a diagonal matrix
m <- data.frame(diag(6), id = 1:6)

# merge to meet the condition only one '1' in each row
u <- merge(samp, m)

# remove id and adding letter names
u <- u[, -1]
names(u) <- LETTERS[1:6]

# validation 
# the result by simulation
colSums(u) / 1000
# A     B     C     D     E     F 
# 0.000 0.001 0.070 0.385 0.544 0.000 

# normalized beta distribution by built-in function
print(setNames(dbeta(x, 7, 3) / sum(dbeta(x, 7, 3)), LETTERS[1:6]), digits = 1)
# A     B     C     D     E     F 
# 0.000 0.002 0.076 0.383 0.539 0.000