2️⃣写写代码之‘因果推断模拟数据‘
type
Post
status
Published
date
Feb 8, 2026
slug
code-1
summary
写一下流行病学模拟实验的代码
tags
代码
文字
category
写写代码
icon
password
每次写因果推断总感觉在学习佛学
Hello Hello 大家好,不知道大家有没有需要用到模拟实验的时候呢? 我就有哈哈,因为目前在比较两种流行病学的设计方法。模拟数据有很多种,具体可去这个博客,和文章中查看:
- Using simulation studies to evaluate statistical methods
- Simulation as a Tool for Teaching and Learning Epidemiologic Methods
3.
4.A practical guide to understanding and validating complex models using data simulations
总之这篇文章只涉及到数据模拟的部分:做数据模拟分为三步
确定因果模型
确定模拟参数
生成数据
好了那么现在从第一步开始
确定因果模型
在模拟数据前一般我们需要确认你要研究问题是什么,我知道一般生成数据的时候主要研究问题都是是否X设计比Y设计有效。但是怎么确认它更有效? 这时候可以使用一个已存在且知名的Y设计实验,再用X设计在模拟数据跑一遍然后说,哦,X方法比Y方法更有效。
这个时候我们用于模拟数据的因果模型也就和Y设计的研究问题一致。鉴于我之前在读SGLT2i的文章,我就借用一下上一个实验的实验问题和数据来做这个因果模型。
请借鉴我的上一个博客了解实验设计:
读读文章之‘达格列净与心衰观察实验’哦在了解因果模型上我强烈推荐我女神Yishi Lin 的因果推理系列文章,虽然网址已经过期了这里是wayback machine 上的存档。
总之此处的因果模型为:
达格列净的使用是否导致糖尿病患者心衰住院风险增加

最简单的因果模型大概长这样。L是作为干扰因素存在。
确定模拟参数
那么又了模型我们就可以开始确定模拟参数了:根据上图,我们需要定义 ,,和
确定参数也需要确定四个事情:
变量的类别(分类型,数值型,或者定类【是/否】)
变量的概率分布(伯努利,泊松,正态)
变量的分布函数
应变量的自变量
此处为病人是否使用SGLT2i, 答案为是或者着否。的自变量为.所以的分布如下:
在这里被设定成随机且连续的。所以的分布如下:
在此处为结果,即病人是否因为心衰入院,答案为是或否。其情况随时间的推移而变坏。的自变量为和。所以的分布如下:
生成数据
这些数据默认在R上跑
参数设定
假设我们有100 个病人,没有人从追踪中消失,追踪时间为两年。在本次模拟情景中,我们假设与没有因果关系所以 都是0。后续需要可以自己调。
数据生成
Reference
- Morris TP, White IR, Crowther MJ. Using simulation studies to evaluate statistical methods. Stat Med. 2019 May 20;38(11):2074-2102. doi: 10.1002/sim.8086. Epub 2019 Jan 16. PMID: 30652356; PMCID: PMC6492164.
- Rudolph JE, Fox MP, Naimi AI. Simulation as a Tool for Teaching and Learning Epidemiologic Methods. Am J Epidemiol. 2021 May 4;190(5):900-907. doi: 10.1093/aje/kwaa232. PMID: 33083814; PMCID: PMC8096491.
- 链接贴了就不cite 了
- DiRenzo, Graziella & Hanks, Ephraim & Miller, David. (2022). A practical guide to understanding and validating complex models using data simulations. Methods in Ecology and Evolution. 14. 10.1111/2041-210x.14030.
Prev
读读文章之‘达格列净与心衰观察实验’
Next
写写代码之‘倾向性匹配得分‘
Loading...
