验证性因子分析 CFA是什么?
验证性因子分析 CFA 回答的是预先设定的量表结构是否被数据支持。它不是让数据自由发现几个因子,而是检验题项是否按理论加载到指定潜变量上。
先用一句话理解
把 CFA 想成验收一份问卷。你原本认为 5 道题测信任、4 道题测满意度,CFA 要检查这些题是否真的主要对应各自概念,而不是乱成一团。
什么时候用
| 判断项 | 教科书式判断 |
|---|---|
| 适合用在 | 已有理论或成熟量表,需要验证题项-潜变量结构。 |
| 先不要用在 | 完全不知道题项结构,想探索可能有几个维度。那是 EFA。 |
| 最关键的前提 | 题项归属要事先指定,不能按结果随意改。 |
| 读表顺序 | 先看标准化载荷,再看 CR/AVE、区分效度和拟合指标。 |
| 论文表述边界 | CFA 证明的是测量结构可接受,不直接证明结构路径。 |
把它和相近方法分清楚
| 容易混淆的对象 | 怎么区分 | 初学者记法 |
|---|---|---|
| EFA | 探索潜在因子结构。 | 事前不强设题项归属。 |
| CFA | 验证预设测量结构。 | 题项归属来自理论。 |
| SEM | 在 CFA 基础上加入结构路径。 | 回答概念关系。 |
核心直觉和模型公式
预设测量模型
CFA 的测量关系可写成:
\[y_i=\Lambda\eta_i+\varepsilon_i\]
Lambda 中多数载荷按理论固定为 0,只允许题项加载到指定潜变量。
公式里的符号怎么读
| 符号 | 含义 | 在本页怎么理解 |
|---|---|---|
| y_i | 题项回答 | 问卷中的观测变量。 |
| η_i | 潜变量 | 信任、满意度、风险感知等概念。 |
| Λ | 载荷矩阵 | 题项和潜变量的对应关系。 |
| ε_i | 测量误差 | 题项中未被潜变量解释的部分。 |
| fit indices | 拟合指标 | CFI、TLI、RMSEA、SRMR 等。 |
专业使用口径
专业 CFA 报告要把信度、效度和模型拟合一起交代。
| 口径 | 专业写法 |
|---|---|
| 标准化载荷 | 题项载荷应足够高且方向一致。 |
| 聚合效度 | CR/AVE 等指标说明同一构念是否收敛。 |
| 区分效度 | 不同构念之间是否能区分。 |
| 拟合指标 | 整体测量模型是否可接受。 |
一步一步做:从问题到结果的五步
| 步骤 | 这一页具体做什么 | 做到什么程度才算读懂 |
|---|---|---|
| 1. 固定理论结构 | 每个题项对应哪个潜变量。 | CFA 不是自由探索。 |
| 2. 估计测量模型 | 读取标准化载荷。 | 低载荷题项要谨慎处理。 |
| 3. 检查信效度 | CR、AVE、区分效度。 | 只看 alpha 不够。 |
| 4. 看整体拟合 | CFI/TLI/RMSEA/SRMR。 | 拟合差说明结构有问题。 |
| 5. 决定是否进入 SEM | 测量合格后再看结构路径。 | 顺序不能倒。 |
结果怎么读:先读口径,再读数字
本页案例读表时,先记住这个口径:案例派生 alpha = ,第一因子解释率 = ,题项数 = 。
| 读表顺序 | 本页怎么读 | 不要这样读 |
|---|---|---|
| 先看载荷 | 题项是否测到指定构念。 | 载荷是 CFA 的第一关。 |
| 再看效度 | 同一构念是否收敛、不同构念是否区分。 | 效度比单个 p 值重要。 |
| 然后看拟合 | 整体结构是否可接受。 | 局部载荷好不代表整体好。 |
| 最后看修正 | 删题或相关误差是否有理论理由。 | 不要只为拟合好看。 |
初学者最容易错在哪里
| 误读 | 为什么错 |
|---|---|
| 把 EFA 结果直接说成 CFA | 错。CFA 要预设结构。 |
| 按拟合指标随意删题 | 风险高。删题要有理论理由。 |
| 只报 Cronbach alpha | 不够。CFA 还要载荷和效度。 |
| 测量未验证就做 SEM | 错。结构路径没有基础。 |
先看这个案例的结论
- 案例派生 alpha = ,第一因子解释率 = ,题项数 = 。
- 这里用财务变量秩分位派生题项做教学演示;正式问卷论文要换成真实题项,并报告每个题项载荷。
- 量表方法的顺序是:信度/同源方差/EFA/CFA/SEM,不能跳过测量模型直接解释路径。
变量要求和案例口径
| 字段 | 口径 |
|---|---|
| 数据 | 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 |
| 输出文件 | cfa_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
sem (finance -> roa lev cashflow) (governance -> top1 indep board), method(mlmv)
estat gof, stats(all)
export delimited using "$JOB_DIR/cfa_results.csv", replace
实际输出表
这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。
| 指标 | 数值 | 解释 |
|---|---|---|
| 样本 | 1200 obs / 196 firms / 2015-2020 | 来自共用案例 CSV |
| 因变量 | ln(1 + patent_count) | 企业创新产出 |
| 核心解释变量 | dfi_index | 数字普惠金融指数 |
| 输出文件 | cfa_results.csv | empirical-wizard 对应方法产物 |
| finance -> ln Patent | 0.1266 | 由 ROA/Cashflow/TobinQ/Lev 派生的财务潜变量路径 |
| governance -> ln Patent | 0.2058 | 由 Top1/Indep/Board 派生的治理潜变量路径 |
| DFI direct path | 0.0032 | 控制两个潜变量后的直接路径 |
| 模型 R² | 0.0777 | 教学路径模型的解释度 |
案例图
这是一张由同一份案例数据生成的页面内诊断图。

论文里怎么写
本文使用验证性因子分析 CFA对案例派生题项进行量表/潜变量诊断。结果见 cfa_results.csv。若信度、载荷或拟合指标未达到常用阈值,后续结构路径不宜直接作为强证据解释。
检查清单
- 先按理论指定题项属于哪个潜变量,不要让软件替你命名结构。
- 同时报告标准化载荷、CR、AVE 和整体拟合指标。
- 拟合不好时不能随意连误差项;每次修改都要有理论理由。