前言
最近一段时间在做流行病数据的分析,期间学习DLNM模型的过程中碰到了挺多问题百度搜不到,笔者通过慢慢读原文献、看代码解决了一部分,当然还是有一些没太搞懂hhh。DLNM模型是个比较新的模型,中文版本的介绍也比较少,所以想写一篇推文,做一下知识输出,这也是笔者第一篇关于专业知识的推文,欢迎大家点赞、评论、多多支持,文中言语不当之处还请多多指教,谢谢!
目录
-
1. 分布滞后模型与自回归模型
-
2. 分布滞后非线性模型
-
2.1 DLNM的历史及应用场景
-
2.2 DLNM模型结构
-
-
3. ChicagoNMMAPS数据集介绍及可视化
-
4. DLNM模型的R语言实现
-
5. 待讨论的问题
1. 分布滞后模型与自回归模型
分布滞后线性模型最初由 Almon 于1965年提出,并应用于经济学研究。2000年,shcwartz 和 Braga 等人将该模型引入环境健康效应的定量化评估。其原理是用解释变量第t至t-s期的值来预测被解释变量的表现,其表达式如下:
与分布滞后模型不同的是,自回归模型的解释变量和被解释变量是同一个变量(不要弄混啦),其原理是用变量第t-1至t-q期的值来预测本期的表现,并假设它们为一线性关系,其表达式如下:
2. 分布滞后非线性模型
2.1 DLNM的历史及应用场景
过去,分布滞后线性模型(DLM)普遍应用于研究空气污染的健康效应,但由于该模型假设暴露-反应呈线性关系,而现实情况中很多暴露-反应关系(比如:温度-死亡)呈现U、V等非线性关系,导致分布滞后模型并不适用。针对上述问题,2006年 Armstrong 最早将分布滞后非线性模型(DLNM)提出并应用于流行病学当中。2010年 Gasparrin、 Armstong 等人进一步说明了如何利用交叉基(cross—basis)对解释变量进行特征变换,进而以广义线性模型和广义相加模型等传统模型的思想为基础,阐述了分布滞后非线性模型的理论。2012年 Gasparrin、 Armstong 等人介绍了如何将 DLNM 模型框架如何应用于生物医药领域的研究设计和队列研究,研究长期暴露于药物、治癌剂等环境下对健康的影响。2013年,Gasparrin 和 Armstong 继续拓展 DLNM 模型,提出了一种改进的方法来研究 DLNM 复杂的非线性和延迟关联,其中涉及将二维拟合简化到一维。2016年,Gasparrin 通过模拟比较了移动平均模型和分布滞后模型。2017年,Gasparrin、Armstong 等人将惩罚样条的理论引入了 DLNM 模型中。
2.2 DLNM模型理论
本文暂时只对DLNM的理论进行简单解释(笔者学识尚浅,在学习模型时感觉理论的学习非常依赖 R 语言中 DLNM 包的介绍,一边写程序一边读原文献会对学习模型有很大帮助),分布滞后非线性模型公式如下:
其中, 代表时间,, 是连接函数族, 为多种可选概率分布(gammma、Poission等),因变量 ,,,通常是整形变量(如每日死亡人数,每日患病人数等), 自变量 ,,, 通常是同期的空气污染物浓度、温度、相对湿度、药物剂量等环境因素, 表示其他混杂因素的线性效应,、 为相应的系数。 表示各种解释变量的交叉基函数,即对自变量与因变量的关系、滞后效应的分布分别选择合适的基函数,常用的基函数有正交函数、线性阈值函数和样条函数等,具体理论请参看文献。(笔者这部分看原文献没完全搞清楚,后续会继续研究)
虽然作者在原文献中说 DLNM 的代数理论非常复杂,但感觉复杂的部分实际上就在交叉基那里,整体的建模流程简单来说就两步:
-
利用交叉基进行特征转换,得到新的数据。
-
用广义线性模型对变换后的数据进行建模。
3. ChicagoNMMAPS数据集介绍及可视化
本文使用ChicagoNMMAPS数据集进行建模分析演示,该数据集包含1987-2000年芝加哥每日的死亡率、天气(温度、露点温度、相对湿度)和污染(PM10和臭氧)等情况。
-
date: Date in the period 1987-2000.
-
time: The sequence of observations
-
year: Year
-
month: Month (numeric)
-
doy: Day of the year
-
dow: Day of the week (factor)
-
death: Counts of all cause mortality excluding accident
-
cvd: Cardiovascular Deaths
-
resp: Respiratory Deaths
-
temp: Mean temperature (in Celsius degrees)
-
dptp: Dew point temperature
-
rhum: Mean relative humidity
-
pm10: PM10
-
o3: Ozone
4. DLNM模型的R语言实现
建模之前首先做一下数据清洗,这里笔者将离群值赋值为NA,然后使用mice包对缺失值进行了插补,这里可以参考知乎中的:“R中数据缺失值的处理--基于mice包”。
# 调用包
library(dlnm);library(ggplot2);library(mice);library(reshape2)
# 调用芝加哥数据