Day 08 · 手写教程
探索性因子分析 EFA
不是几个题随便装一个因子
EFA 是什么?
EFA 是探索性因子分析。它适合在你还不完全确定题项结构时使用:数据会告诉你这些题项大致可以分成几个维度,每个题项更像属于哪个因子。它的关键词是“探索”,不是“验证”。
这个案例怎么读?
本案例使用 6 个派生题项演示。第一因子解释率为 0.1876,第二因子解释率为 0.1719,说明没有一个因子占据绝对主导。正式 EFA 还应继续看 KMO、Bartlett、特征根、碎石图和旋转后的载荷矩阵。只看解释率是不够的。
实际操作怎么做?
先检查题项之间是否适合做因子分析。如果 KMO 很低,题项之间相关性不足,EFA 的意义就很弱。然后提取因子,决定因子数,再做旋转。旋转后的载荷矩阵才是解释重点:每个题项应该在某个因子上有较高载荷,并且不要在多个因子上同时很高。
论文里怎么写?
可以写:本文采用探索性因子分析考察量表题项的潜在维度结构。结果显示,题项在若干因子上呈现较为清晰的载荷分布,说明量表具有可解释的维度结构。若出现交叉载荷或低载荷题项,则需结合题项含义进一步修订量表。
常见错误
不要先想要几个因子,再强行让软件提几个因子。也不要看到一个题项载荷最高就直接命名因子;因子命名必须回到题项文本和理论含义。
本页案例代码和输出
下面这部分是本教程对应的实际案例材料,方便你把前面的解释和真实输出对上。
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
factor roa lev size growth cashflow tobinq top1 indep, factors(2) pcf
rotate, varimax
estat kmo
export delimited using "$JOB_DIR/efa_results.csv", replace
输出表
| 指标 | 数值 | 解释 |
|---|---|---|
| 样本 | 1200 obs / 196 firms / 2015-2020 | 来自共用案例 CSV |
| 因变量 | ln(1 + patent_count) | 企业创新产出 |
| 核心解释变量 | dfi_index | 数字普惠金融指数 |
| 输出文件 | efa_results.csv | empirical-wizard 对应方法产物 |
| 案例派生 alpha | 0.0409 | 用财务变量秩分位派生题项 |
| 第一因子解释率 | 0.1876 | Harman 单因素检验最先看的比例 |
| 第二因子解释率 | 0.1719 | EFA 需要同时看多个因子 |
| 题项数 | 6 | roa/lev/size/growth/cashflow/tobinq |
案例图

写作检查
本文使用EFA 探索性因子分析对案例派生题项进行量表/潜变量诊断。结果见 efa_results.csv。若信度、载荷或拟合指标未达到常用阈值,后续结构路径不宜直接作为强证据解释。
- 确认本页使用的因变量、核心解释变量、控制变量与论文主模型一致。
- 先看表格里的样本口径,再看系数、p 值或诊断指标。
- 代码里的输出文件名要能对应网页展示的结果表。
- 先报告信度/效度,再解释潜变量路径。
- 不要把案例派生题项当成真实问卷结论。