门槛效应是什么?
门槛效应回答的是核心关系是否在某个阈值两侧发生改变。它不是随便把样本分组,而是让数据估计或检验一个临界点,例如收入水平、市场化程度或污染强度超过某点后效应不同。
先用一句话理解
把门槛模型想成水温到 100 度才沸腾。水温从 20 到 80 度变化是一种状态,跨过 100 度后机制可能完全不同。门槛模型问的就是这种状态切换是否存在。
什么时候用
| 判断项 | 教科书式判断 |
|---|---|
| 适合用在 | 理论上存在非线性分段关系,且有明确的门槛变量。 |
| 先不要用在 | 只是想把样本随意分成高低组,或者阈值完全事后挑选。 |
| 最关键的前提 | 门槛变量应在机制上能解释状态切换。 |
| 读表顺序 | 先看门槛变量和估计阈值,再看不同区间的系数。 |
| 论文表述边界 | 门槛不是证明机制本身,只说明关系在区间上不同。 |
把它和相近方法分清楚
| 容易混淆的对象 | 怎么区分 | 初学者记法 |
|---|---|---|
| 线性模型 | 假设 X 的边际效应恒定。 | 没有状态切换。 |
| 交互项 | 预先指定分组或连续调节。 | 阈值通常人为给定。 |
| 门槛模型 | 估计或检验临界点。 | 关系按 q 是否跨过 c 分段。 |
核心直觉和模型公式
分段效应
一个简单门槛模型可写成:
\[Y_i=\beta_1X_iI(q_i\le c)+\beta_2X_iI(q_i>c)+\gamma W_i+\varepsilon_i\]
q 是门槛变量,c 是阈值;X 的效应在阈值两侧分别为 beta1 和 beta2。
公式里的符号怎么读
| 符号 | 含义 | 在本页怎么理解 |
|---|---|---|
| q_i | 门槛变量 | 决定样本进入哪个状态的变量。 |
| c | 阈值 | 状态切换的临界点。 |
| I(q<=c) | 指示函数 | 低门槛区间。 |
| β1, β2 | 分段系数 | 阈值两侧的核心效应。 |
| W_i | 控制变量 | 其他协变量。 |
专业使用口径
专业门槛分析要把阈值当作理论问题,而不是显著性分组工具。
| 口径 | 专业写法 |
|---|---|
| 门槛变量 | 解释为什么它会触发机制变化。 |
| 阈值估计 | 报告阈值、置信区间或检验方法。 |
| 分段系数 | 比较阈值两侧的方向和量级。 |
| 稳健性 | 检验单门槛、双门槛或替代门槛变量。 |
一步一步做:从问题到结果的五步
| 步骤 | 这一页具体做什么 | 做到什么程度才算读懂 |
|---|---|---|
| 1. 提出非线性机制 | 为什么会有临界点。 | 没有机制不要硬做门槛。 |
| 2. 选择门槛变量 | q 要能代表状态转换。 | 不要只选最显著变量。 |
| 3. 搜索或检验阈值 | 估计 c 并评估不确定性。 | 阈值也有估计误差。 |
| 4. 估计分段效应 | 分别读取阈值两侧 β。 | 重点是差异是否有意义。 |
| 5. 做稳健性 | 替代 q、区间、样本和门槛数量。 | 避免事后分组。 |
结果怎么读:先读口径,再读数字
本页案例读表时,先记住这个口径:low_segment = x;1.0889789534321794。
| 读表顺序 | 本页怎么读 | 不要这样读 |
|---|---|---|
| 先看 q | 门槛变量是否有理论基础。 | q 不合理,阈值无意义。 |
| 再看 c | 阈值在哪里,是否落在样本密集区。 | 尾部阈值不稳。 |
| 然后看 β1/β2 | 两侧效应是否真的不同。 | 只一侧显著不等于门槛成立。 |
| 最后看检验 | 门槛效应和阈值不确定性。 | 阈值要能复核。 |
初学者最容易错在哪里
| 误读 | 为什么错 |
|---|---|
| 把中位数分组叫门槛 | 错。门槛应被估计或有理论依据。 |
| 只看一侧显著 | 错。核心是两侧效应差异。 |
| 阈值落在极端尾部还强解释 | 风险高。样本支撑不足。 |
| 把门槛写成机制证明 | 不够。机制还需要额外证据。 |
先看这个案例的结论
- low_segment = x;1.0889789534321794。
- threshold_difference = iv_x_high_threshold;0.33187448558783844。
- 这些数字来自页面里的结果表;写论文时先解释数值含义,再讨论理论含义。
变量要求和案例口径
| 字段 | 口径 |
|---|---|
| 数据 | 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 |
| 输出文件 | threshold_results.csv |
| 角色要求 | 因变量、核心解释变量 |
| 依赖包 | 无额外 Stata 社区包要求 |
实际代码
下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。
import delimited "$DATA_PATH", clear varnames(1) encoding(UTF-8)
gen ln_patent1 = ln(1 + patent_count)
egen firm_id = group(stkcd)
xtset firm_id year
global y ln_patent1
global count_y patent_count
global x dfi_index
global controls roa lev size growth cashflow tobinq top1 dual board indep soe age
gen post = year >= 2018
bysort firm_id: egen pre_dfi = mean(cond(year < 2018, dfi_index, .))
quietly summarize pre_dfi, detail
gen treat = pre_dfi >= r(p50)
gen did = treat * post
gen high_patent = patent_count > 2
gen running_dfi = dfi_index - 260
gen rdd_treat = running_dfi >= 0
xthreg $y $x $controls, rx($x) qx(cashflow) thnum(1) bs(300)
export delimited using "$JOB_DIR/threshold_results.csv", replace
实际输出表
这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。
| model | term | coef | se | pvalue | N | R2 | status | threshold_var | threshold |
|---|---|---|---|---|---|---|---|---|---|
| low_segment | x | 1.0889789534321794 | 0.013720176266281477 | 4.177625535888817e-85 | 96 | 0.9985459809661258 | estimated | threshold | 5.43 |
| threshold_difference | iv_x_high_threshold | 0.33187448558783844 | 0.01967768026985169 | 1.3189293285325684e-29 | 96 | 0.9985459809661258 | estimated | threshold | 5.43 |
案例图
这是一张由同一份案例数据生成的页面内诊断图。

论文里怎么写
本文在共用企业面板样本上报告门槛效应,核心输出见 threshold_results.csv。结果解释时同时关注样本口径、变量构造、系数方向、标准误和适用前提,避免只凭单个 p 值完成方法选择。
检查清单
- 先说明门槛变量为何可能改变 X 对 Y 的作用。
- 报告门槛值、置信区间和 bootstrap 检验,不要只报告分段系数。
- 门槛附近样本太少时,分段效应可能非常不稳定。