基础
使用simstudy包
进行模拟有两个基本步骤。首先,用户在外部csv文件中或通过一组重复的定义语句在内部定义数据集的数据元素。其次,用户使用这些定义生成数据。
数据生成可以像横截面设计(cross-sectional design)或前瞻性队列设计(prospective cohort design)一样简单,也可以稍复杂一些。
模拟可以包括观察性或随机的治疗分配/暴露,生存数据,纵向/面板数据(longitudinal/panel data),多级/分层数据(multi-level/hierarchical data),基于特定协方差结构的相关变量的数据集,以及由任何类型的缺失模式导致的缺失数据的数据集。
- Longitudinal Data/纵向数据:对同一组受试个体在不同时间上的重复观测。
- Panel Data/面板数据(平行数据):指在时间序列上取多个截面,在这些截面上同时选取样本观测值所构成的样本数据。
在simstudy包
中模拟数据的关键是创建一系列数据定义表(data
definition table),如下所示:
用于生成上述定义的代码 1
2
3
4
5
6
7
8
9
10library(simstudy)
library(data.table)
def <- defData(varname = "nr", dist = "nonrandom", formula = 7, id = "idnum")
def <- defData(def, varname = "x1", dist = "uniform", formula = "10;20")
def <- defData(def, varname = "y1", formula = "nr + x1 * 2", variance = 8)
def <- defData(def, varname = "y2", dist = "poisson", formula = "nr - 0.2 * x1", link = "log")
def <- defData(def, varname = "xCat", formula = "0.3;0.2;0.5", dist = "categorical")
def <- defData(def, varname = "g1", dist = "gamma", formula = "5+xCat", variance = 1, link = "log")
def <- defData(def, varname = "a1", dist = "binary", formula = "-3 + xCat", link = "logit")genData
命令。
在此示例中,我们生成500条记录,这些记录基于def表
中的定义:
1 | dt <- genData(500, def) |
用重复测量模拟一项前瞻性队列研究
问题是,我们是否可以模拟一项双臂研究(对照组和治疗组),在三个时间点上重复测量:基线,1个月后和2个月后? 答案当然是of course。
1 | library(ggplot2) |