我想在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)
}
答案 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次并存储结果(只要未重置种子,它们都会有所不同),但效率要低得多。)