用不同的方法生成多变量数据

时间:2014-10-03 03:52:24

标签: r

我正在尝试生成多变量数据,两个结果(Y1和Y2)与具有3组(对照组和2个治疗组)的研究相关(具有给定的协方差),每组具有其自身矢量的手段。然后,我想循环几个研究(但我不知道该怎么做,因为我对R有一个非常基本的知识)。有人可以帮我改进下面提到的代码吗?

library(mvtnorm)
set.seed(1128)
sigma <-matrix(c(9,7.2,7.2,9),2)

(dat_Yc <-rmvnorm(n=1, mean=c(10,10),sigma=sigma, method="chol"))
(dat_Yt1 <-rmvnorm(n=1, mean=c(15,15),sigma=sigma, method="chol"))
(dat_Yt2 <-rmvnorm(n=1, mean=c(20,20),sigma=sigma, method="chol"))

study1 <- rbind(dat_Yc,dat_Yt1,dat_Yt2); study1

我知道上面的代码非常简单和耗时,特别是当我想将它循环到k个研究(例如,k = 20或40)时。希望有人能提出更好的方法来完成这项任务。

2 个答案:

答案 0 :(得分:0)

这是对MrFlick问题的回应。显然我不能对他的问题发表评论,所以我在这里写了我的回复。遗憾。

我更感兴趣的是学习如何通过大量研究(例如20或40项研究)重复生成数据的过程,然后将这些数据结合起来进行荟萃分析。我不关心时间或不关心(或者考虑到我刚刚开始学习R,我可能没有真正理解你的问题)。由于我自学了如何进行基本模拟,我想知道如何使代码更有效率。

答案 1 :(得分:0)

您可以将值存储在list中。以后可以用它来检索单个结果及其组件。希望这能回答你的问题。

library(mvtnorm)
set.seed(1128)
sigma <-matrix(c(9,7.2,7.2,9),2)
mean_c = c(10,10)
mean_t1 = c(15,15)
mean_t2 = c(20,20)
num.study = 20
study = vector('list', num.study)

for (i in seq_len(num.study)) {
  study[[i]] = list(dat_Yc = rmvnorm(1, mean_c, sigma),
                    dat_Yt1 = rmvnorm(1, mean_t1, sigma),
                    dat_Yt2 = rmvnorm(1, mean_t2, sigma))
}

## access the control group from 7th study
study[[7]]$dat_Yc