
由一条项目标题展开我先把话放在前面空气质量改善这件事过去几年大家更多关注的是“浓度降了多少”“优良天多了几天”但在公共卫生视角下真正关键的问题是——浓度下降到底换来了多少健康的收益2025年把目光转向“急性健康风险”其实是在补一个长期被忽略的环节我们不只是要看到蓝天更要量化蓝天背后的生命账本。这篇内容我会按一个完整的健康效应评估项目来拆解覆盖研究设计、数据准备、方法框架、实操建模、结果解读和常见坑点。无论你是做环境流行病学的研究生还是疾控、环境监测相关的从业者或者只是对“空气质量改善到底值不值”感兴趣都可以顺着这条线把它看成一个可以实际落地的评估方案来参考。1. 先弄清楚题目的两个关键词1.1 为什么是“改善”而不是“达标”2013年以来我国经历了有监测记录以来最大规模的空气质量治理全国PM2.5年均浓度从高水平降到了如今的水平这个变化幅度在环境流行病学里是极其罕见的“自然实验”。但评估改善的健康效应不能简单拿“浓度下降”直接乘以一个“健康-浓度系数”因为改善的分布不是均匀的有的城市降幅大有的地区冬季仍会出现明显峰值而人群对污染的响应也不是线性的。题目中的“改善”实际上是一个需要被分解为“长期下移”和“短期波动减少”两个维度的复合变量。从方法学角度理解长期改善对应的健康收益主要体现为慢性病死亡率、期望寿命的变化而2025年把焦点放在“急性健康风险”上意味着研究目的已经切换不再只看“浓度年均值下降带来的总收益”而是关注“在已经改善的背景之上每天、每一周的高浓度暴露还能夺走多少健康”。这两者评估工具不同数据颗粒度不同对统计建模的要求也完全不同。1.2 为什么要专门盯“急性健康风险”急性健康效应指的是暴露后数小时到数天内出现的健康反应典型结局包括心血管疾病的急诊就诊、脑血管意外、慢阻肺急性加重、哮喘发作以及当天或滞后1-3天的非意外死亡增加。它的特点是“短平快”暴露水平和健康结局之间时间间隔短混杂因素相对可控也更容易被公众感知——比如重污染过程期间医院呼吸科门诊量上升就是普通人也能观察到的现象。2025年这个时间节点的设定很有讲究。一方面全国PM2.5年均浓度已经在较低水平继续用年均浓度去评估边际健康收益统计功效会下降另一方面虽然平均水平降下来了但在采暖季、不利气象扩散条件下重污染过程仍然存在这也就意味着“急性风险”是当前阶段更敏感、更核心的健康损失通道。评估它也就等于在回答一个问题治理力度已经让“平均空气质量”变好了但短期污染的“峰值危害”还剩多大以及还能挤掉多少健康负担。2. 数据从哪里来怎么准备2.1 空气污染数据别只用日均值任何健康效应评估污染暴露的第一优先级是PM2.5其次才是PM10、NO₂、SO₂、O₃。原因是PM2.5粒径小、表面积大可以携带大量有毒物质进入肺泡并进入血循环其健康效应在流行病学研究中证据最扎实。基础数据可以从中国环境监测总站的国控城市站点获取逐时浓度然后计算24小时均值。但这里有几个细节必须注意站点分布不均匀会导致“城市均值”偏移需要做缺失站点筛查和离群值判断如果某个站点有效时次不足50%建议该日不算入均值。部分城市在特定年份进行过监测站点调整或者仪器方法切换比如从β射线法切换为微量振荡天平法、手工重量法校准这会在时间序列里埋入系统性的断点不做连续性和一致性核对后面建模时会出现伪关联。除了站点均值更精细的选择是用克里金插值或土地利用回归模型获得网格化暴露结合居民地址做人口权重暴露评估。但多数城市地区很难拿到带地址的死亡个案数据所以“城市日均浓度全城人群暴露”仍然是目前最主流、也最稳的折中方案。2.2 健康结局数据死因数据最容易急诊数据最难急性健康效应的健康结局选择按数据可得性排序分别是数据类别典型来源时间颗粒度优势注意点非意外死亡死亡登记系统、疾控死因监测日/周口径稳定、漏登少对急性效应统计功效略低心血管系统疾病死亡死因监测ICD编码日污染-心血管关联强度高编码准确性需质控呼吸系统疾病死亡同上日冬季信号强与流感流行季节重叠需调整急诊就诊量医院信息系统时/日灵敏度高医院人群代表性有限日常波动大门诊量/住院量医院病案系统日样本量大转诊、节假日效应显著最核心的经验是第一次做这个项目优先用“非意外总死亡”和“心血管死亡”作为主要结局因为它对数据的稳定性要求最低跨城市可比性也最好。急诊量虽然更灵敏但节假日、流感暴发、医院服务能力变化都会带来巨大干扰作为次要敏感性分析更合适。2.3 气象数据这是正负混淆的老大难气温和相对湿度是空气污染健康效应中公认最强的混杂因素尤其是低温它既能直接导致心血管死亡增加又与冬季PM2.5高浓度同步出现。如果气象没控制住你算出来的“污染效应”里会掺进大量“冷效应”。常用的气象数据来源是ERAS全球再分析数据空间分辨率0.25°可以提供逐日气温、相对湿度、气压和风速数据。拿城市所在网格的数据即可不必过度追求站点级插值因为对于城市尺度的健康模型再分析数据的平滑误差远小于站点稀疏带来的插值误差。风对污染有“清除效应”雨雪能湿沉降气压变化往往预示天气系统转变。因此最常规的气象协变量组合是日均温度、日均相对湿度、日均风速、日均气压再叠加气温的滞后项。不要一上来就放十几个气象变量多重共线性会把主效应搅得面目全非。3. 健康效应评估的方法学框架3.1 时间序列分析与“超额风险”空气污染的急性健康效应评估本质上是一个时间序列分析问题在同一个人群中比较高污染日和低污染日的健康结局差异前提是控制掉长期趋势、季节性和气象等因素。经典模型是广义相加模型GAM结局为日死亡人数分布选择泊松或准泊松分布[ \log\left[E(Y_t)\right] \alpha \beta \cdot PM_{2.5, t-l} s(time, k) s(temp_t) s(rh_t) ]其中 (Y_t) 是第 (t) 日的死亡人数(PM_{2.5, t-l}) 代表滞后 (l) 天的PM2.5浓度(s(time, k)) 是时间变量的样条函数用来平滑长期趋势和季节趋势(s(temp_t)) 和 (s(rh_t)) 是气温和湿度的非线性混杂控制。这里的“超额风险”通常表述为PM2.5每升高10μg/m³健康结局增加百分之多少也就是 ((e^{10\beta}-1)\times 100%)。很多初学者会直接把当天污染和当天死亡做线性回归这是错误的。急性效应往往是当天的污染暴露要过半天、1天、甚至2-3天才在死亡数据上体现出来并且不同疾病结局的滞后结构不同。所以需要考虑滞后时间段通常做单日滞后lag0、lag1、lag2或累积滞后lag01、lag02。3.2 病例交叉设计时间序列方法的补充视角如果说时间序列模型是在“日”这一层做比较那么病例交叉设计就是在“个体”层面做比较。它的逻辑很巧妙每个死亡或就诊的个体本身就是自己的对照——用事件发生前的某几天或后几天作为对照期比较这些“几乎同一人”在污染暴露上的差异。这样年龄、性别、慢性病史、吸烟状态等在个体层面恒定不变的因素就被自动控制掉了。病例交叉更擅长处理“触发效应”它和时间序列GAM互为补充。实操中我会建议主分析用时间序列GAM敏感性分析用病例交叉如果两者效应方向一致、幅度接近结论就相当令人放心了。3.3 分布滞后非线性模型DLNM急性效应不是瞬间发挥完的。当天的PM2.5升高可能在当天、第1天、第2天分别对死亡产生不同的影响而且这种影响随滞后天数的变化不是单调下降甚至可能出现“当天风险不高、第2天达到峰值”的模式。分布滞后非线性模型同时模拟“浓度-健康效应”的曲线形状和“效应-滞后”的时间分布得到的是一张三维曲面。DLNM是目前环境健康效应研究中最主流的手段但在投入之前一定要想清楚一个现实问题它的建模复杂度较高样本量不足的城市在二维样条拟合时很容易出现过拟合导致置信区间大得没法看。所以如果只是做一个城市的小数据量探索先做单滞后模型更稳妥做多城市大型研究时再上DLNM做分层分析并留出数据进行交叉验证。4. 实操流程从数据合并到归因人数计算4.1 数据清洗与合并开始建模前数据格式是第一道坎。统一处理成“城市-日期”格式这就是以后进入模型的最小分析单元。我在实际项目里通常这样折腾数据污染数据删除站点有效时次18天的日期分站点计算日均值再计算城市居民人口加权平均值健康数据提取死亡登记表中的死亡日期和ICD-10编码按日期加总汇总为非意外总死亡、心血管死亡、呼吸系统死亡、脑血管死亡四类气象数据取网格点的日平均气温、相对湿度、风速、气压合并以日期为主键左连接全部数据集注意检查是否有缺失日期并且标记周日节假日变量这是必须的协变量因为周末和周初的死亡模式差异很大。这里的“周日”处理看似简单但不做它模型结果会出现7天周期残留。4.2 主模型构建与滞后探索一旦数据准备完毕就可以构建核心的GAM方程。这里我用R语言举个最小可复现示例library(mgcv) # 将缺失值剔除并先行合并好数据: data$pm25, data$temp, data$rh, data$death model_lag1 - gam( death ~ te(time, bs cr, k 6) s(temp, k 4) s(rh, k 4) pm25_lag1 dow, data data, family quasipoisson() ) summary(model_lag1) # 提取核心系数置信区间 beta - coef(model_lag1)[pm25_lag1] ci_low - beta - 1.96 * summary(model_lag1)$se[pm25_lag1] ci_high - beta 1.96 * summary(model_lag1)$se[pm25_lag1]对这个模型的理解是关键te(time, bs cr, k 6)表示以自然三次样条平滑长期趋势k控制了每年季节变化的自由度。通常每年6-10个自由度是比较稳妥的选择。s(temp, k 4)和s(rh, k 4)分别控制气温和湿度的非线性混杂效应。选择4个自由度是因为如果自由度太高可能吸附掉一部分由污染驱动的短期变异出现过度控制。dow是星期的因子变量处理周内效应。拟合完之后再分别对lag0、lag1、lag2、lag01、lag02做重复建模通过AIC和效应置信区间来综合评价最佳滞后结构。实操中我见过很多论文直接卡死在lag0结果不显著就换结局这是典型的把“探索”变成“p-hacking”的做法很不好。4.3 归因健康负担估算得到超额风险系数后最直观的呈现是归因健康负担。先计算每个滞后结构的超额风险及其95%置信区间假设PM2.5每增加10μg/m³心血管死亡风险增加0.64%这里的系数取值需要参考目标人群和文献选择合适的暴露-反应系数实操中建议使用已发表的综合Meta分析结果例如全球范围内关于PM2.5与心血管死亡的估计值那么人群归因分数可以近似为[ AF_t \frac{RR_{\text{cum}} - 1}{RR_{\text{cum}}} \frac{e^{\beta_{\text{cum}} \cdot PM_t} - 1}{e^{\beta_{\text{cum}} \cdot PM_t}} ]再计算归因死亡人数[ Attributable_Deaths \sum_t \left( Death_t \times AF_t \right) ]如果进一步需要评估“空气质量改善”带来的健康红利常规做法是对比两种情景情景A以当前实际观测的PM2.5浓度代入计算归因死亡情景B以某一个反事实浓度比如世界卫生组织空气质量指南的建议值或某个历史年均值代入计算。两种情景下的归因死亡人数之差就是在该反事实情景下“可避免的死亡人数”。这就是健康效应评估最终要输出的核心数字。5. 常见问题与排查技巧实录这个项目看起来“跑出个p值”很容易但要跑出可靠、可发表、可给决策者用的结果真的处处是坑。我把这些年实操中踩过的、以及帮别人排过的典型问题集中列一下。5.1 温度把效应偷走了会出现一种情况单污染模型效应显著控制温度后效应减弱甚至消失然后有人开始怀疑“是不是污染没用了”。实际上温度和污染高度相关——冬天冷又霾重而低温本身会直接导致心脑血管突发事件。此时不是污染没效应了而是温度占了太多方差。排查思路是把温度分成低温、中温、高温三段看交互效应通常低温段PM2.5效应最强中高温段效应较弱。所以模型中不要用单一线性温度而是要做非线性样条或分段同时建议把“季节交互”加进去观察污染效应是否在不同季节间变化这本身就是重要研究发现。5.2 滞后结构杂音太多如果你发现lag0不显著而lag1、lag2显著先不要高兴得太早也不要直接否定lag0。滞后结构的核心疑问在于死亡发生的当天日期登记是否准确节假日或周末死亡登记可能延迟到工作日才录入产生“登记日期偏移”——这是数据机制造成的假性滞后。排查策略包括直接用数据画“死亡-日期的周内分布”和“污染-日期的周内分布”进行对比如果死亡显著集中在周一往往意味着周末登记延迟此时需要在模型里加入dow控制并做反向分析把污染往前挪1-2天再回归看假性滞后是否消失。正常的情况下真实滞后结构是延续且平滑的不会只在某一天出现孤立的显著。5.3 新冠疫情干扰了时间序列2020年到2022年期间部分城市人群流动性和疾病谱发生了剧烈变化加上感染本身对心肺系统的冲击死亡数据出现了明显的非线性波动。如果不处理直接跑全时间段的序列分析可能把疫情期间的短期死亡波动错误地归因给污染变化。处理方法无非三种一是直接把2020年至2022年的数据剔除或单独建模作为敏感性分析二是在模型中加入每周或每月的疫情指示变量三是使用2023年之后的数据重新做全部核心分析。我一直建议的做法是主分析用疫情前数据后续数据作为更新和稳健性检验这与很多最新文献的做法一致。5.4 医院数据并非人群水平急诊量和门诊量虽然灵敏度高但它的分母是“就诊人群”而不是“人群”。一家医院的服务范围、就诊科室调整、假期停诊都会让时间序列产生结构性突变。所以在做医院数据时用“医院内部研究”的角度对待不要把它直接外推到“全城市居民的急性健康风险”。做医院数据分析相应要做移动平均和去除特定时期数据的敏感性检验。如果条件允许优先把死亡数据作为主结局医院数据只作为侧面验证。常见现象可能原因排查步骤污染效应在冬季显著、夏季无低温-污染交互做季节分层检查气象样条自由度加入气温后效应骤降温度与污染共线性过高改用非线性温度、交换模型设置滞后结构只有单点显著死亡登记延迟或样本波动做滞后平滑图、剔除节假日再检验时间趋势样条自由度太高效应消失过度平滑吸收暴露效应设置每年4-8自由度并做敏感性扫描医院结局波动大服务系统/转诊/编码混杂不使用医院数据做单城市主结论6. 评估结果如何解读并让它发挥价值6.1 从统计显著性到公共卫生意义的转换一个常见的误区拿到一个95%置信区间不跨越1的相对危险度就宣布“污染的急性健康风险显著”然后用p值跟审稿人较劲。其实健康效应评估的终点不是p值而是公共卫生意义——比如“该城市每年因PM2.5暴露导致的非意外死亡人数约为XX例占全年总死亡的X%”。要把相对风险转换成绝对风险必须回到地方基线和暴露分布这样才能让决策者明白降低多少浓度能挽回多少生命而不是一句抽象的“存在统计学显著关联”。6.2 2025年关注急性风险的核心启发全国PM2.5浓度持续下降后年均暴露健康风险总体在下降而急性健康风险则更多取决于“峰值浓度”和“高浓度过程的持续时间”。这意味着评估指标的重心可能需要从“年均浓度”转向“高浓度日的频次和强度”。比起平均意义上的改善如何削减短期污染过程的峰值对急性健康风险的收益会更明显。从公共卫生干预角度看急性健康效应的价值不光在算一笔账更在于指导“健康风险预警”。如果已经知道当地PM2.5在什么水平、滞后几天会对应怎样的死亡风险变化那就可以在重污染来临之前提前调度医疗资源、发布健康提示、引导敏感人群加强防护。6.3 评估工作的执行体会这类项目真正耗时的地方往往不在建模——建模跑一天就能出结果最磨人的是数据准备、质量控制和敏感性分析。一个让人信服的健康效应评估结论背后至少需要多个滞后结构的结果一致、不同模型设定下效应稳定、对极端值和特殊时期足够敏感。而项目收官之后我更建议把代码、数据处理流程、敏感性分析清单整理成一个独立的附录文档方便未来几年数据更新后随时复算——因为空气质量改善的健康效应是动态的持续追踪才能不断校准我们的判断。这些年做下来我自己最深的体会是真正让评估结果产生价值的不是那个统计学模型的复杂程度而是你是否理解数据机制、是否愿意在细节上较真以及最终能否把“每10μg/m³对应多少健康风险”这件事用普通人也听得懂的沉甸甸的数字传递到该听的人耳朵里。