模拟生成平衡的纵向数据

时间:2014-03-14 17:04:55

标签: r

我想在R中做一些模拟,我已经编写了代码,但我没有取得任何进展。如果有人能提供帮助,我将不胜感激。我想生成具有不同观测值的三个时间点的纵向数据,以便对于任何1000次模拟,它产生不同的观测值。请注意,数据应该是平衡的。每个时间点的TRT和安慰剂数量相等。我真的很挣扎。任何帮助将不胜感激。以下是代码;

ns=20
x1=rnorm(ns,0,1)
x2=rnorm(ns,5,5)
x3=rnorm(ns,10,5)
U=c(x1,x2,x3)
ans=matrix(rep(0,200),nrow=100)
for(k in 1:100)
{   simdata=data.frame(CD=U,
                       Time=factor(rep(c(1,2,3),each=ns)),
                       treatment=sample(rep(c('Trt','placebo'),ns/2)))
ans[k,]=table(simdata$treatment)
}

1 个答案:

答案 0 :(得分:0)

这样的东西? (您可以根据需要进行扩展)

### no. simulations (2 per timepoint)
ns <- 2
set.seed(1)
df1 <- data.frame(
### ns*2 as each time has both Tx and plac~ elements
    time = rep(seq(3), each=ns*2),
### ns*3 as 3x time points
    tx = rep(c("tx", "pl"), ns*3),
### ns*2 as each simulation performed for Tx and plac~
    sim = c(rnorm(ns*2, 0, 1), rnorm(ns*2, 5, 5), rnorm(ns*2, 10, 5))
    )

,并提供:

   time tx        sim
1     1 tx -0.6264538
2     1 pl  0.1836433
3     1 tx -0.8356286
4     1 pl  1.5952808
5     2 tx  6.6475389
6     2 pl  0.8976581
7     2 tx  7.4371453
8     2 pl  8.6916235
9     3 tx 12.8789068
10    3 pl  8.4730581
11    3 tx 17.5589058
12    3 pl 11.9492162

然后您可以根据需要进行分组,例如

df1[df1$time==1, ]

修改如果您愿意,可以对data.frame进行排序/订购,以{/ 1}}和tx分隔

plac

我认为这里不需要循环;你可以扩大号码。样本df1[order(df1$tx), ] ;使用ns,您可以获得随机 no.s任何样本量。 (或者您可以重复生成rnorm 1000次并存储结果(只要未重置种子,它们都会有所不同),但效率要低得多。)