Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 生成一个包含三列的数据帧,每行的总和为常量_R_Data Generation - Fatal编程技术网

R 生成一个包含三列的数据帧,每行的总和为常量

R 生成一个包含三列的数据帧,每行的总和为常量,r,data-generation,R,Data Generation,我想生成一个大数据帧(100000行和3列),它有三列(a、B和C) 此数据帧满足两个条件: 在每行中,A+B+C=1 所有A都有三角形分布(最小=0.2,模=0.3,最大=0.4),所有B都有三角形分布(最小=0.3,模=0.4,最大=0.5),所有C都有三角形分布(最小=0.1,模=0.3,最大=0.5) 我不知道如何生成这种数据集 非常感谢您提前提出的建议 Songchao我不确定这是否有效,因为我不确定转换是否会扼杀发行版,但请尝试以下方法: install.packages("tria

我想生成一个大数据帧(100000行和3列),它有三列(a、B和C)

此数据帧满足两个条件:

  • 在每行中,
    A+B+C=1
  • 所有A都有三角形分布(最小=0.2,模=0.3,最大=0.4),所有B都有三角形分布(最小=0.3,模=0.4,最大=0.5),所有C都有三角形分布(最小=0.1,模=0.3,最大=0.5) 我不知道如何生成这种数据集

    非常感谢您提前提出的建议


    Songchao

    我不确定这是否有效,因为我不确定转换是否会扼杀发行版,但请尝试以下方法:

    install.packages("triangle") #if not already present
    library(triangle)
    
    a <- rtriangle(10, a = .2, b = .4)
    b <- rtriangle(10, a = .3, b = .5)
    c <- rtriangle(10, a = .1, b = .5)
    
    m <- cbind(a, b, c)
    test <- sweep(m, 1, rowSums(m), FUN = "/") #divide all rows by their rowSums
    
    > test
                  a         b         c
     [1,] 0.3237202 0.4034106 0.2728692
     [2,] 0.2419613 0.3821729 0.3758658
     [3,] 0.2476927 0.3721925 0.3801149
     [4,] 0.2983462 0.4254064 0.2762474
     [5,] 0.3427140 0.4830743 0.1742117
     [6,] 0.2456610 0.3306648 0.4236742
     [7,] 0.3189454 0.4148087 0.2662459
     [8,] 0.3400111 0.3770924 0.2828965
     [9,] 0.3142197 0.3807667 0.3050136
    [10,] 0.3221066 0.4222530 0.2556405
    > rowSums(test)
     [1] 1 1 1 1 1 1 1 1 1 1
    
    install.packages(“三角形”)#如果尚未出现
    图书馆(三角形)
    
    a
    N请添加您迄今为止创建的任何(部分)解决方案尝试。考虑到条件1,您可以通过按行划分每个元素来规范化它。我想知道,是否真的有可能同时具有所有4个条件?实际上,我还不清楚是否可能同时具有所有4个条件。出于好奇,
    C是否仅在这种特殊情况下。@r.user.05apr请添加参考/解释?谢谢。我以前也尝试过这个想法,不幸的是,它没有满足C的分布。好吧,如果你期望所有4个条件都满足,那么建议的解决方案应该是可行的。但是(如果我计算正确的话)这是不可能的,因为理论上计算1-A-B(A,B独立)的方差是0.06/18,然而,参数为0.1,0.3,0.5的C的方差是0.12/18。感谢你的建议,我以前尝试过(也在函数rtriangle()中定义了mod)但这种转变改变了分布,这是不幸的。至少概括一下你已经做过的尝试可能会很有成效。这样,你问题的答案更有可能包含新的方法。是的,你是对的。我应该添加我以前的尝试。无论如何,非常感谢你所有的建议。
    
    N <- 100000
    
    library(triangle)
    
    A <- rtriangle(N, 0.2, 0.4, 0.3)
    B <- rtriangle(N, 0.3, 0.5, 0.4)
    C <- 1 - A - B
    
    d = data.frame(A, B, C)
    summary(d)
    
    nr <- 100000
    
    u1 <- runif(nr)
    u2 <- runif(nr)
    u3 <- (2 - u1 - u2) / 2
    
    U <- cbind(u1, u2, u3)
    
    # shuffle, because I am not sure about the tails of u3
    for (i in (1:nrow(U))) {
      U[i, ] <- U[i, sample(1:3)]
    }
    
    t1 <- qtriangle(U[, 1], 0.2, 0.4, 0.3)
    t2 <- qtriangle(U[, 2], 0.3, 0.5, 0.4)
    t3 <- qtriangle(U[, 3], 0.1, 0.5, 0.3)
    
    d <- cbind(t1, t2, t3)
    summary(d)
    cor(d)