r - 模拟 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) 以外的双峰分布。
解决方案
请看模拟结果。我使用sample
了通过 prob 参数设置概率分布的函数。至于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
推荐阅读
- typescript - 如何将动态训练作业名称添加到在 CDK 描述的 AWS StateMachine 中执行的 SageMaker 训练作业?
- javascript - ReactJS 和 Redux:在页面之间导航时如何重置存储数据?
- css - 将内容居中并使其位置可调
- python - 如果 df 被打乱,将 pandas df 加载到 pytorch 数据集加载器会导致“nan”训练损失
- mysql - 如何根据结果的相等性对 MySql 查询结果进行排序?
- c# - 来自委托与 lambda 的事件
- codenameone - 文件系统存储问题
- tensorflow - 在使用 crepe 模型的 ml5 音高检测中,如何检测 ±2kHz 以上的音高
- out-of-memory - 用于 GPU 加速的混合 MPI/OpenMP 中的“内存不足”
- c# - Razor 引擎字符串插值