Генерация переменных с помощью SimMultiCorrData :: nonnormvar1 - PullRequest
0 голосов
/ 17 октября 2018

Я хотел бы генерировать случайные, ненормальные переменные, используя функцию nonnormvar1 из SimMultiCorrData.Эта функция сама по себе прекрасно работает и выдает непрерывную переменную:

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

Но когда я «отображаю» 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 кадров данных по двум переменным, для каждого из которых я могу рассчитать статистику.Я уверен, что есть что-то очевидное, что мне не хватает, но я этого не вижу.

1 Ответ

0 голосов
/ 17 октября 2018

У меня были проблемы с копированием вашего примера.Мне пришлось установить значение для mu и усечь сэмплы до первых четырех строк, после этого мой код дал результаты, аналогичные вашим.

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

Я бы предложил перенести генерацию данных в отдельную функцию.Кроме того, я не думаю, что вам нужна здесь функция mapply.Чтобы добраться до части данных, верните элемент непрерывный_вариаб, добавив $ непрерывный_вариант

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)
}

Наличие генерации данных в качестве отдельной функции также облегчает исследование объекта, возвращаемого из вашей функции.

Теперь вы можете вызывать функцию 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)

Надеюсь, это приблизит вас к тому, что вам нужно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...