实证方法教程 / ppml

PPML 引力方程

因变量不是连续正态时,不再硬套 OLS

这节课解决什么当因变量是二元、多分类、计数、审查、截断或选择性样本时使用。
先准备哪些变量因变量 / 核心解释变量
会看到哪张表ppml_results.csv
论文里怎么克制解释正文优先给可解释的边际效应或预测变化,而不是只贴 latent-index 系数。

PPML 引力方程是什么?

PPML 回答的是非负右偏结果或引力方程中,如何直接建模条件均值并保留零值。它虽然叫 Poisson pseudo maximum likelihood,但因变量不一定必须是整数。

先用一句话理解

把 PPML 想成直接预测一个非负均值。贸易额、投资额、专利数都不能低于零,且常常有零值;PPML 用指数均值处理这种非负和右偏,同时避免对数化丢掉零值。

什么时候用

判断项教科书式判断
适合用在因变量非负、右偏、有零值,或贸易引力模型等乘法结构。
先不要用在因变量可以为负,或研究对象不适合指数条件均值。
最关键的前提PPML 要求条件均值设定合理,并使用适当稳健标准误。
读表顺序先看 Y 是否非负和零值比例,再看 PPML 系数和固定效应。
论文表述边界PPML 是条件均值模型,不是只因为名字叫 Poisson 就限定计数数据。

把它和相近方法分清楚

容易混淆的对象怎么区分初学者记法
log OLS对 Y 取对数后 OLS。零值会丢失或需要加常数。
Poisson count处理整数计数。强调计数分布。
PPML直接建模非负条件均值。适合零值和异方差下的引力式模型。

核心直觉和模型公式

指数条件均值

PPML 设定条件均值为:

\[E[Y_i\mid X_i]=\exp(X_i\beta)\]

和 Poisson 计数模型形式相同,但 PPML 的使用重点是条件均值,不要求 Y 必须服从 Poisson 分布。

公式里的符号怎么读

符号含义在本页怎么理解
Y_i非负结果贸易额、投资额、专利数、排放量等。
X_i解释变量影响条件均值的变量。
β半弹性/log 均值系数X 对条件均值的指数影响。
exp(Xβ)条件均值保证预测值非负。
zero values零值PPML 可自然保留。

专业使用口径

专业 PPML 报告要说明为什么不用 log OLS,以及固定效应和收敛情况。

口径专业写法
零值处理说明 PPML 保留零值,而 log OLS 可能丢失零值。
异方差PPML 在异方差下通常比 log OLS 更稳健。
固定效应引力模型常有高维出口方、进口方、年份等 FE。
收敛和分离检查是否存在 separation 或不收敛问题。

一步一步做:从问题到结果的五步

步骤这一页具体做什么做到什么程度才算读懂
1. 判断 Y 是否非负PPML 要求条件均值为正。有负值要换模型。
2. 检查零值记录零值比例。这是 PPML 相对 log OLS 的优势之一。
3. 设定固定效应引力或面板模型要清楚吸收哪些维度。FE 决定识别来源。
4. 估计 PPML使用稳健或聚类标准误。注意收敛和分离。
5. 解释系数用百分比变化或半弹性解释。不要按线性水平变化解释。

结果怎么读:先读口径,再读数字

本页案例读表时,先记住这个口径:状态 = ppmlhdfe 失败 (需 ssc install ppmlhdfe) rc=198。

读表顺序本页怎么读不要这样读
先看 Y 口径是否非负、有零值、右偏。不匹配就不要用 PPML。
再看 FE哪些维度被吸收。高维 FE 会改变解释来源。
然后看系数β 在指数均值口径下解释。不是 OLS 水平系数。
最后看收敛是否存在 separation 或样本被删。收敛问题要披露。

初学者最容易错在哪里

误读为什么错
认为 PPML 只能用于整数计数错。它常用于非负连续结果。
用 log(Y+1) 随便替代风险高。加 1 改变量纲且处理零值粗糙。
不报告固定效应错。PPML 引力模型高度依赖 FE 结构。
忽略 separation错。分离会导致样本或变量被自动处理。

先看这个案例的结论

  • 状态 = ppmlhdfe 失败 (需 ssc install ppmlhdfe) rc=198。
  • 这些数字来自页面里的结果表;写论文时先解释数值含义,再讨论理论含义。

变量要求和案例口径

字段口径
数据CSMAR 风格 A 股企业创新面板
原始样本196 家上市公司,2015-2020 年,约 1200 个公司-年观测;各方法有效样本以本页输出表 N 为准
因变量patent_count;回归页通常使用 ln(1 + patent_count)
核心解释变量dfi_index,数字普惠金融指数;部分案例输出展示的是标准化后的 dfi_index
控制变量roa、lev、size、growth、cashflow、tobinq、top1、dual、board、indep、soe、age
输出文件ppml_results.csv
角色要求因变量、核心解释变量
依赖包ppmlhdfe

实际代码

下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。

log using "/root/workspace/empirical-wizard/workspace/70a328eb/analysis.log", replace text
global JOB_DIR "/root/workspace/empirical-wizard/workspace/70a328eb"
set more off
adopath + "/root/ado/plus"
global DATA_PATH "/root/workspace/empirical-wizard/workspace/test_e2e/csmar_innovation.csv"
import delimited "/root/workspace/empirical-wizard/workspace/test_e2e/csmar_innovation.csv", clear case(preserve)
capture confirm global JOB_DIR
if _rc global JOB_DIR "."
quietly duplicates drop
* ── PPML (Poisson 伪极大似然,引力方程/非负计数) ──
capture noisily ppmlhdfe patent_count dfi_index roa lev size growth cashflow tobinq top1 dual board indep soe age, absorb(stkcd year), cluster(stkcd)
local _rc = _rc
tempname fh
capture file close `fh'
file open `fh' using "$JOB_DIR/ppml_results.csv", write replace
file write `fh' "项目,值" _n
file write `fh' "因变量,patent_count" _n
if `_rc' == 0 {
    capture local _b : display %9.4f _b[dfi_index]
    capture local _se : display %9.4f _se[dfi_index]
    capture local _n = e(N)
    capture local _r2 : display %9.4f e(r2_p)
    file write `fh' "核心系数 (semi-elasticity),`_b'" _n
    file write `fh' "标准误,`_se'" _n
    file write `fh' "Pseudo R²,`_r2'" _n
    file write `fh' "样本量,`_n'" _n
}
else file write `fh' "状态,ppmlhdfe 失败 (需 ssc install ppmlhdfe) rc=`_rc'" _n
file close `fh'
di "PPML 完成"
log close

实际输出表

这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。

项目
因变量patent_count
状态ppmlhdfe 失败 (需 ssc install ppmlhdfe) rc=198

案例图

这是一张由同一份案例数据生成的页面内诊断图。

PPML 引力方程 的共用案例输出图。
PPML 引力方程 的共用案例输出图。

论文里怎么写

本文在共用企业面板样本上报告PPML 引力方程,核心输出见 ppml_results.csv。结果解释时同时关注样本口径、变量构造、系数方向、标准误和适用前提,避免只凭单个 p 值完成方法选择。

检查清单

  • 先确认因变量非负且存在零值或异方差风险,PPML 才有明显优势。
  • 高维固定效应下要检查收敛和 separated observations。
  • PPML 系数是半弹性/指数均值口径,不能按 OLS 水平系数读。

返回教程库 · 查看共用案例