
做问卷研究的同行应该都遇到过这种情况论文外审回来审稿人的第一条修改意见就是“请检验你的数据是否存在共同方法偏差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.06CFI/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算一下再把结果贴进论文报告。下表是我之前一个项目的实际数据仅供参考模型χ²dfRMSEACFITLI模型比较Δχ²ΔdfpModel A理论模型568.121310.0770.9210.908––––Model B方法因子392.471120.0590.9510.940M1 vs M2175.65190.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很难彻底剥离。所以我在给学生的建议里一直强调统计控制是补救措施研究设计阶段的程序控制才是治本之策。能换来源、换时间点、换测量方法的设计远比事后跑一个高级检验更可靠。这也是我在实际项目里最深的体会。