![]()
系列简介
这是我们一系列原创技术贴,从易到难,每天学习一点。所有内容均为疾控数据分析、科研论文相关,或者说很多和现在的热门监测预警相关,所以我们这个系列就叫“监测预警基础”。
今天是第38节,我们继续上一节内容,你已经会STL分解了,那之后呢?
我们现在就讲之后的故事。
上一篇我们讲了怎么用STL分解把传染病发病曲线"大卸八块"。分解完,你手里多了3个变量:
趋势项、季节性、残差项。
这3个零件到底是什么?各自能回答什么疾控问题?还能继续做什么分析?有哪些坑不能踩?
如果你用的是加法模型,所有3个成分的本质其实还是病例数,只不过是代表不同意义的病例数,单位也都是"例"(或者你原始数据用的发病率,那就是"例/10万")。
但它们的含义和取值特点不同:
![]()
以下我们每一部分拆开,再详细讲一讲
![]()
趋势项其实就是把每年同一周的"季节性波动"全部抹平,再平滑处理后,得到的一条长期走向曲线。它回答的是:抛开"每年这个时候本该高/低"的季节因素,这个病近5年、近10年到底是在走高还是在走低?
第一,可以用来做什么?
比如评估防控效果——EV71疫苗纳入免疫规划后,趋势项是否从2017年后开始下降?比如识别阶段性变化——2020年发病数突然下台阶,是报告减少还是真减少了?比如资源规划——趋势项持续上升的病种,需要提前储备防控资源
第二,还能怎么样分析?
但这趋势性我们一般就是视觉查看趋势,以及采用Mann-Kendall趋势检验判断趋势是否显著上升/下降给"这个病越来越严重"提供统计学证据。再搭配Sen's 斜率估计,计算所有时间配对斜率的中位数,量化趋势的具体幅度(如 “发病率每年下降 0.42/10 万”),共同完成 “趋势是否存在 + 趋势幅度多大” 的完整判断。
或者与政策时间点叠加直观展示政策前后趋势斜率变化。需要注意的是,Joinpoint、ITS等方法自带趋势建模,通常对原始数据做。
![]()
季节项其实就是季节性特征量化,把每年同一周的发病水平跨年度平均,得到一个"标准季节模板"。比如第20周的季节项是-200,意思是:每年第20周,手足口病发病数平均比全年均值低200例。比如手足口病,春末夏初(约20-30周)季节项为正且很高,冬季(约1-10周)为负。
第一,可以用来做什么?
可以用来找高峰周/低谷周,季节项最大的几周就是每年流行高峰;判断流行开始,季节项由负转正的周次,提示流行季启动,年际比较,2020年后季节项峰值是否后移?计算季节强度量化季节性有多强。
要注意,季节强度(如0.38)回答"季节性整体有多重要",是一个单一数值,可以比较不同疾病。季节指数(如第20周=0.6)回答"这一周比全年均值高/低多少",是52个数值(周数据),描述具体模式。
seasonal_strength <- 1 - var(remainder) / var(ts_cases - trend)第二,还能怎么样分析?
![]()
![]()
残差项就是原始发病数减去趋势项和季节项后,剩下的"解释不了"的部分。理论上应该是随机噪声,但在传染病数据中,往往藏着暴发信号、报告延迟、诊断标准变化。
第一,残差项长什么样?大部分时间围绕0上下小幅波动;偶尔出现尖峰(正值)或深谷(负值);如果连续多周为正或负,说明不是随机的
第二,残差项队传染病数据分析有什么意义?
![]()
第二,残差项我们一般怎么分析?
![]()
![]()
第一,数据必须是等间隔的
周数据:一年按52周还是53周?建议统一按52周,多出的1周做插值或归并
月数据:注意2月只有28天,月数据的时间间隔不等,建议用周数据
日数据:传染病通常不用日数据做STL,波动太剧烈,建议聚合到周
第二,缺失值处理
STL不能自动处理缺失值(
stlplus包可以)如果某周数据缺失,建议用线性插值或同期历史均值填补,不要直接删除
第三,异常值(暴发)会"污染"趋势和季节
如果某一年出现大暴发,STL会把这部分异常"分摊"到趋势和季节中
建议开启
robust = TRUE,降低异常值对分解的影响或者:先剔除已知异常年份,再分解
第四,周期长度(frequency)要选对
周数据:
frequency = 52月数据:
frequency = 12注意:52周不是精确的1年(365/7≈52.14),长期数据可能产生"季节漂移"假象
第五,加法模型 vs 乘法模型
加法:
原始 = 趋势 + 季节 + 残差,adjusted = 原始 - 季节乘法:
原始 = 趋势 × 季节 × 残差,adjusted = 原始 / 季节怎么选:如果高峰年波动大、低谷年波动小,用乘法;如果波动幅度稳定,用加法。传染病通常加法即可,但流感等波动剧烈的病种建议尝试乘法
第六,分解后不是"万事大吉"
残差理论上应随机分布,务必画ACF图检验
如果残差还有自相关,说明STL没提取干净,可能需要调整参数或换方法
不要对趋势项做ITS分析——ITS要求原始序列的干预前后突变,STL的平滑会把突变抹掉
STL分解给你的不是“答案”,而是一套更精细的分析工具箱:趋势项告诉你:长期是升是降,拐点在哪年;季节项告诉你:每年什么时候高,高峰漂移了吗;残差项告诉你:这周是不是异常,有没有暴发信号;季节调整序列告诉你:抛开季节偏见,真实水平如何。
3个零件,3个维度,合在一起才是对一条发病曲线的完整解读。下次再看到那条熟悉的周发病曲线,不妨先做一次STL分解——你会发现,看了无数遍的数据,原来还有这么多没读懂的信息。
![]()
![]()
编辑:普通疾控人 | 审核:诗酒趁年华
文章来源 | 原创
说明 | 转载只为分享,如有侵权联系删除
©版权声明 | 部分信息和图片来自公开网络
转载请注明
再次转载请注明出处
![]()
科普健康 | 宣传疾控
本号为多位疾控机构从业者运营
重点关注国内外健康事件
致力于疾控科普
在做好科普服务大众的同时
做好疾控机构的宣传
让更多的人了解疾控,拥抱健康
欢迎加「小编」微信(cdcjkr126com)
本文具体说明
本文为原创内容,文章为个人理解所学,不涉及疫情信息及内部保密数据,发表的目的为自我总结及给有需求的人士学习使用。如有不妥之处,欢迎联系小编修改、删除。
更多精彩视频,尽在“CDC疾控人”视频号
![]()
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.