因变量有大量零值——直接跑 OLS 行吗?删掉零值会怎样?实证中成熟的做法是什么?
你研究\"企业专利数量\"。你的样本里有 10,000 家公司,其中 7,000 家在任何一年都没有一项专利——因变量 patent = 0。剩下 3,000 家的专利数从 1 到 5000 不等。
一、开篇:你的因变量里 70% 都是零——你对着 Stata 沉默了
你研究"企业专利数量"。你的样本里有 10,000 家公司,其中 7,000 家在任何一年都没有一项专利——因变量 patent = 0。剩下 3,000 家的专利数从 1 到 5000 不等。
你顺手想跑一个 OLS:
reg patent rnd size leverage age但在敲回车之前,你犹豫了——因变量是一大堆零 + 一个右偏的长尾。OLS 会怎么处理这堆被压在零上的观测?
你又考虑:既然大部分公司都不创新,要不我只研究有专利的公司——把 patent = 0 的全删了?
但"不申请专利的公司"和"申请专利的公司"之间的差异——恰好是你研究问题中最核心的信息。 一家公司从"零专利"变成"开始申请专利"——这个边际变化是什么推动的?如果你删掉了所有零值,你等于在研究"在已经创新的公司中,什么因素决定了创新的多寡"——这个问题的政策含义和研究"什么因素推动公司从零到一开始创新"完全不同。
核心信息:因变量有大量零值意味着数据生成过程可能包含两个不同的决策——"是否参与"(零 vs 正数)和"参与多少"(正数的大小)。OLS 将两者混在一起,假设同一个线性模型可以同时解释两个决策——这在理论上不合理,在估计上可能导致预测值为负、异方差严重、以及边际效应的解读不符合实际。直接删除零值等于将研究问题从"什么因素影响 Y"收缩为"在 Y > 0 的条件下什么因素影响 Y 的大小"——这不仅是样本选择偏误,更是一种对研究问题的隐性篡改。实证文献中的成熟做法包括 Tobit(假设两个决策由同一个过程驱动)、两部模型/栅栏模型(Hurdle Model,允许两个决策由不同过程驱动)、Heckman 选择模型、以及对于计数数据(如专利数)使用泊松/负二项回归及其零膨胀版本。
二、为什么 OLS 不擅长处理"一堆零 + 长尾"?
2.1 OLS 的线性预测会跑到零下面去
OLS 的拟合值 是一条直线——它必然会在 X 的某个取值处穿过零,跑到负数区域。但你的因变量(专利数、研发支出、出口额)在定义上是非负的——负数没有经济含义。
在零附近,OLS 会预测出"负的专利数"——这不仅是尴尬的输出,更意味着你的模型在最需要准确的地方(零附近的边际效应)给出了错误预测。
2.2 一堆零制造了极端的非正态和异方差
当 70% 的 Y = 0 而剩余的 Y 分布从 1 到 5000 时,残差的分布在零处有一个巨大的峰值,然后是一个长长的不对称的右尾。这种分布和正态分布相差甚远——OLS 的正态性假设显然不成立。
更重要的是,误差的方差与 X 系统性相关——对于创新型企业(X 在较高水平),Y 的波动范围可以从 0 到 5000;对于非创新型企业(X 在较低水平),Y 几乎总是 0。构造性异方差——不是因为数据的问题,而是因为"大量零 + 长尾"这个数据结构自带的。
虽然在大样本下,正态性的违反可以通过中心极限定理来缓解,但对 Y 的负值预测和边际效应的非线性是无法通过增加样本来解决的——这是模型设定的结构性问题,不是推断问题。
2.3 边际效应的经济含义被扭曲
OLS 假设 X 每增加一个单位,Y 增加 β₁ 个单位——无论 X 的起始值是什么。但对于"专利数"这类变量:
- 一家初始 R&D 投入为零的公司在首次投入 R&D 时——它可能从零专利变成有第一项专利(从 0 到 1 的跳跃)。
- 一家已经投入大量 R&D 的公司在继续增加投入时——它可能从 50 项专利增加到 55 项(从 50 到 55 的增量变化)。
这两个"增加"的经济含义完全不同——前者涉及"是否创新"这个广延边际(extensive margin),后者涉及"创新多少"这个集约边际(intensive margin)。 OLS 用一个单一的 β₁ 去概括这两个完全不同性质的边际效应——它平均了两者,但正确反映了任何一个。
三、删除零值——看似干净,实则危险
3.1 你把研究问题改了——而不是"处理了数据问题"
原始研究问题:"什么因素影响企业的专利产出?"
删除零值后的问题:"在已经有专利的企业中,什么因素影响专利的多少?"
这两个问题有完全不同的政策含义。 如果你是一个政策制定者,你想知道"补贴 R&D 是否能促进企业创新"——你需要知道的是:补贴能否让零专利的企业变成有专利(广延边际),以及补贴能否让有专利的企业产出更多专利(集约边际)。如果补贴主要通过广延边际起作用(推动企业从零到一),而你只研究了集约边际(有专利的企业),你就会得出"补贴对创新的影响不大"的错误结论——因为你把补贴最主要的效果从样本中删掉了。
3.2 样本选择偏误——删除不是随机的
删除 Y = 0 的观测不是随机抽样——你是在系统性地选择了一个子样本。如果进入"Y > 0"这个子样本的概率和你的 X 相关(比如 R&D 投入高的企业更可能进入有专利的组),你的 OLS 估计在子样本中就面临样本选择偏误。
如果 (这几乎肯定不成立——因为"Y > 0"本身就依赖于 ε),你的 OLS 系数在子样本中就是有偏的。
3.3 唯一的例外——你的研究问题本身就只关注 Y > 0 的群体
如果你论文的研究假设从一开始就明确表述为:"在已经从事出口的企业中,什么因素决定了出口额的多少?"——那么将样本限制在出口额 > 0 的企业是可辩护的。但你需要明确认识到:你的结论不能推广到"什么因素让企业开始出口"这个问题。而且,你仍然需要处理样本选择问题——进入"出口企业"这个子样本不是随机的。
四、实证文献中的成熟做法——从一个方程到两个方程
4.1 Tobit 模型——一个方程同时处理零和正数
Tobit 模型(Tobin, 1958)是最经典的"因变量在零处截断"模型。它假设存在一个潜变量 (如"创新的倾向"),只有当 时我们才观测到 ;当 时我们观测到 。
Tobit 的直觉:每个企业都有一个"创新的潜在倾向"()——它可能是负数(代表"离创新非常远")、零或正数。但我们只能观测到它的"非负部分"——当倾向足够大时,企业表现出实际的专利产出。
Tobit 的核心假设:同一个 X,通过同一个 β,同时决定了"是否从零变成正数"和"正数的大小"。 即——决定"是否创新"的因素和决定"创新多少"的因素是相同的,而且作用的方向和相对大小也相同。这个假设在很多场景下可能过强。
tobit y x1 x2, ll(0) // ll(0) 表示在 0 处左截断Tobit 的边际效应:在 Tobit 中,X 对 Y 的边际效应可以分解为两部分——
- 是"Y > 0 的概率"。
- 边际效应 = × 观测为正的概率。
- 当观测为正的概率很低时(大多数人是零),边际效应也很小——符合直觉。
4.2 两部模型 / 栅栏模型(Hurdle Model)——两个方程,两种决策
两部模型放松了 Tobit 的核心限制:允许"是否参与"和"参与多少"由不同的过程驱动。
第一部分(参与方程):一个二值选择模型(Probit/Logit)——什么因素决定了 Y 是否大于零?
第二部分(数量方程):在 Y > 0 的条件下,什么因素决定了 Y 的大小?
或者用截断正态/截断泊松/广义线性模型来估计第二部分的参数。
两部模型的优势:同一个 X 可以在参与方程中有一个符号(如"企业规模扩大了,更可能开始申请专利"),在数量方程中有另一个符号甚至不显著(如"在已经申请专利的企业中,规模更大并不一定意味着更多专利")。这在实际数据中非常常见——"是否出口"和"出口多少"的决定因素可能有本质不同。
* 第一部分:Probit
gen y_dummy = (y > 0)
probit y_dummy x1 x2
* 第二部分:截断回归或 OLS on ln(y) for y > 0
tobit y x1 x2 if y > 0, ll(0) // 截断 Tobit
* 或
reg ln_y x1 x2 if y > 0 // 对数线性(简单但不处理选择问题)注意:第二部分的简单 OLS(reg ln_y x1 x2 if y > 0)没有处理样本选择偏误——它暗含假设了"进入 Y > 0 子样本"和"给定进入后 Y 的大小"是两个独立的过程。如果这两个过程共享不可观测因素(如"企业家精神"同时影响是否创新和创新多少),这个 OLS 就是有偏的。
4.3 Heckman 选择模型——处理不可观测的选择
Heckman 选择模型允许两个方程共享不可观测的因素(通过相关系数 ρ)。
选择方程(Selection Equation):,观测到 Y 当 。
结果方程(Outcome Equation):,仅在 时被观测。
如果 ρ ≠ 0 → "Y 是否被观测到"和"Y 的大小"共享不可观测因素 → OLS 在子样本中有偏。Heckman 模型通过估计 ρ 并加入逆米尔斯比率(Inverse Mills Ratio)来修正这个偏误。
heckman y x1 x2, select(y_dummy = x1 x2 z1) twostep其中 z1 是排他性约束变量(Exclusion Restriction)——它影响"是否参与"但不直接影响"参与多少"。找到一个好的排他性约束是 Heckman 模型在实证中最难的一步。
4.4 计数模型——当 Y 是"0, 1, 2, 3, ..."计数数据
专利数、论文数、事故数——这些是非负整数计数。OLS 将它们当作连续变量来处理(预测出 2.37 个专利),而泊松/负二项回归将它们作为计数来建模。
泊松回归(Poisson Regression):
- 指数函数保证了预测值为正。
- 的含义:Xⱼ 增加一个单位,Y 的期望值乘以 (即变化约 )。
- 泊松的核心假设:方差 = 均值。但在专利数据中,方差通常远大于均值(过度分散,Overdispersion)。
负二项回归(Negative Binomial Regression):
- 通过额外参数 α 允许方差超过均值(过度分散)。
- 当 α = 0 时退化为泊松。
- 负二项回归是专利计数数据的实证标准。
poisson patent rnd size, robust
nbreg patent rnd size, robust零膨胀模型(Zero-Inflated Poisson/Negative Binomial):如果零过多(比泊松或负二项能解释的更多),可能存在"结构性零"——即有两种不同的零:一部分企业"永远不会创新"(结构性零),另一部分企业"可能创新但恰好没创新"(随机零)。
零膨胀模型用两个方程来分别模拟这两种零——一个 Logit/Probit 方程预测"是否是结构性零",一个计数方程预测计数(包括随机零)。
zip patent rnd size, inflate(rnd size) // 零膨胀泊松
zinb patent rnd size, inflate(rnd size) // 零膨胀负二项Vuong 检验可以用来比较零膨胀模型和对应非零膨胀模型——如果 p < 0.05,零膨胀模型显著更适合数据。
4.5 PPML(泊松伪最大似然)——不只是做计数的
PPML(Poisson Pseudo Maximum Likelihood)在最近的实证文献中(尤其是国际贸易中的引力方程估计)被广泛推荐。它的核心优势是:
- 在存在异方差时,泊松估计量仍然是一致的——你不需要假设方差 = 均值。
- 它可以处理因变量中的零值——不需要对零做什么特殊处理。
- 它给出的系数可以解读为半弹性(和 ln(Y) 对 X 的回归类似),但不需要 Y > 0。
ppml y x1 x2 // ppml 需要安装: ssc install ppmlhdfe
ppmlhdfe y x1 x2, absorb(fe1 fe2) // 支持高维固定效应PPML 在贸易文献中几乎已经取代了"ln(贸易额 + 1)"的做法——因为它诚实地处理了零贸易流(两个国家之间没有贸易),而且不需要加那个 +1。
五、ln(Y + 1) ——一个常见的"偷懒做法",为什么有问题?
面对一堆零 + 长尾的因变量,很多人的第一反应是:取个 ln 不就好了吗?但 ln(0) = −∞,没法取。于是有人加一个 1:
然后对 ln(Y+1) 跑 OLS。这个做法在文献中曾经非常普遍,但近年来越来越多地被批评。
问题一:+1 是任意的。为什么是 +1,不是 +0.1?不是 +10?不同的加法会改变系数的大小甚至显著性。选择你最喜欢的 +X 然后报告结果是典型的 p-hacking。
问题二:ln(Y+1) 的系数不能直接解释为百分比变化(和 ln(Y) 不同)。当 Y 很小时(比如 Y = 0 或 1),+1 占了 Y 的很大比例——ln(0+1) = 0,ln(1+1) ≈ 0.693,这个变化是 +1 造成的,而不是 Y 本身的变化。
问题三:在零很多的数据中,ln(Y+1) 在零处有一个人为的堆叠——这不是 Y 的自然分布特征,而是 +1 这个操作制造的。
替代方案:如果你想要一个和 ln(Y) 类似解释但能处理零的模型——用 PPML。如果你想要弹性解释——用泊松的系数(已经是半弹性了)。ln(Y+1) 的唯一优势是简单——但在大多数标准实证场景中,"简单"不应该成为首选理由。
六、一套选择框架——你该用哪个?
| 你的数据特征 | 你的研究问题 | 推荐方法 |
|---|---|---|
| Y 连续正数 + 很多零 | 关心 X 对 Y 的整体效应(不区分广延/集约) | Tobit |
| Y 连续正数 + 很多零 | 关心广延和集约是否由不同过程驱动 | 两部模型(Hurdle) |
| Y 连续正数 + 很多零 | 怀疑"是否 Y > 0"和"Y 的大小"共享不可观测因素 | Heckman 选择模型 |
| Y 是计数(0, 1, 2, ...) | 关心 X 对 Y 的半弹性 | 负二项回归(过度分散时)/ 泊松(等分散时) |
| Y 是计数 + 零过多 | 怀疑有"结构性零" | 零膨胀负二项(ZINB) |
| Y 是连续/计数 + 零 | 关心半弹性解释,有固定效应 | PPML(应用最广,尤其是贸易引力方程) |
| 你没有任何上述方法 | 需要快速基准 | OLS(仅作基准对比,放在稳健性中,不可作为主回归) |
| 你只关心 Y > 0 的群体 | 研究假设明确限定在 Y > 0 | 子样本回归(但需讨论选择偏误、做 Heckman 稳健性) |
| 你什么都不想做 | — | 不要用 ln(Y+1) + OLS |
七、常见误区
7.1 误区一:Tobit 是"处理零值的 OLS"
Tobit 不是 OLS 的"零值兼容版"——它的假设比 OLS 强得多(正态性、同方差、同一个 β 驱动广延和集约边际)。在数据分布严重偏离正态且方差随 X 变化时,Tobit 可能比 OLS 更糟糕——因为它不仅假设线性,还假设正态。
在实证中,Tobit 的估计结果对正态性和同方差的假设非常敏感。 如果你用 Tobit,请务必在稳健性检验中用其他模型(如两部模型或 PPML)确认核心结论的定性方向一致。
7.2 误区二:用泊松/负二项回归之后像 OLS 一样看系数
泊松的系数 不是"X 增加一个单位,Y 增加 个"。正确解读:
- Y 的期望值变化倍数 = 。如果 , → X 每增加一个单位,Y 的期望值增加约 35%。
- 对于小的 (< 0.1), 是一个好的近似(半弹性)。
7.3 误区三:认为"加了零膨胀就比不加好"
零膨胀模型在"零有两种来源"的假设是合理的场景下更有优势。但如果零的结构性来源在你的数据中并不存在(所有的零都来自同一个随机过程),零膨胀模型就是过度拟合——它用更多的参数拟合了不需要的复杂性。
在做零膨胀之前,先问自己:我的数据中的零有经济含义上的"两种不同的零"吗? 比如"永远不出口的企业"(结构性零)和"暂时不出口但有可能出口的企业"(随机零)——如果有,零膨胀有意义。如果所有零都是"今年恰好没出口的出口企业"——不需要零膨胀。
八、总结
因变量有大量零值的六条核心知识:
-
OLS 在零值堆积的数据中面临三个结构性问题:预测值可能为负、边际效应不能区分广延和集约、异方差和非正态由数据结构自带而非模型错误。
-
直接删除零值 = 改变了你的研究问题。 从"什么因素影响 Y"变成"在 Y > 0 的条件下,什么因素影响 Y 的大小"。除非你的研究假设一开始就限定了后者,否则这是在隐性篡改研究问题。
-
Tobit 是最经典的处理方案——但它的假设很强。 同一个 β 同时驱动"从零到正"和"正数的大小"。如果你的理论不支持这个假设,两部模型(Hurdle)允许不同的驱动因素。
-
对于计数数据(专利、论文、事故)——负二项回归是实证标准。 泊松在过度分散时标准误被低估;负二项通过 α 参数吸收了额外的分散度。
-
PPML 是处理"零 + 正数 + 异方差"的最稳健选择之一。 尤其在国际贸易和需要高维固定效应的场景中。它不假设分布形式,且自动处理了零值。
-
不要用 ln(Y+1) + OLS。 这个做法曾经很流行,但现在的审稿人几乎肯定会对 +1 的任意性提出质疑。用 PPML 或泊松替代。
一句话收尾:
"因变量里的一堆零不是你数据的缺陷——它们是数据在告诉你'这里有一个重要的经济决策:从没有到有'。OLS 把'没有'和'有一点'以及'有很多'强行压缩在一条直线上。Tobit 说'它们由同一个过程驱动'。两部模型说'不——决定要不要和决定要多少,可能是两件不同的事'。你的理论应该告诉你选哪个——而不是你的 Stata 菜单。"
九、B站/公众号呈现建议
- B站视频:建议用"从零到一"作为叙事主题。开场:一张柱状图——Y 轴上 70% 的观测堆在零上,剩下的 30% 拖着一个长长的右尾。旁白:"这就是你的因变量——70% 的公司没有任何专利,剩下的公司从 1 到 5000。你把这条数据喂给 OLS——OLS 拉出一条直线,穿过了负数区域(预测专利数为负)。你皱了皱眉,把零全都删了——然后你意识到,你把研究问题从'什么让公司创新'变成了'什么让已经在创新的公司更多产'——这是两个不同的问题,有两种不同的答案。"第一幕"为什么 OLS 不行":三个动画——预测值为负(回归线在零线下方穿过,红色闪烁警告)、一个 β 不能区分"从零到 1"和"从 50 到 55"(两个跳跃距离不同但 β 相同)、残差分布在零处有一个巨大的峰值(非正态 + 异方差)。第二幕"删掉零的代价":样本框的一半变暗消失(零值被删除),一个标注"研究问题被篡改了"的红戳盖在标题上。第三幕"四个成熟方案":四张卡片依次展开——Tobit("一个β,两个边际")、两部模型("两个方程,两种决策")、负二项("计数数据的专家")、PPML("处理零+异方差+固定效应的全能选手")。第四幕"ln(Y+1) 的陷阱":一个研究者打开一个工具箱,里面只有一个写着"+1"的按钮。他按下去——系数变了,显著性变了。他换了一个"旁边还有一个滑块,标注"+0.1 ... +10",不同加数对应不同的系数。旁白:"不要加那个 1——用 PPML。"
- 公众号:因变量零值堆积的三种数据结构(连续+零、计数+零、计数+过度零)建议各配一个分布直方图。选择框架表(七种场景 × 研究问题 × 推荐方法)做成信息图核心。Tobit → 两部模型 → Heckman 的递进逻辑(从"一个方程"到"两个方程相关"到"两个方程共享不可观测因素")做成演化路线图。ln(Y+1) 的问题(三个问题 + 为什么 PPML 是替代)做成"常见偷懒做法 vs 正确替代"双列对比卡。Stata 命令速查(tobit / heckman / nbreg / zinb / ppmlhdfe)做成代码卡片。
- 推荐标题:
- 主标题:《因变量有大量零值——还能跑 OLS 吗?删掉零会怎样?怎么做才对?》
- 备选标题:《70% 的 Y 都是零——Tobit、两部模型、负二项还是 PPML?》
- 新媒体标题:《删掉所有取值为零的观测——你以为在处理数据,其实在改研究问题》
- 金句提炼:
"因变量的一堆零不是在捣乱——它们在告诉你,这里有一个重要的经济决策:从没有到有。OLS 在零下面跑出了负数,因为你让它解释一个它不该解释的决定。删掉零值,等于把这个决定从你的样本里抹掉——你的结论不再关于'什么使人创新',而是'什么使已经在创新的人更多产'。"
"Tobit 说:'是否创新'和'创新多少'是同一个决策过程,同一个 X 同时决定了两个。两部模型说:'不——决定要不要和决定要多少,可能是两件不同的事'。你的理论应该告诉你谁是对的——而不是你的 Stata 输出。"
"ln(Y+1) + OLS 是一个诱惑——简单、快、审稿人以前也用过。但它那个 +1 是任意的——你为什么不加 0.1 呢?为什么不加 10 呢?不同的 +X 给你不同的显著性和不同的故事——这是你手里的一个旋钮,不是数据里的一个真理。"
"PPML 是处理零值 + 异方差 + 固定效应的最稳健武器。它不给你的因变量加任何东西——它只是用一种不给负预测的方式去估计你的参数。你的零还是零,你的正数还是正数。"