R 6个性状的β分布模拟
我如何在R中为1000个项目(行)生成一个1和0的矩阵,其中每个项目只能为6个可能性(列)中的一个特征1,特征a、B、C、D、E和F例如R 6个性状的β分布模拟,r,statistics,simulation,probability-theory,probability-distribution,R,Statistics,Simulation,Probability Theory,Probability Distribution,我如何在R中为1000个项目(行)生成一个1和0的矩阵,其中每个项目只能为6个可能性(列)中的一个特征1,特征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
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),它们的密度概率遵循β(3,7)分布
我的目标是生成一组类似的矩阵,每个矩阵表示不同的贝塔分布,例如(7,3)、(2,8)、(8,2)、(3,3),以便它们可以共同覆盖广泛的贝塔分布,如有可能,包括(0.5,0.5)以外的双峰分布 请查看模拟结果。我使用了通过prob参数设置概率分布的
sample
函数。对于B(0.5,0.5),可以在0
和1
邻域处调整x
向量以排除无穷大:
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
set.seed(123)
xsample(c(rep(0,5),1),6)
我如何编辑它以确保生成1000个项目时,特征遵循beta(8,2)分布?beta是一个连续分布,但您似乎正在生成一个离散分布。你到底是如何在两者之间进行翻译的?贝塔分布之后到底应该有什么值?我应该说是广泛的贝塔分布。遵循这个在线计算器:对于Beta(7,3):A是(0,0),B是(0.2,0.01032192),C是(0.4,0.37158912),D是(0.6,1.88116992),E是(0.8,2.64241152),F是(0,0);对于β(1,1):A是(0,1),B(0.2,1),C(0.4,1),D(0.6,1),E(0.8,1),F(0,1);对于β(0.5,0.5):A为(0100),B为(0.2,0.795774716),C为(0.4,0.649747334),D为(0.6,0.649747334),E为(0.8,0.7957747155),F为(0100);对于β(3,3):A为(0,0),B为(0.2,0.768),C为(0.4,1.728),D为(0.6,1.728),E为(0.8,0.768),F为(0,1);