我们在之前的文章中介绍了基于单个城市的时间序列数据建立分布滞后非线性模型(distributed lag non-linear model,DLNM)(DLNM在时间序列中的应用:单个城市),这要求研究区域内的数据资料相对齐全,且空间异质性较小。然而,当存在多个地区的数据,且地区之间的空间跨度较大时,考虑到地区之间的空间差异,直接汇总(累加或均值)每一天的数据建立DLNM并不能合理体现暴露-反应关系。在这种情况下,多采用基于DLNM的二阶段分析方法(two-stage analysis):先分别在每个地点建立DLNM,然后提取出暴露的系数进行meta合并,得到合并的系数值。
下面,我们随机抽取了6个气象监测点的气象数据,时间为2009年1月1日-2015年12月31日,并模拟了气象监测站点所在的每日死亡数,构建了气象健康数据库,用于探索日均气温与死亡数的暴露-反应关系。
数据整理
表1 数据库结构

我们首先分别建立每个地区的DLNM模型:由于每日的死亡数相对于当地的人口数来说,是一个小概率事件,我们因此使用Log连接构建Poisson回归模型;暴露变量以交叉基的形式纳入。这与单个城市的建立过程是一样的,区别在于需要通过建立循环完成每个地区的模型构建,并提取和保存交叉基的系数,以便用于第二阶段分析。代码如下:
###1.读取数据####
library(dlnm)
library(mvmeta)
library(splines)
alldata<-read.csv("dataset.csv" )
###2.数据库转换####
#为方便对每个地区进行循环建模,每个地区作为一个dataframe,并存在一个list内
cities <- unique(alldata$area) #获得每个地区的唯一值
##对每个地区进行切割
data <- lapply(cities, function(x){
alldata[alldata$area==x,]
})
names(data) <- cities
###3.交叉基参数定义####
##暴露参数
varfun = "bs"
vardegree = 2
varper <- c(25,50,75)
cenper <- 75
##滞后参数
lag <- 21
arglag <- list(knots=logknots(21,3))
###4.模型定义####
##长期趋势的自由度
dft <- 8
##模型公式
formula <-deathall~cb.tm + ns(rh,3) + factor(dow)+ns(time,df=dft*7)
###5.模型结果保存设置####
#需要将各地区建立模型的系数和协方差提取出来,为加速运行速度,我们预先建立系数和协方差的储存框架
#用NA填充矩阵,因为用bs作为暴露参数,设置了2个degree和3个节点,因此有5个参数(即b1-b5)
coef<- matrix(NA,length(data),length(varper)+vardegree),
dimnames=list(cities,paste("b",seq(5),sep="")))
#协方差矩阵保存在list中
vcov <- vector("list",length(data))
names(vcova) <- cities
###6.建立循环,拟合各个地区的模型####
for(i in seq(length(data))) {
# 输出当前地区
print(paste(i,cities[i],sep = "-"))
# 提取单个地区数据
sub <- data[[i]]
sub <- sub[order(sub$date),] #根据时间进行排序
#定义长期趋势变量time
sub$time<-c(1:length(sub$tm))
# 设置交叉基
argvar <- list(fun=varfun,degree=vardegree,
knots=quantile(sub$tm,varper/100,na.rm=T))
cb.tm <- crossbasis(sub$tm,lag=lag,argvar=argvar,arglag=arglag) #命名需与公式定义相对应
# 运行模型
model <- glm(formula.all,family=quasipoisson,sub,na.action="na.exclude")
# 降维为累积维度(即仅保留滞后累积结果)
red <- crossreduce(cb.tm,model,cen=quantile(sub$tm,cenper/100,na.rm=T))
coef[i,] <- coef(red)
vcov[[i]] <- vcov(red)
}
经过循环之后,上述coef和vcov文件中分别保存了6个地区模型拟合的温度交叉基系数和协方差矩阵,基于这两个文件,我们可以使用meta进行合并,获得合并的系数。在此基础上,我们基于所有地区的温度范围,建立一段温度序列,经过bs样条函数转化后,可用于预测获取每个温度的效应值,并进一步绘制汇总的暴露-反应关系曲线。代码如下:
###1.meta合并####
###1.meta合并####
mv <- mvmeta(coef,vcov,method = "reml") #利用随机效应模型(reml)进行meta合并
###2.绘制曲线图####
##获得所有地区的温度范围
bound.all <-range(alldata$tm,na.rm=T)
perct<-unique(alldata$tm)
##将位点25%、50%和75%tm提出,设置为节点(与first stage相对应)
knots1<- rowMeans(sapply(data,function(x) {
quantile(x$tm,c(25,50,75)/100,na.rm=TRUE)
}))
##根据整体tm范围,建立整体的tm序列##
tperc <- seq(bound.all[1],bound.all[2],length=50) #50为序列长度,可自行设置
##设置交叉基参数onebasis
#因为上面crossreduce已经降维,交叉基需要用onebasis,其余参数一致
argvar1 <- list(fun=varfun,degree=vardegree,
knots= quantile(alldata$tm,varper/100,na.rm=T),
Boundary.knots=bound.all)
cb.tm1 <- crossbasis(tperc,maxlag=lag,argvar=argvar1,arglag=arglag)
bvar <- do.call("onebasis",c(list(x=tperc),attr(cb.tm1,"argvar")))
##利用meta合并的系数对温度序列进行预测
all.cp <- crosspred(bvar,coef=coef(mv),vcov=vcov(mv),model.link="log",
at=c(perct,knots1) )
##寻找最小死亡风险温度
MMT <- round(as.numeric(names(which.min(all.cp$allfit))),1)
##设置MMT,重新预测
all.cp<- crosspred(bvar,coef=coef(mv),vcov=vcov(mv),model.link="log",
at=c(perct) ,cen = MMT)
##对结果进行展示
plot(all.cp,"overall",col=2,cex.axis=1.50,xlab="温度(℃)",ylab="RR",
main="",cex.main=1.5,cex.lab=1.5)

图1 6个地区温度与死亡的汇总暴露-反应关系曲线
如果需要用到各地区的暴露-反应关系,会发现曲线比较不规则(图2)。这是因为各个地区在样本量上存在差异,相同参数下建立的模型可能有所差异。这时候我们可以用最佳线性无偏预测(Best linear unbiased prediction, BLUP)方法,对每个区的暴露-反应关系进行调整(图3)。BLUP在每个地区的曲线和汇总曲线之间进行权衡,这种方法允许每日死亡率较小或序列较短的地区(通常表现为估计的不准确)从具有相似特征的较大人口中借用信息。代码如下:
blup <- blup(mv,vcov =TRUE)
plot(all.cp,"overall",col=2,cex.axis=1.50,xlab="温度(℃)",ylab="RR",
main="",cex.main=1.5,cex.lab=1.5)
for(i in seq(length(cities))) {
prec <- crosspred(bvar,coef=blup[[i]]$blup,vcov=blup[[i]]$vcov,cen =MMT,at=c(perct,tperc),
model.link = "log")
lines(prec,col="lightblue4",lty=5)
}
lines(all.cp,"overall",col=2,lwd=4)

图2 6个区的气温-死亡关系曲线

图3 6个区的经BLUP的气温-死亡关系曲线
尽管多个地区的时间序列数据可以通过提取系数和协方差进行meta合并,获得汇总的暴露-反应关系曲线,但是在对跨度较大的地区进行分析时仍需考虑地区之间的空间差异性,应进一步报告异质性或分地区分析比较。本文所介绍仍是对时间序列的分析,DLNM还可以用于横断面调查数据,敬请期待我们下一期的内容。
[1] 杨军,欧春泉,丁研,陈平雁.分布滞后非线性模型[J].中国卫生统计,2012,29(05):772-773+777.
[2] Chen R, Yin P, Wang L, et al. Association between ambient temperature and mortality risk and burden: time series study in 272 main Chinese cities. BMJ 2018; 363: k4306.
制作:蔡敏、周燕
初审:何冠豪、胡建雄
审核:肖建鹏、刘涛
指导:马文军
关于我们
《数据分析和应用》致力于为全国各地公共卫生与医学工作者(机构)提供专业可靠的统计咨询、研究设计、数据分析、高通量测序数据和序列分析、调研报告等服务(详细可见公众号菜单栏),欢迎有需要的人员和机构与我们联系。
邮箱:statisic@gdiph.org.cn
微信号:gdiph-stat

