我如何针对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)以外的双峰分布。
答案 0 :(得分:0)
请查看模拟结果。我使用sample
函数,并通过概率参数设置了概率分布。至于 B(0.5,0.5),您可以调整x
和0
邻域中的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