零膨胀计数回归(ZIP/ZINB)
这个方法是做什么的
因变量是计数(0,1,2,…)而 0 特别多时用它。它把“为什么是 0”拆成两种机制:结构零——这个对象根本不会发生(从不就医的人群、没有该业务的门店);抽样零——会发生,只是这一期恰好是 0。模型因此有两部分:一个 Logit 方程预测观测落入结构零群体的概率,一个计数方程刻画“会发生”群体的计数强度。控件在“零膨胀泊松 (ZIP)”与“零膨胀负二项 (ZINB)”之间选择,默认 ZIP;两者的差别在计数部分用泊松还是负二项 NB2,后者多估一个离散参数 α,α→0 时 ZINB 退化为 ZIP。
这份报告的特有着眼点是卡④ 的四模型横向比较:本次选定的零膨胀模型、另一种零膨胀模型,以及两个不含零膨胀的对照(普通泊松、负二项 NB2),都在同一份数据、同一组自变量上真跑一遍,给出 log-L、参数数、AIC、BIC 与预测零数。演示数据里普通泊松只预测 45.21 个零,而实际有 124 个——这个差距就是零膨胀模型的价值所在。卡④ 还给 AME(对总体期望计数 E[Y] 的平均边际效应),单位与因变量相同,比 IRR/OR 更适合写进结论。
需要准备什么数据
- 放入[定量]计数因变量 Y:定量变量(数值)
- 放入[定量]自变量 X:至少 1 个,定量变量(数值)
数据要求
- 数据表至少 30 行。
- 单列缺失率不超过 20%。
- 不接受取值全都一样的列(零方差列没有可分析的变异)。
以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。
什么时候用它
- 计数因变量里 0 的占比明显高于泊松分布的预期,且你有理由相信人群中确实存在“根本不会发生”的一类
- 你要分别回答两个问题:谁属于不会发生的那类,以及会发生的人发生多少次
- 需要一个综合两部分之后、单位与因变量相同的净效应,用来写结论
- 想在 ZIP / ZINB / 普通泊松 / 负二项四个模型之间做一次有依据的选择,而不是凭印象
因变量必须是非负整数,且必须含有零值——一个零都没有时零膨胀框架不成立。自变量必须是定量列(定类请先编码),且不能互为线性组合。参数个数为 2×(自变量数+1),ZINB 再多一个 α,有效样本需大于该数 +5;实践中零膨胀模型的极大似然对小样本很不稳定,建议 N≥100。自变量量纲差异过大容易不收敛,建议先标准化。
什么时候不要用它
- 因变量一个 0 都没有:零膨胀框架不成立,用「计数数据回归」。
- 零多,但并不存在“结构零”那类对象,只是方差远大于均值:那是过度离散不是零膨胀,用「计数数据回归」并走负二项。卡① 表注专门写了“过度离散与零膨胀是两回事”。
- 因变量不是计数,而是在 0 处堆积的连续量(自付支出、加班工时):用「Tobit回归」,它处理的是取值被截断,不是事件不发生。
- 只关心“发不发生”、不关心次数:用「逻辑回归」。
- 观测按组嵌套或是同一对象的重复测量:本模块假定观测互相独立,用「广义线性混合模型(GLMM)」的泊松族随机截距,只关心总体平均效应时用「广义估计方程(GEE)」。
- 两部分理应使用不同的自变量集合(有些变量只影响是否会发生、有些只影响发生多少):本模块两部分强制共用同一组,卡⑤ 明写不支持该设定。手工的替代是拆成两步——先用「逻辑回归」对“是否为零”建模,再在非零子样本上用「计数数据回归」建模。但要注意这是 hurdle(栅栏)思路——它假定所有的零都来自第一步,与零膨胀“零可以有两个来源”的假设不同;而且「计数数据回归」不是零截断版本,拿它拟合正值子样本本身也有偏。两步结果只能当探索,不能与零膨胀的结论混着引用。
容易误读的地方
- ZIP 与 ZINB 的结论不能互相代替,切换之后连“哪些变量显著”都可能变。 实测同一份数据:“距最近医院距离”在 ZIP 的计数部分 p=0.027、IRR 95%CI [0.9250, 0.9953],切到 ZINB 后 p=0.049、区间 [0.9188, 0.9997]——上限已经贴到 1。原因是 ZINB 多估了离散参数 α(本次 0.0715),标准误普遍放大:“慢性病种数”计数部分的标准误从 0.0434 涨到 0.0505。ZIP 的标准误更小是因为它假定了等离散,而这份数据实测方差/均值 = 2.8051。写结论前请把用到的那一支单独跑一遍。
- AIC 最优的那个模型未必是你选的那个,报告会当面说出来。 演示数据默认跑 ZIP,卡④ 的四模型比较里 ZINB 的 AIC 更小(ΔAIC=−1.82),卡⑤ 的论文段落直接写“与本次选用的模型不一致,解释结论时应予说明或改用该模型重跑”。同时也要按报告给的判据读:|ΔAIC|<2 属于“难分伯仲”,1.82 正落在这一档,此时保留更简约的 ZIP 是站得住的。关键是别把这行提示当装饰跳过去。
- 计数部分的 IRR 与零膨胀部分的 OR 方向可能相反,只报一个会把结论讲反。 演示数据“慢性病种数”的 IRR=1.2141(病种多的人就诊次数更高),OR=0.7092(病种多的人更不可能属于“根本不就医”那一类)。两者都对,说的是两件事。要给净效应就看卡④ 的 AME=+0.6877,它已同时计入两部分,单位就是就诊次数——卡④ 表注写明“IRR 与 OR 可能方向相反……此时 AME 给出净效应,是解读矛盾情形的关键”。
- 零膨胀的依据不是“零占了 41%”这个比例,而是与泊松期望零数的比较。 卡① 用单侧二项检验:观测 124 个零,对边际 Poisson(λ=2.177) 期望的 34.03 个,p<0.001。反过来说,一个均值很小的计数变量本来就该有很多 0,只看零占比高就断定零膨胀,很容易把普通泊松数据误判进来。
- “结构零”是模型的假设,不是数据里能看到的标签。 报告不会告诉你哪些观测是结构零,Logit 部分给的只是每个观测属于该群体的概率。所以不能反过来说“有 41% 的人属于从不就诊人群”——模型预测的 124.01 个零里既有结构零、也有计数过程本身产生的零,两者在数据中无法区分。要把这个概率当作个体判别依据使用,需要另外的外部验证。
报告里有什么
- 输出结果一:数据概览与前提检验
- 输出结果二:两部分模型的系数估计
- 输出结果三:模型拟合与效应可视化
- 输出结果四:效应量、模型比较与平均边际效应
- 输出结果五:结论与学术表述
第一图为观测计数频率与模型预测频率的对比(预测频率由拟合的 ZIP/ZINB 概率质量函数逐观测计算后取均值);第二、三图分别是计数部分 IRR 与零膨胀部分 OR 的森林图,虚线为无效值 1,置信区间不跨过 1 的点以主色标出。