【问题标题】:Simulation to generate balanced longitudinal data模拟生成平衡的纵向数据
【发布时间】:2014-03-14 17:04:54
【问题描述】:

我想在 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)
}

【问题讨论】:

  • 我试图清理你的代码,但我不确定我的解释是否正确。随意,纠正。
  • 你需要更清楚地描述你想如何模拟。如果你这样做,编写模拟应该非常简单。在学校,我被教导在写代码之前画出算法的流程图。我认为这会对你有所帮助。
  • 罗兰非常感谢。我想包含一个代码,它可以进行大约 1000 次模拟,这样每次模拟都会给出不同的观察结果。你知道这是怎么做的吗?
  • 现在创建数据框后,我想进行 1000 次模拟,以便每次模拟对时间 1 给出不同的观察,对时间 2 给出不同的观察,对时间 3 给出不同的观察。我还想写一个代码这样我只能在时间点 1 调用观察结果

标签: r


【解决方案1】:

这样的? (您可以根据需要扩大规模)

### 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 进行排序/排序,使txplac

分隔
df1[order(df1$tx), ]

我认为这里不需要循环;你可以扩大编号。样品数量ns;使用rnorm,您将获得任何样本大小的随机编号。 (或者您可以重复生成data.frame 1000 次并存储结果(只要不重置种子,它们都会有所不同),但这效率要低得多)。

【讨论】:

  • 谢谢达迪斯科。我看到我现在可以只调用时间点的观察结果,但我不希望 tx 和 plac 像您在代码中那样相互跟踪。现在我特别需要代码中的一个循环,这样对于 1000 次模拟,我的观察结果对于所有时间点都是不同的。
猜你喜欢
  • 2021-03-26
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 2021-09-30
  • 1970-01-01
相关资源
最近更新 更多