翻譯自:《Distributed lag linear and non-linear models for time series data》(Antonio Gasparrini, 2017-01-16)
(譯者:分布滯后非線形模型是近幾年興起的時間序列數據研究模型,目前國內對該模型的研究還不多。我在使用該模型研究健康問題時遇到了很多問題,對于模型的理解和參數的設置有很多不清楚的地方。R包DLNM的作者Antonio Gasparrini撰寫了大量的文章,對該包的使用進行了說明,我將其2017年的一篇文章中的部分內容進行了翻譯,希望與學習和使用該包的同學共同探討)
第二個例子用于展示如何分析特定季節數據。這一問題的特點在于數據是由不同年份的多個等距的有序季節數據組成的,并非一個單一的了連續序列。在這個例子里,我將使用和section3中類似的步驟,分別評估臭氧和溫度對于死亡5至10日的滯后影響。
首先,我創建了一個限制在夏季(6月~9月)的季節性的時間序列數據,并把它以data frame 形式保存在 chicagoNMMAPS 里:
chicagoNMMAPSseas <- subset(chicagoNMMAPS, month %in% 6:9)
第一次創建交叉積矩陣
cb2.o3 <- crossbasis(chicagoNMMAPSseas$o3, lag=5,
argvar=list(fun="thr",thr=40.3), arglag=list(fun="integer"),
group=chicagoNMMAPSseas$year)
cb2.temp <- crossbasis(chicagoNMMAPSseas$temp, lag=10,
argvar=list(fun="thr",thr=c(15,25)),
arglag=list(fun="strata",breaks=c(2,6)),
group=chicagoNMMAPSseas$year)
“group”指明分組變量:計算機函數會在每一組的末端打斷序列,并將第一行(first row)替換為交叉積矩陣的最大滯后值,其后的季節則填充NA。每個系列應為連續,完整和有序的。我假設臭氧(O3)的效應在低于40.3 μgr/m3 時無影響,之后則為線性,代碼中設置為高閾值參數化(high threshold parameterization)(fun="thr")。溫度方面,我選擇了雙閾值,即假設其效應在低于15?C和高于25?C時呈線性,在15?C至25?C間時無效應。閾值使用語句thr.value設置(縮寫為thr),參數side在第一個交叉積中默認值為“h”,第二個交叉積中默認值為“d”(在制定雙閾值的時候使用)。關于滯后維度,我為臭氧定義了一個非結構方程(unconstrained function),對每個滯后使用一個參數設置(fun="integer") ,最大滯后天數為5天(默認的最小滯后值為0)。我為溫度變量定義了一個3層區間,分別滯后0-1天,2-5天和6-10天。所有交叉積的設置可以通過語句 summary()查看。
為研究年份中的日和時間構建包含自然樣條回歸模型,分別描述每年的季節效應和長期趨勢。與前者相比,后者的自由度要少很多,因為其只需要捕捉年均趨勢。除此之外,其他部分與section3中步驟類似。代碼如下:
model2 <- glm(death ~ cb2.o3 + cb2.temp + ns(doy, 4) + ns(time,3) + dow,
family=quasipoisson(), chicagoNMMAPSseas)
pred2.o3 <- crosspred(cb2.o3, model2, at=c(0:65,40.3,50.3))
必須計算的預測值在at語句中說明,本例中,我定義了從0至65μgr/m3 的整數(這是臭氧分布的大致范圍),另外增加了閾值和閾值增加10個單位的值。向量是自動排序。參考通過語句thr()自動選擇暴露--反應模型曲線,參數cen也為默認值。
我繪制了10個臭氧單位的給定值的滯后效應預測關系曲線,與section 3中的類似,但本例添加了80%置信區間,以及累計暴露--反應關系,代碼如下:
plot(pred2.o3, "slices", var=50.3, ci="bars", type="p", col=2, pch=19,
ci.level=0.80, main="Lag-response a 10-unit increase above threshold (80CI)")
plot(pred2.o3,"overall",xlab="Ozone", ci="l", col=3, ylim=c(0.9,1.3), lwd=2,
ci.arg=list(col=1,lty=3), main="Overall cumulative association for 5 lags")
代碼第一行中,參數 ci="bars" 指定了置信區間以bars的方式繪制,這點與默認不同,默認值為“area”。參數 ci.level=0.80 指定了80%置信區間需繪制出來。我選擇了“點”而不是“線”繪制,“點”的設置參數為 type 和 pch。
代碼的第二行,參數 type="overall" 表示需繪制帶有置信區間的累計估計曲線,ylim定義y軸數值范圍,lwd定義線條寬度。本例中置信區間以線條的形式顯示,這是通過給參數 ci 設置 "l" 來實現的。與前例類似,置信區間曲線通過參數ci.arg精細化處理。
與前例類似,我們可以從 pred2.o3 中提取臭氧閾值之上10個單元的帶95%置信區間的累積效應估計值:
pred2.o3$allRRfit["50.3"]
顯示為:
50.3
1.047313
置信區間:
cbind(pred2.o3$allRRlow, pred2.o3$allRRhigh)["50.3",]
顯示為:
[1] 1.004775 1.091652
同樣的圖形和計算可應用于冷及熱效應。舉個例子,我們可以描述溫度高低閾值之外每升高1?C的風險,讀者可以參照上面的步驟實現。