跳至主要内容

验证性因子分析:构念检验指南

了解 CFA 如何通过将观测指标与潜在构念联系起来来检验理论模型。学习使 CFA 成为测量验证与结构方程模型关键方法的步骤、假设与扩展。
· 9分钟 阅读

使用 AI 探索

当我们在问卷中回答诸如“我对我们的工作感到满意”或“我喜欢与同事合作”之类的陈述时,我们其实是在帮助研究者收集那些无法直接测量的概念的信息。以工作满意度、动机或焦虑为例。这些就是研究者所说的潜在构念。它们是无法被直接测量的抽象概念,但可以通过反应、行为或测验条目间接观察。

但问题在于,这些问题是否确实在测量目标概念,而不是测量其他东西。

这正是验证性因子分析(CFA)发挥作用的地方。CFA 是一种统计技术,用于验证观测变量(可将其视为问卷中的问题)与未观测构念(例如动机)之间是否存在关系。在深入理解 CFA 的过程中,重要的是将其与探索性因子分析(EFA)区分开来。与不预设假设、依赖数据寻找模式的 EFA 不同,CFA 从理论出发,并检验数据是否支持该理论。

作为结构方程模型(SEM)的重要组成部分,CFA 确保在研究概念之间的关系之前,概念本身已被可靠且有效地测量。

什么是验证性因子分析(CFA)?

CFA 关注的问题是:我的测量模型是否符合现实?

为更好理解这个问题,先来了解什么是测量模型。它是一张将观测指标(如问卷条目)与潜在构念(如抑郁、动机或满意度)联系起来的“地图”。在 CFA 中,研究者会基于理论或既有研究预先设定这张地图,然后检验数据是否符合该结构。

借用一个类比来比较 CFA 与 EFA:EFA 就像在一座新城市里不带地图到处探索;而 CFA 则像是在核对我们的 GPS 导航是否与实际街道一致。

CFA 的关键组成部分

潜在构念与观测指标

  • 潜在构念是无法直接测量的概念性思想,例如智力、倦怠和幸福感。
  • 观测指标是我们用来进行测量的项目,如测试分数、问卷条目和行为评分。

为了测量工作满意度,我们可能会使用以下条目:

  • 我对自己的工作感到满意。
  • 我对薪酬感到满意。
  • 我与同事的工作关系良好。

这些不同的回答都反映了同一个潜在因素,即工作满意度。

因子载荷

因子载荷告诉我们每个指标反映其潜在构念的程度。较高的载荷(通常大于 0.7)表示强烈代表性,而 0.4 至 0.7 之间的中等载荷在大多数情况下也足够。

可将因子载荷想象为手机信号强度。信号越强,对构念的指示就越好。

测量模型

测量模型根据理论规定哪些观测变量对应于哪些潜在构念。与由数据决定结构的 EFA 不同,CFA 预先施加这一结构,因此具有“验证性”而非“探索性”。

CFA 流程

介绍完核心概念后,我们逐步演示 CFA 的流程。这个 Python 演示使用 semopy 包。

步骤 1:模型设定

CFA 的第一步是定义理论模型。研究者决定存在哪些潜在构念,以及它们如何通过指标被观测到。

假设我们正在进行一项职场心理学研究。我们希望测量两个构念:

  • 工作满意度(JobSat),由三个问卷条目测量:

    • JS1:我对自己的工作感到满意。

    • JS2:我对薪酬感到满意。

    • JS3:我与同事关系良好。

  • 工作敬业度(WorkEng),由三个问卷条目测量:

    • WE1:我在工作中精力充沛。

    • WE2:我对工作充满热情。

    • WE3:我常常全身心投入工作。

我们也预期工作满意度与工作敬业度之间存在相关。

在专门的 Python 库 semopy 中,该模型可以表示为:

model_desc = """
JobSat =~ JS1 + JS2 + JS3
WorkEng =~ WE1 + WE2 + WE3
JobSat ~~ WorkEng
"""

其中:

  • =~ 定义了哪些观测条目载荷于某个潜在因子。

  • ~~ 定义两个潜在因子之间的相关。

步骤 2:数据收集

为获得良好的估计,CFA 通常需要相对较大的样本。常用的规则包括至少 200 个受试者,或每个待估参数至少 10 个观测。

为演示流程,我们先用一个小型数据集:

import pandas as pd
df = pd.DataFrame({
    "JS1": [3, 4, 5, 2, 4, 5, 3, 4],
    "JS2": [4, 5, 4, 3, 5, 4, 3, 5],
    "JS3": [2, 3, 4, 2, 3, 4, 2, 3],
    "WE1": [5, 4, 5, 3, 4, 5, 4, 5],
    "WE2": [4, 4, 5, 2, 3, 5, 3, 4],
    "WE3": [3, 5, 4, 3, 4, 5, 3, 4]
})

在实际研究中,数据集通常包含数百份问卷回答。

步骤 3:模型估计

有了数据和模型后,就可以进行参数估计。估计会给出因子载荷,表示构念与条目之间关系的强度,以及其他参数。

最常用的估计方法是极大似然(ML)。它假设观测数据是连续的并服从多元正态分布。在该假设不成立的情形(如偏态或分类数据)下,建议使用加权最小二乘(WLS)等估计量。

在 Python 中,使用 semopy:

from semopy import Model
mod = Model(model_desc)
mod.fit(df)

这会将 CFA 模型拟合到数据上,估计因子载荷、相关和方差。

步骤 4:模型拟合评估

模型估计完成后,下一步是评估模型是否与数据良好匹配。

常用的拟合指标包括:

  • 卡方(χ²):非显著值表示拟合较好,但对样本量非常敏感。
  • RMSEA(< 0.06):值越低表示近似拟合越好。
  • CFI(> 0.95):将目标模型与基线模型进行比较。
  • SRMR(< 0.08):估计预测相关与观测相关之间的平均差异。

在 Python 中:

from semopy import calc_stats
stats = calc_stats(mod)

print("Chi-square:", stats.get('chi2'))
print("Degrees of Freedom:", stats.get('df'))
print("CFI:", stats.get('cfi'))
print("RMSEA:", stats.get('rmsea'))
print("SRMR:", stats.get('srmr'))

输出将显示理论模型是否与观测数据相匹配。如果各项指标处于推荐阈值范围内,则可认为模型拟合良好。

步骤 5:模型修订

当拟合较差时,研究者通常会查看修正指数。它们会建议若释放某些参数(例如特定条目之间的误差协方差或额外的因子载荷)进行估计,模型拟合可能如何改善。

然而需要注意的是,修订必须由理论而非仅由统计结果来指导。否则模型可能在某个数据集上过拟合,但在其他数据上失效。

可以如下查看估计的参数(如因子载荷):

estimates = mod.inspect()
print(estimates[['lval', 'op', 'rval', 'Estimate']])

它展示了每个条目在其潜在构念上的载荷程度。载荷较低(< 0.4)的条目在测量真分数方面的可靠性可能值得质疑,因而可能成为删除或修订的候选。

Chi-square: Value    7.086071
Name: chi2, dtype: float64
DF: None
p-value: None
RMSEA: None
CFI: None
SRMR: None

Parameter estimates:
       lval  op     rval  Estimate  Std. Err    z-value   p-value
0       JS1   ~   JobSat  1.000000         -          -         -
1       JS2   ~   JobSat  0.991985  0.079766  12.436258       0.0
2       JS3   ~   JobSat  0.901155  0.074451  12.103973       0.0
3       WE1   ~  WorkEng  1.000000         -          -         -
4       WE2   ~  WorkEng  0.879609  0.083147  10.578944       0.0
5       WE3   ~  WorkEng  0.758832  0.072321  10.492585       0.0
6    JobSat  ~~  WorkEng -0.014492  0.017919  -0.808725  0.418674
7    JobSat  ~~   JobSat  0.283181  0.033256   8.515047       0.0
8   WorkEng  ~~  WorkEng  0.332945  0.042414   7.849889       0.0
9       JS1  ~~      JS1  0.182918  0.022465   8.142378       0.0
10      JS2  ~~      JS2  0.215892  0.023358   9.242882       0.0
11      JS3  ~~      JS3  0.293970    0.0243  12.097738       0.0
12      WE1  ~~      WE1  0.225318  0.030959   7.277931       0.0
13      WE2  ~~      WE2  0.304496  0.028694  10.611756       0.0
14      WE3  ~~      WE3  0.269805  0.023279  11.590123       0.0

一个情境化的快速示例

CFA 结果表明,工作满意度在 JS1(1.00)和 JS2(0.992)上的载荷很高,而在 JS3(0.901)上略低。这表明这三道问卷题目都能有效地测量工作满意度。由于所有因子载荷都明显高于 0.7 的常用阈值,因此没有条目看起来存在问题。

同样地,工作敬业度在 WE1(1.00)和 WE2(0.880)上的载荷较高,对 WE3(0.759)的载荷略低,但仍在可接受范围内。

工作满意度与 WorkEng 的关系很弱(-0.014),这表明在该样本中这两个构念相对独立。

基于这些结果,我们的做法是:

  • 保留工作满意度的三个条目(JS1、JS2、JS3),因为它们在该构念上的载荷均较高。

  • 保留工作敬业度的三个条目(WE1、WE2、WE3),因为每个条目都显示出有意义的载荷。

  • 无需进行实质性更改,因为因子载荷较高,且所有估计参数均显著。

这表明测量模型按预期运行。观测指标可以可靠地反映其潜在构念。

CFA 的前提与假设

为确保结果有效且可解释,CFA 依赖若干关键假设。理解这些假设有助于判断何时适合使用 CFA,以及当数据与假设不完全一致时应如何应对。

多元正态性

CFA 通常使用极大似然(ML)估计,它假设观测变量服从多元正态分布。

然而,当回答高度偏态或为分类数据时,该假设不成立。在这种情况下,因子载荷、标准误和拟合指数可能出现偏差。为此,可采用加权最小二乘(WLS)等备选方法,或使用如 Satorra-Bentler 校正等稳健方法,它们不要求严格的正态性。

足够的样本量

CFA 需要估计多个参数(因子载荷、方差、协方差)。样本量过小会导致估计不稳定、结论不可靠。

常见建议是至少 200 名参与者,或每个估计参数至少有 10 个观测。样本量越大,结果越精确、越具普遍性。

正确的模型设定

CFA 检验的是预先设定的理论模型。如果模型设定有误,例如将指标分配给了错误的潜在因子,CFA 本身无法纠正。

随机抽样

理想情况下,数据应来自随机样本,以便研究发现能够推广到研究数据之外。

非随机或有偏样本可能会产生仅反映样本特异性的结果,而非所研究的真实现象。

贝叶斯 CFA 也非常灵活,可根据先验知识适用于小样本、复杂模型或非正态数据。

与探索性因子分析(EFA)的比较

我们再来比较 EFA 与 CFA。EFA 是数据驱动的,在没有先验假设的情况下揭示潜在结构,所有因子载荷都被自由估计,允许数据“自己说话”。CFA 则是理论驱动的,在受限载荷下检验预先设定的假设结构。

研究者通常将两种方法串联使用:先用 EFA 探索潜在结构,再用 CFA 予以验证。这样的做法既兼顾经验发现,也实现理论验证。

CFA 的进阶主题与扩展

多层与纵向 CFA

  • 多层 CFA 用于处理嵌套数据,例如课堂中的学生。
  • 纵向 CFA 研究构念随时间的演变,有助于评估测量的稳定性、变化及时间不变性。

二阶与双因子模型

  • 二阶 CFA 通过建模一阶因子之间的关系来表示潜在变量,例如将言语、空间与数值能力作为更高阶构念(如一般智力)的指标。
  • 双因子模型将归因于一般因子的方差与源自特定分维度的方差区分开来。

贝叶斯 CFA

贝叶斯 CFA 是传统方法的灵活替代方案。它在参数估计中引入先验分布,从而增强模型稳定性,并适用于小样本、复杂模型或非正态数据。

CFA 的应用

CFA 广泛用于:

  • 量表验证:验证一组观测条目能否准确反映其拟测的理论构念,例如新的焦虑问卷。
  • 检验理论模型:评估潜在构念之间关系结构是否符合理论预期。
  • 群体间比较:检验测量等值性。例如,判断满意度量表在不同文化或性别群体中是否同样适用。
  • 改进与完善心理测量工具:识别薄弱或冗余条目,提升测验与问卷的信度与效度。

局限与挑战

在深入讨论 CFA 之后,也需要认识到其存在一定局限。其有效性取决于以下因素:

  • 理论基础的质量:薄弱或设定不佳的理论基础会导致模型拟合不佳。
  • 假设条件:数据分布非正态或样本量过小会影响估计,从而影响解释性。
  • 过拟合风险:为追求更好拟合而对模型进行过度修订,可能引入相关误差,这些调整或许在单一数据集上有效,但难以推广。

结论

验证性因子分析有助于在心理学、教育、市场营销或组织研究等领域架起理论与数据之间的桥梁,使对不可观测量的准确测量成为可能。它为验证潜在构念并奠定坚实的测量基础提供了框架。作为结构方程模型的一部分,CFA 随着多层、纵向与贝叶斯等扩展的发展而持续演进。

Vidhi Chugh

作者

Vidhi Chugh

我是一名 AI 策略与伦理专家,致力于在数据科学、产品与工程的交汇处构建可扩展的机器学习系统。曾入选全球“200 位顶尖商业与技术创新者”之一,我的使命是让机器学习走向大众,打破术语壁垒,让每个人都能参与这场变革。

FAQs

什么是验证性因子分析(CFA),它与探索性因子分析(EFA)有何不同?

CFA 是一种统计技术,用于检验预设的因子结构是否符合观测数据;而 EFA 在没有预设模型的情况下探索潜在结构。

在 CFA 中,什么是潜在构念与观测指标?

潜在构念是不可观测的概念,如动机或工作满意度。观测指标是可测量的条目,如问卷题目或测试分数,用以反映这些潜在构念。

CFA 的关键假设有哪些?

CFA 假设测量模型设定正确、满足多元正态性(用于 ML 估计)、具有足够样本量,并且理想情况下数据来自随机抽样。

如何评估我的 CFA 模型是否拟合良好?

可使用卡方、RMSEA、CFI 和 SRMR 等指标评估模型拟合度。参考阈值是否达标可判断理论模型与观测数据是否一致。

如何在 Python 中实现 CFA?

CFA 可在 Python 中借助 semopy 等包实现。本文提供了逐步演示,包括模型设定、估计以及对因子载荷与拟合指数的解读。

主题