我正在尝试生成多变量数据,两个结果(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)时。希望有人能提出更好的方法来完成这项任务。
答案 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