首页 文章

模拟6个特征的beta分布

提问于
浏览
-1

如何在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
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)以外的双峰分布 .

1 回答

  • 0

    请查看模拟结果 . 我使用 sample 函数,通过prob参数设置概率分布 . 对于B(0.5,0.5),您可以在 01 邻域调整 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
    

相关问题