根据R中的特定规则进行数据模拟

根据R中的特定规则进行数据模拟,r,R,我需要帮助模拟数据集 它应该模拟信号检测理论任务中的所有可能结果(参与者接受试验,并决定他们是否检测到给定信号)。现在,我需要一个包含所有可能值的数据集,用于不同数量的试验 比如说,有6次试验,5次出现信号,5次没有信号。我只对正确检测(点击)和错误报警(I类错误)感兴趣。参与者可以正确检测1(我不需要0)到5之间的错误警报,并发出相同数量的错误警报。对于所有可能的组合,这将是包含两个变量的数据集,每个变量有5^2个案例。让事情变得更复杂的是,即使是审判的次数也是可变的。信号和非信号试验的数量可

我需要帮助模拟数据集

它应该模拟信号检测理论任务中的所有可能结果(参与者接受试验,并决定他们是否检测到给定信号)。现在,我需要一个包含所有可能值的数据集,用于不同数量的试验

比如说,有6次试验,5次出现信号,5次没有信号。我只对正确检测(点击)和错误报警(I类错误)感兴趣。参与者可以正确检测1(我不需要0)到5之间的错误警报,并发出相同数量的错误警报。对于所有可能的组合,这将是包含两个变量的数据集,每个变量有5^2个案例。让事情变得更复杂的是,即使是审判的次数也是可变的。信号和非信号试验的数量可以在1到20之间变化,但试验总数不能少于3次(1次S试验和2次非S试验,或者相反)。对于每种可能的试验组合,都有一组可能的命中和假警报组合

我需要的是一个包含5个变量的数据集(总N、N个S试验、N个非S试验、N个命中和N个假警报),以及所有可能的值

示例 以下是总N为4的所有可能数据。请注意,信号+噪声=N_总数,N_命中顺序(1:信号)和N_FA顺序(1:噪声)

我是一个新手,所以任何帮助都将不胜感激


希望描述清楚。

我创建了一个函数,它使用试验次数作为参数

myfunc <- function(n) {

  # create a data frame of all combinations
  grid <- expand.grid(rep(list(seq_len(n - 1)), 4))

  # remove invalid combinations (keep valid ones)
  grid <- grid[grid[3] <= grid[1] &         # number of hits <= number of signals
               grid[4] <= grid[2] &         # false alarms <= noise
               (grid[1] + grid[2]) == n , ] # signal and noise sum to total n

  # remove signal and noise > 20
  grid <- grid[!rowSums(grid[1:2] > 20), ]

  # sort rows
  grid <- grid[order(grid[1], grid[3], grid[4]), ]

  # add total number of trials
  res <- cbind(n, grid)

  # remove row names, add column names and return the object
  return(setNames("rownames<-"(res, NULL),
                  c("N_total", "Signal", "Noise", "N_Hit", "N_FA"))) 


}
如何将此函数应用于值3-40:

lapply(3:40, myfunc)

这将返回一个数据帧列表。

描述让我感到困惑。如果您提供了一些您试图生成的数据的样本行,那么就更容易理解了。这听起来像是一个“所有排列”的问题,但是如果没有关于数据约束和结果数据结构的更多细节,我不确定我们是否可以帮助您。请更新您的问题,使其更加明确。谢谢您的评论。这可能更清楚一点吗?是的。你会注意到它也引出了一个答案,所以你知道你的编辑是有效的。那太棒了,谢谢!我还在想你在那里做了什么。如果我可以再问两件事:有没有办法将信号和噪声的最大值设置为20,这样当我执行myfunc(40)时,它只返回signal和noise@user2062339的值,为什么要用3-40的值运行函数,尽管最大值应该是20?所以我设法限制了最大值,但我仍然不知道如何一次性运行myfunc(3到40)…很抱歉没有充分解释我自己。信号和噪声试验的数量应该限制在20(我已经这样做了),而不是总数N。这意味着myfunc(40)在信号和噪声列中只有20的值。这有意义吗?@user2062339信号和噪声试验的总和怎么可能低于试验的绝对数量?
> myfunc(4)
   N_total Signal Noise N_Hit N_FA
1        4      1     3     1    1
2        4      1     3     1    2
3        4      1     3     1    3
4        4      2     2     1    1
5        4      2     2     1    2
6        4      2     2     2    1
7        4      2     2     2    2
8        4      3     1     1    1
9        4      3     1     2    1
10       4      3     1     3    1
lapply(3:40, myfunc)