Driscoll-Kraay 标准误是什么?
Driscoll-Kraay 标准误处理的是面板误差中的横截面相关、异方差和序列相关。它不改变回归系数,只改变推断方式,让标准误对更复杂的误差结构稳健。
先用一句话理解
把 Driscoll-Kraay 想成承认不同地区或企业会一起受冲击。普通标准误假设误差相互独立,但金融危机、宏观政策或行业冲击会让很多单位同时波动。
什么时候用
| 判断项 | 教科书式判断 |
|---|---|
| 适合用在 | 面板数据中担心横截面相关和时间序列相关同时存在。 |
| 先不要用在 | 时间维度非常短,无法可靠估计 HAC 型标准误。 |
| 最关键的前提 | Driscoll-Kraay 是推断修正,不是识别策略。 |
| 读表顺序 | 先确认系数同主规格,再比较标准误和 p 值变化。 |
| 论文表述边界 | 只能说推断对横截面相关更稳健,不能说解决内生性。 |
把它和相近方法分清楚
| 容易混淆的对象 | 怎么区分 | 初学者记法 |
|---|---|---|
| Cluster SE | 按某一层级允许组内相关。 | 常见但未必处理跨截面相关。 |
| Newey-West | 处理单一时间序列自相关和异方差。 | 不是面板横截面相关。 |
| Driscoll-Kraay | 允许面板中广泛横截面相关和序列相关。 | 适合面板稳健推断。 |
核心直觉和模型公式
横截面平均上的 HAC
Driscoll-Kraay 可以理解为对横截面平均得分做 HAC 修正:
\[SE_{DK}=HAC\left(\frac{1}{N}\sum_i X_{it}\hat{\varepsilon}_{it}\right)\]
它修正的是协方差矩阵,因此系数点估计通常不变,变化的是标准误和显著性。
公式里的符号怎么读
| 符号 | 含义 | 在本页怎么理解 |
|---|---|---|
| N | 截面数量 | 企业、地区或个体数量。 |
| t | 时间期 | 年份、季度或月份。 |
| epsilon_hat | 残差 | 主模型未解释的部分。 |
| HAC | 异方差自相关稳健修正 | 允许时间相关结构。 |
| SE_DK | Driscoll-Kraay 标准误 | 对横截面相关更稳健的推断。 |
专业使用口径
专业 DK 报告要明确它只是标准误替代口径。
| 口径 | 专业写法 |
|---|---|
| 误差风险 | 说明为什么担心横截面相关或序列相关。 |
| 滞后阶数 | 报告使用的 lag 或带宽选择。 |
| 系数不变 | 强调这是推断修正,不是新模型识别。 |
| 对照标准误 | 可与 cluster SE 或普通 robust SE 对照。 |
一步一步做:从问题到结果的五步
| 步骤 | 这一页具体做什么 | 做到什么程度才算读懂 |
|---|---|---|
| 1. 固定主模型 | 先确定同一套回归系数。 | DK 不应改变主规格。 |
| 2. 判断误差结构 | 看是否可能有共同冲击或序列相关。 | 风险要具体。 |
| 3. 选择滞后阶数 | 根据 T 和经验规则设定 lag。 | T 短时要谨慎。 |
| 4. 计算 DK SE | 用 DK 协方差替换标准误。 | 系数通常不变。 |
| 5. 比较推断 | 看 p 值和置信区间是否仍支持结论。 | 不要写成新效应。 |
结果怎么读:先读口径,再读数字
本页案例读表时,先记住这个口径:kernel = Driscoll-Kraay (Bartlett)。
| 读表顺序 | 本页怎么读 | 不要这样读 |
|---|---|---|
| 先看系数 | 是否和主规格一致。 | DK 不是换系数。 |
| 再看标准误 | 是否比 cluster 或 robust 更大。 | 显著性变化是推断风险信号。 |
| 然后看 lag | 滞后阶数是否合理。 | lag 不说明会影响可复核性。 |
| 最后看结论 | 推断稳健时再说结果对相关结构不敏感。 | 不能说识别问题解决。 |
初学者最容易错在哪里
| 误读 | 为什么错 |
|---|---|
| 把 DK 当内生性处理 | 错。它只修正标准误。 |
| 不报告 lag | 不够。推断不可复核。 |
| T 很短仍强用 | 风险较高。HAC 估计依赖时间维度。 |
| 系数变了还说只是标准误 | 要检查代码。DK 不应改变估计方程。 |
先看这个案例的结论
- kernel = Driscoll-Kraay (Bartlett)。
- lag = 2。
- 状态 = xtscc 失败 (需 ssc install xtscc) rc=199。
- 这些数字来自页面里的结果表;写论文时先解释数值含义,再讨论理论含义。
变量要求和案例口径
| 字段 | 口径 |
|---|---|
| 数据 | 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 |
| 输出文件 | driscoll_kraay_results.csv |
| 角色要求 | 因变量、核心解释变量、个体 ID、时间变量 |
| 依赖包 | xtscc |
实际代码
下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。
log using "/root/workspace/empirical-wizard/workspace/d2b9f5c9/analysis.log", replace text
global JOB_DIR "/root/workspace/empirical-wizard/workspace/d2b9f5c9"
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 "."
* 自动去除完全重复行(同列同值),避免 N 虚增与 xtset 失败
quietly duplicates drop
local idvar ""
local timevar ""
capture confirm variable stkcd
if !_rc {
capture confirm numeric variable stkcd
if _rc {
tempvar __ewiz_id
capture encode stkcd, gen(`__ewiz_id')
if !_rc local idvar "`__ewiz_id'"
}
else {
local idvar "stkcd"
}
}
else {
di as text "面板ID变量不存在,跳过 xtset ID:stkcd"
}
capture confirm variable year
if !_rc {
capture confirm numeric variable year
if _rc {
tempvar __ewiz_time
capture encode year, gen(`__ewiz_time')
if !_rc local timevar "`__ewiz_time'"
}
else {
local timevar "year"
}
}
else {
di as text "时间变量不存在,跳过 xtset time:year"
}
if "`idvar'" != "" & "`timevar'" != "" {
capture xtset `idvar' `timevar'
}
* ── Driscoll-Kraay 标准误 (xtscc) ──
capture noisily xtscc patent_count dfi_index roa lev size growth cashflow tobinq top1 dual board indep soe age, lag(2) fe
local _rc = _rc
tempname fh
capture file close `fh'
file open `fh' using "$JOB_DIR/driscoll_kraay_results.csv", write replace
file write `fh' "项目,值" _n
file write `fh' "因变量,patent_count" _n
file write `fh' "核心解释变量,dfi_index" _n
file write `fh' "kernel,Driscoll-Kraay (Bartlett)" _n
file write `fh' "lag,2" _n
if `_rc' == 0 {
capture local _b : display %9.4f _b[dfi_index]
capture local _se : display %9.4f _se[dfi_index]
capture local _t = _b[dfi_index]/_se[dfi_index]
capture local _t_s : display %9.3f `_t'
capture local _p : display %9.4f 2*ttail(e(df_r), abs(`_t'))
capture local _n = e(N)
file write `fh' "系数,`_b'" _n
file write `fh' "DK 标准误,`_se'" _n
file write `fh' "t 值,`_t_s'" _n
file write `fh' "p 值,`_p'" _n
file write `fh' "N,`_n'" _n
}
else {
file write `fh' "状态,xtscc 失败 (需 ssc install xtscc) rc=`_rc'" _n
}
file close `fh'
di "Driscoll-Kraay 完成"
log close
实际输出表
这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。
| 项目 | 值 |
|---|---|
| 因变量 | patent_count |
| 核心解释变量 | dfi_index |
| kernel | Driscoll-Kraay (Bartlett) |
| lag | 2 |
| 状态 | xtscc 失败 (需 ssc install xtscc) rc=199 |
案例图
这是一张由同一份案例数据生成的页面内诊断图。

论文里怎么写
本文在共用企业面板样本上报告Driscoll-Kraay 标准误,核心输出见 driscoll_kraay_results.csv。结果解释时同时关注样本口径、变量构造、系数方向、标准误和适用前提,避免只凭单个 p 值完成方法选择。
检查清单
- 先确认面板存在横截面相关或序列相关风险,DK 是标准误修正。
- 说明时间维度是否足够支撑 Driscoll-Kraay 推断。
- DK 改变的是标准误和显著性,不改变回归系数本身。