做问卷研究的同行应该都遇到过这种情况:论文外审回来,审稿人的第一条修改意见就是“请检验你的数据是否存在共同方法偏差(CMB)”。尤其当自变量、因变量、中介变量都是同一批受访者一口气填完的时候,这个问题基本避不开。我第一次收到这种意见时,先去弄懂了一个更基础的问题:偏差平方和到底说明什么?简单说,问卷里任何一个观测分数的变异都不是完全由你想测的那个构念决定的,它至少还混进了测量方式本身带来的系统变异和随机误差。而共同方法偏差检验,本质上就是在回答这个偏差平方和里有多少是“方法贡献”的。要回答审稿人,最常用也最被认可的思路之一,就是在Amos里做潜在误差变量控制法。这篇文章我打算把背后的统计逻辑、Amos里的完整操作流程、模型比较的方法,以及我实际跑数据时踩过的坑一次性讲完。
1. 从偏差平方和说起:问卷数据里的“变异”到底是谁的
1.1 方差分析里的平方和分解,放到测量场景会失效
方差分析里我们天天用“总平方和 = 组间平方和 + 组内平方和”,也就是把样本总变异拆成“处理带来的差异”和“随机误差带来的差异”。这个分解在实验设计里没问题,因为自变量是你主动操纵的,随机化已经把大部分无关变异洗掉了。但问卷研究不是这个逻辑。你在问卷里测到的任何一个分数,比如“工作满意度”,受访者打出的这个分里包含的信息要复杂得多。
从测量理论的角度看,一个观测分数X的变异可以拆成:真正的构念变异(T)、测量工具带来的系统变异(M)、以及随机误差变异(E)。写成公式就是:
Var(X) = Var(T) + Var(M) + Var(E)
这里Var(M)就是共同方法偏差的来源。问题是,我们做统计检验时,心里默认的模型其实是Var(X) = Var(T) + Var(E),完全忽略了M的存在。于是偏差平方和分解出来的显著效果,一部分其实是方法变异在“注水”。这就是为什么单靠传统的偏差平方和逻辑,没法判断问卷结果到底是真实构念关系还是测量方式带来的假象。
1.2 共同方法偏差的破坏力具体体现在哪里
很多人以为共同方法偏差只是“数据有点脏”,影响不大。实际上它的破坏力比想象中大得多。最典型的情况是:两个构念之间本来没有关系,但因为受访者用同一个量表、在同一种心态下填写,导致两个变量共享了大量方法变异,偏差平方和检验就会出现显著的“伪相关”。更隐蔽的情况是,它会把真实存在的相关关系夸大,或者在某些调节模型中把交互效应压低甚至扭转方向。
我见过一个真实的案例:某论文用自我报告的方式测量了领导风格和员工创新行为,相关性高达0.62,看起来很理想。但加入共同方法偏差的控制后,这个相关直接降到0.31。也就是说,原来的相关里有一大半是变量之间的“同源偏差”贡献的。这种情况下,如果审稿人没有要求做CMB检验,这篇论文的机制结论可能就建立在半真半假的证据上。所以现在管理学、心理学、组织行为学、营销学的主流期刊,基本都默认要求报CMB检验结果。
1.3 所以“偏差平方和说明什么”的答案是什么
回到标题里那个问题:偏差平方和说明什么?它说明的是数据变异的结构。如果总平方和可以分解成多个来源,那么每个来源对总变异的贡献程度,决定了你统计结论的可靠程度。在做问卷研究的语境下,偏差平方和告诉我们:一个显著的效应量,可能来自构念的真实差异,也可能来自测量方法的共同变异,还可能只是随机误差带来的波动。
知道这一点,你就明白为什么不能只在论文里放一张相关分析表就直接跑回归了。你必须证明你的测量变异里,方法这一块没有严重干扰你的结论。接下来的问题就是怎么证明,于是轮到Amos和潜在误差变量控制法登场。
2. 潜在误差变量控制法:核心原理、约束逻辑与替代方案对比
2.1 一个没有观测指标的潜变量是怎么“吸收”方法变异的
潜在误差变量控制法,英文叫Unmeasured Latent Method Construct,通常缩写为ULMC,也有文献叫Common Latent Factor法。它的做法很直接:在你已经建好的理论测量模型基础上,额外画一个潜变量,这个潜变量没有任何专属的观测指标,但从它出发,分别画箭头指向模型里的每一个观测变量。
这个没有专属指标的潜变量,就是所谓的“方法因子”。它的作用是吸收所有观测变量共享的那部分变异,也就是前面说的Var(M)。理论上,当这个方法因子进入模型之后,剩余在各观测变量里的方差就主要是构念真实变异和随机误差。然后你再去看构念与构念之间的路径系数、相关系数,会发现它们“瘦身”了,而那些被挤掉的变异,就是共同方法偏差的贡献。
2.2 ULMC省掉了一个关键前提:你不需要知道方法到底是什么
有人可能会问:既然要检验共同方法偏差,为什么不直接在问卷里测一下“社会赞许性”“消极情绪”这些可能的方法来源?这确实是一种办法,叫直接法,但它的前提是你得事先知道主要的方法偏差来源是什么,并且量表里已经加入了对应测量工具。很多已发表的研究,数据是老早就收好的,问卷里根本没放这些额外变量,这时候唯一的选择就是事后性的检验方法。
ULMC的优势就在这里:它不需要你事先测量具体的方法来源,而是把所有观测变量的共同变异统统打包进一个未测量的潜变量里。这种做法有点像拿一个布袋把所有散落的东西全部兜住,你不需要确切知道里面哪颗是糖哪颗是盐,只需要知道这一袋东西如果拿走之后,桌子干净了多少。正是这种“不知道来源也能检验”的特性,让它成为使用频率最高的CMB检验方法之一。
2.3 和Harman单因子检验等方案比,ULMC好在哪
很多教材首先介绍Harman单因子检验:把所有测量条目丢进探索性因子分析,看第一个因子的方差解释率是否超过40%或50%。这个方法操作极其简单,但问题也最明显:它标准模糊、灵敏度低,多数情况下只能作为辅助证据,单独使用在论文里基本说服不了专业审稿人。尤其在今天,你只报Harman单因子检验,几乎一定会被追问“有没有做更严格的检验”。
和Harman比,ULMC最大的优势是它在结构方程模型框架内执行,可以直接检验方法因子加入前后的模型拟合差异和路径系数变化,结论更硬。和标记变量法(Marker Variable)比,ULMC不需要额外设计一个理论上与构念无关的标记变量,数据要求更低。当然,ULMC也有自己的软肋,比如方法因子载荷如果太自由,模型容易不识别;这一点后面详细讲。下表是我自己对几种常见方法的评价:
| 检验方法 | 操作门槛 | 审稿人接受度 | 是否需要额外变量 | 主要局限 |
|---|---|---|---|---|
| Harman单因子 | 低 | 一般不单独接受 | 否 | 灵敏度低,无统计检验 |
| ULMC(潜在误差变量控制法) | 中 | 较高 | 否 | 需注意模型识别问题 |
| 标记变量法 | 高 | 高 | 是 | 标记变量选择难度大 |
| 直接测量方法来源 | 中 | 高 | 是 | 需事先知道方法来源 |
2.4 方法因子与理论潜变量到底该不该相关
做ULMC时有一个关键设置:方法因子和理论潜变量之间的协方差,设成自由估计还是固定为0。多数论文采用的做法是固定为0,也就是让方法因子和构念之间完全正交。好处是方法因子只提取观测变量中独立于所有理论构念的共同变异,模型更容易识别,解释也干净。
但现实中测量方法的影响常常和构念本身有关系,比如一个情绪化严重的受访者,填积极性题和填满意度题时的分数都会被消极情绪同时污染,而这个消极情绪又和满意度本身相关。这种情况下,强制正交可能会低估方法因子的贡献,甚至导致模型拟合变差。我在自己研究中通常先跑正交版,如果模型无法识别或拟合不稳定,再尝试允许相关但把相关参数约束在较小范围内。不过要提醒一句:允许相关会导致理论潜变量间的相关性被方法因子间接解释,解读时要格外谨慎。
3. Amos建模实操:从理论模型到方法因子的完整画图流程
3.1 数据准备与启动Amos Graphics
开始之前,先把数据文件准备好。Amos支持.sav、.xls、.csv等格式,但我建议数据里只保留需要分析的观测变量,不要放一堆无关文本。缺失值方面,Amos默认用列表删除法,如果缺失比例一多,样本会损失明显,所以最好事先用多重插补或期望最大化法处理一遍。数据量上,做ULMC比普通CFA更吃样本,经验上N最好达到200以上,参数数量和样本量的比例尽量保证1:10甚至更宽裕。
打开Amos,你会看到Graphics界面,左侧是绘图工具栏,右侧是数据输入区域。Amos不会像Mplus那样需要写大量语法,所有模型关系都在图形界面里完成。我第一次用这个软件时觉得画图麻烦,但熟悉之后会发现它比写语法直观得多,尤其是排查模型结构问题时,图上一眼就能看到哪里接错线。
3.2 第一步:画出你的理论测量模型
先把所有潜变量用椭圆工具画出来,观测变量用矩形工具画出来。比如你有三个构念A、B、C,每个构念下对应4个观测题项,那就画3个椭圆和12个矩形。然后做两件事:把每个观测变量拖拽到对应的矩形里,完成变量赋值;再从每个潜变量出发,用单向箭头指向它对应的4个观测变量,表示因子载荷路径。
指向完毕之后,给每条因子载荷路径设置参数名称。Amos里你可以在属性面板里给每条回归权重起名字,比如a1、a2、a3,也可以直接用默认的编号。默认编号的优点是省事,缺点是你固定参数时要找到具体路径。我的习惯是先给所有路径命名,命名规范用构念名首字母加编号,例如A1、A2、A3,这样后面设定固定参数时不容易混乱。
3.3 第二步:添加方法因子并连接所有观测变量
理论测量模型画好后,再画一个新的潜变量。建议给它起名叫CMV或Method。重点来了:这个潜变量不要连接任何专属的矩形指标,直接从它画单向箭头,分别指向模型里的每一个观测变量,包括所有构念下的题项。也就是说,每个观测变量在原来指向理论潜变量的基础上,现在多了一条来自方法因子的路径。
画完这些箭头之后,模型的自由参数会大幅增加。如果不加任何限制,模型会因自由度不足而无法识别。所以必须固定部分参数,这里给出我可复现的参数设置方案:
- 方法因子的方差固定为1。
- 方法因子指向第一个观测变量的因子载荷固定为1。
- 其余方法因子载荷自由估计。
- 理论潜变量之间允许相关(画双向箭头),理论潜变量的方差可自由估计。
- 所有观测变量的误差项方差自由估计。
- 方法因子与理论潜变量之间不画双向箭头,保持正交。
这套方案对大多数数据结构都可以直接跑通。如果你担心只有一条载荷固定为1会导致方法因子尺度不稳定,也可以把方法因子指向所有观测变量的路径载荷设置成等值约束。在Amos里选中路径后,按住Ctrl键再点选其余路径,然后右键打开对象属性,在所有选中路径的Regression Weight一栏填入同一个标签,例如“b1”,这样所有载荷会被强制相等。等值约束的好处是大幅降低自由参数,提高模型识别概率,坏处是它默认所有观测变量受方法因子的影响程度一样,这个假设比较强,如果实际数据并不符合,模型拟合会变差。所以我的默认首选项还是“方差固定1 + 首条载荷固定1”的方案。
3.4 第三步:设置分析属性与运行模型
模型图画完之后,工具栏上的“拟合”按钮会从灰色变成可用状态。但在点它之前,先通过“查看数据”功能确认数据已经成功关联,再进入分析属性面板做几项关键设置:估算方法选择最大似然法;输出选项里勾选标准化估计、修正指数、样本矩和协方差矩阵;如果你担心数据正态性不足,勾选Bollen-Stine Bootstrap作为补充验证。
设置完成后,点击运行按钮,Amos会弹出模型运行状态窗口。如果一切顺利,左侧的模型图上会显示红色字体提醒,而不是错误信息。此时先保存分析结果,然后到左侧路径列表里找到你刚才运行的模型,右键重命名并保留。之所以要保留模型A,是因为接下来的检验需要和模型B互相比较,两个模型的输出必须都有保存。
3.5 如何得到“加入方法因子之后”的模型B
这里有一个细节容易犯错:不要直接在模型A上面修改成模型B再运行,然后就把模型A覆盖掉了。正确做法是把模型A另存为新模型,比如命名为“ModelB_ULMC”,再在新模型上添加方法因子。Amos的多个模型可以在同一个项目中并存,你也可以用Models面板管理它们。这样后面做模型比较时,两个模型的输出路径都非常清晰,不容易错乱。
如果你用的是老版本Amos,最好直接把两个模型文件单独保存成两个.amw文件,分别运行后手动记录两个模型的卡方和自由度。我在项目里就是文件级隔离,既避免了模型之间的无意联动,也方便复盘时查看当时的参数设置。
4. 结果解读的逻辑:卡方差异检验、载荷显著性与路径变化
4.1 第一步:模型整体的拟合变化
运行结束后,先看两个模型的整体拟合指标:卡方值、自由度、RMSEA、CFI、TLI、SRMR。因为Model B加入了额外的方法因子,它的自由参数变多,卡方值和自由度都会比Model A小。但关键是下降幅度是否足够大。如果RMSEA从大于0.08变成小于0.06,CFI/TLI从不到0.90提升到0.95以上,说明加入方法因子之后,模型对数据的解释能力显著提升,这是共同方法偏差存在的第一个证据。
但这里我要特别提醒:不要只凭拟合指标的改善就下结论。因为加了方法因子之后,模型自由度变少,拟合指标本来就是“能力补进来就容易变好”的。真正严谨的判定要靠卡方差异检验。
4.2 第二步:卡方差异检验到底怎么算
卡方差异检验的前提是两个模型嵌套:Model B是在Model A的基础上增加了一组参数,所以Model A是受限模型,Model B是扩展模型。于是可以做如下计算:
Δχ² = χ²(Model A) − χ²(Model B) Δdf = df(Model A) − df(Model B)
然后把Δχ²和Δdf代入卡方分布,得到p值。如果p小于0.05,说明加入方法因子显著改善了模型拟合,也就说明观测变量里确实存在不可忽略的共同方法变异。
这个计算你可以用SPSS、Excel甚至手算查表完成。如果你用R,一行代码就能解决:
# 以示例输出数据为例 chi2_modelA <- 568.12 df_modelA <- 131 chi2_modelB <- 392.47 df_modelB <- 112 delta_chi2 <- chi2_modelA - chi2_modelB delta_df <- df_modelA - df_modelB pchisq(delta_chi2, delta_df, lower.tail = FALSE)Amos本身并不直接输出Δχ²的p值,所以很多人在这一步卡住。我通常的做法是在分析结果里先记录两个模型的卡方和df,然后用R算一下,再把结果贴进论文报告。下表是我之前一个项目的实际数据,仅供参考:
| 模型 | χ² | df | RMSEA | CFI | TLI | 模型比较 | Δχ² | Δdf | p |
|---|---|---|---|---|---|---|---|---|---|
| Model A(理论模型) | 568.12 | 131 | 0.077 | 0.921 | 0.908 | – | – | – | – |
| Model B(+方法因子) | 392.47 | 112 | 0.059 | 0.951 | 0.940 | M1 vs M2 | 175.65 | 19 | <0.001 |
这个结果说明两个模型差异非常显著。但我在论文里并不会只报这一张表,下一步还得看载荷和路径系数。
4.3 第三步:方法因子的载荷是否显著
卡方差异显著只说明“加入方法因子有用”,但没说明方法因子到底吸收了哪些变异。更严谨的做法是打开Output里的Standardized Regression Weights,查看方法因子到每个观测变量的标准化载荷。如果大部分载荷显著且数值偏高,比如超过0.30,那就说明这些观测变量确实共享了较大比例的方法变异。
如果只有个别题项的载荷显著,其他都不显著,那就要小心。这时候方法因子可能只是在“迁就”一两个差异较大的题目,而不是整体性的方法偏差。遇到这种情况,模型比较的显著性可能来自个别题目的特殊变异,而非系统性共同方法偏差。我的经验是,报告里既要报整体卡方差异,也要报显著的载荷比例,两个证据放在一起,比单说“卡方差异显著”扎实得多。
4.4 第四步:路径系数和相关系数有没有“缩水”
这是我在论文里一定保留的内容:比较Model A和Model B里,理论潜变量之间的相关系数或路径系数。如果加入方法因子后,潜变量之间的相关从0.62降到了0.31,说明原来的关系里混入了大量共同变异;如果系数几乎没变,说明即使存在一些方法变异,它也没有严重干扰核心的构念关系。后一种情况反而更容易写结论:你可以说“虽然存在统计学上显著的方法因子,但加入方法因子后实质关系模式不变,因此本文结论稳健”。
这一点非常重要。因为共同方法偏差检验的根本目的不是“必须检验出偏差来”,而是评估偏差对结论的威胁程度。威胁小,结论照样站得住;威胁大,你的数据可能就要重新解释,甚至要考虑在后续研究中加入时间滞后、多来源数据等设计层面的修正。
5. 操作中经常踩的坑:非正定矩阵、不收敛与审稿人追问
5.1 模型无法识别:Amos提示变量方差为负
跑ULMC时最常看到的一类报错是:模型无法识别、出现负方差、海斯矩阵非正定。出现这个问题的根源通常是自由参数太多。方法因子理论上把每个观测变量的路径都增加了一遍,如果你的观测变量有十几个,自由参数会暴涨,样本量又不够,结果矩阵就会不稳定甚至非正定。
处理办法按照优先级排列:第一,固定方法因子的方差为1;第二,保持首条载荷固定为1;第三,如果还不行,把所有方法因子载荷设成等值约束;第四,减少观测变量数量或考虑将题目打包成项目组;第五,增加样本量是后端手段,项目已经收完数据的前提下通常来不及。我在实际项目中,遇到非正定矩阵时,用“首条载荷固定+方差固定”基本能解决大部分情况,真正必须动用等值约束的情况其实不多。
另一个容易忽略的原因是观测变量本身方差差异巨大。比如一个题项的量表是从1到5,另一个题项是百分比或分组编码,两者量纲不一致,方法因子想同时吸收它们时,矩阵就容易出问题。这种情况我建议先把所有观测变量标准化,再进入Amos分析。
5.2 模型收敛但输出结果全是异常值
有时候模型能跑通,但输出的标准化载荷大于1、误差方差为负、方法因子载荷接近0.99甚至更大。这通常不是“结果正常但反直觉”,而是模型过度拟合。方法因子吸收了太多共同变异,甚至把本该属于构念真实变异的份额也抢走了。这时候你应该怀疑是模型设置太自由,而不是数据本身有问题。
我遇到过一例:加方法因子后,方法因子载荷均值达到0.92,理论潜变量之间的相关全部变成-0.05左右不显著。表面看模型确实“识别了”方法偏差,但其实是模型把所有共享信息都归给了方法因子,构念之间被吸干了。这种情况下,结论不能说“数据无偏”,反而说明检验过程本身不稳健。我当时的处理是改为等值约束载荷,再重新估计,结果显示方法因子载荷约为0.45,构念相关系数虽然有所下降但依旧显著。最终论文按等值约束版结果报告,理由说明也写得很清楚。
5.3 如果卡方差异不显著,论文该怎么写
很多人在卡方差异不显著时就开始慌。其实不显著也是有效结果,且更容易写。你只需要报告“加入未测量的方法因子后,模型拟合没有显著提升,且路径系数变化幅度不超过0.03,表明共同方法偏差对结论影响有限”。审稿人看到这个结果通常不会继续纠缠。
从理论上说,卡方差异不显著说明观测数据很少存在共享的系统变异,这可能是因为你的构念确实能起到区分效度,也可能是因为问卷中同源偏差本身不严重。不管哪种情况,你的核心结论受影响的可能性都大大降低。但要注意:不要只因为不显著就直接把CMB检验从文中删除。审稿人要求了你才做检验,你做了就必须如实报告,删除反而是学术诚信问题。
5.4 应对审稿人追问的常用回复逻辑
审稿人最常见的追问是“为什么用ULMC而不用CFA标记变量法”。回复的核心逻辑是:本研究属于事后的统计检验,数据中并未预先设计标记变量;ULMC能够在不需要额外变量的前提下,对同源偏差进行建模;同时,文章还报告了加入方法因子前后路径系数的稳定性,说明结论对共同方法偏差不敏感。这三句话基本可以平息大部分质疑。
还有审稿人会追问“方法因子载荷不高,是否说明方法偏差不存在”。这时你可以顺势解释:方法因子载荷不显著,意味着共同方法偏差的方差贡献较小,这正是对结论稳健性的支持。审稿人真正担心的是你研究结论站不住脚,你只要围绕“影响有限、结论稳健”展开,就不会有问题。
5.5 我个人的操作习惯和最后的提醒
跑ULMC这些年,我逐渐养成几个固定习惯:第一,每跑一个模型前先确认样本量与自由参数的比值,低于5比1就不硬上ULMC;第二,所有模型在同一份Amos工程文件里按版本保存,模型A、模型B分开命名;第三,记录所有输出里的标准化载荷和路径系数,不只看拟合指标;第四,对非正态数据优先用Bollen-Stine Bootstrap检验替代普通最大似然结果。
最后再提醒一点:ULMC不是万能的。它只能检测到观测变量之间“共享的、未被测量的”共同方差,如果共同方法偏差来自某个具体构念的特殊效应,或者和理论构念完全纠缠在一起,单靠ULMC很难彻底剥离。所以我在给学生的建议里一直强调:统计控制是补救措施,研究设计阶段的程序控制才是治本之策。能换来源、换时间点、换测量方法的设计,远比事后跑一个高级检验更可靠。这也是我在实际项目里最深的体会。