首页 > 解决方案 > 模拟 6 个特征的 beta 分布

问题描述

如何在 R 中为 1000 个项目(行)生成 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) 以外的双峰分布。

标签: rstatisticssimulationprobability-theoryprobability-distribution

解决方案


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

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 

推荐阅读