使用 SimMultiCorrData::nonnormvar1 生成变量

Generate variables using SimMultiCorrData::nonnormvar1

我想使用 SimMultiCorrData 中的 nonnormvar1 函数生成随机的非正态变量。这个函数本身工作得很好并输出一个连续变量:

    nonnormvar1(method = "Fleishman", means = 50, vars = 10,
        skews = 3, skurts = 14, n=100)

但是当我在自己的函数中 'mapply' nonnormvar1 时,我得到了数据列表的行作为我的输出:

    my_func <- function(sample_pairs, sig_pairs, nnorm_pairs) {               
      return(sapply(1:nrow(sample_pairs), function(i) {
      mapply(nonnormvar1, method = "Fleishman",           
      means = mu, vars = sig_pairs[i, ], 
      skews = nnorm_pairs[i,1], skurts = nnorm_pairs[i,2], 
      n = sample_pairs[i], seed = 123)       
      }))
    }

    samples <- matrix(c(rep(c(100, 100), 6), rep(c(50, 50), 6)),
              ncol = 2, byrow = TRUE)

    sigs <- matrix(c(rep(c(2, 2), 6), rep(c(35, 35), 6)),
           ncol = 2, byrow = TRUE)

    nnrom <- matrix(c(rep(c(0, 0), 4), rep(c(2, 4), 4), rep(c(1, 5), 4)), 
            ncol = 2, byrow = TRUE)


    my_func(samples, sigs, nnrom)

         [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]    [,10]   [,11]   [,12]  
     [1,] List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4  List,4 
     [2,] List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1  List,1 
     [3,] List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11 List,11

理想情况下,我想要 12 个包含两个变量的数据帧,每个数据帧我都可以计算出一个统计数据。我确定有一些明显的东西我想念但我没有看到它。

我在复制您的示例时遇到了一些问题。我必须为 mu 设置一个值并将样本截断到前四行,之后我的代码产生的结果与您的相似。

mu <- 0
samples <- samples[1:4,]

我建议将数据生成移到一个单独的函数中。另外,我认为您在这里不需要 mapply 函数。通过添加 $continuous_variable

获取数据部分 return continuous_variable 元素
getNNData <- function(i, sample_pairs, sig_pairs, nnorm_pairs) {
  nnData <- nonnormvar1(method = "Fleishman",           
                    means = mu, vars = sig_pairs[i, ], 
                    skews = nnorm_pairs[i,1], skurts = nnorm_pairs[i,2], 
                    n = sample_pairs[i], seed = 123)       
  return(nnData$continuous_variable)
}

将数据生成作为一个单独的函数还可以更轻松地探索从您的函数中 returned 的对象。

您现在可以在主函数中调用 getNNData 函数

my_func <- function(sample_pairs, sig_pairs, nnorm_pairs) {               
  sapply(1:nrow(sample_pairs), function(i) 
    getNNData(i, sample_pairs, sig_pairs, nnorm_pairs))
}

my_func(samples, sigs, nnrom)

希望这能让您更接近您的需求!