在问卷研究里,最让人头疼的往往不是数据不显著,反而是数据“太完美”——所有假设全部成立,路径系数一个比一个漂亮。遇到这种情况,我会先反问一句:你的样本是不是同一批人在同一个时间段里填了同一份问卷?如果是,那“共同方法偏差”这颗雷很可能已经埋在你的数据里了。今天这篇就想围绕“偏差平方和”和“共同方法偏差检验之潜在误差变量控制法”把这件事彻底讲透,重点放在Amos软件里的完整操作流程,帮助做实证研究、写毕业论文、投期刊的朋友少走弯路。
这篇文章适合谁看?简单说,凡是问卷收集数据、计划做结构方程模型的人,都值得花十几分钟读一遍。哪怕你只是刚接触Amos的新手,只要跟着后面的步骤一步步来,也能搭出一个可复现的“潜在误差变量控制法”模型,并且搞清楚每一步背后的统计理由。
1. 先弄明白:偏差平方和到底在说明什么
很多学统计的朋友一看到“偏差平方和”五个字就条件反射地想起方差分析,想起组间组内,觉得这是个老掉牙的概念。但放到共同方法偏差的场景里,它其实是整个检验思路的起点。
1.1 从一串数字看偏差平方和的计算逻辑
假设某个问卷题目用的是5点计分,题目是“我对当前的工作感到满意”,10个人打出的分数是:3、4、4、5、3、4、2、5、4、4。平均分算下来是3.8。那么每个人的得分和平均分的差距就是:-0.8、0.2、0.2、1.2、-0.8、0.2、-1.8、1.2、0.2、0.2。直接把这些差距加起来,正负会抵消,结果恒等于0,什么信息都看不出来。所以统计上要把每个差距先平方,再加总,这样才得到偏差平方和:SS = Σ(xᵢ - x̄)²。
算一下就是0.64+0.04+0.04+1.44+0.64+0.04+3.24+1.44+0.04+0.04,总共7.6。这个7.6说明什么?它说明这10个人在这个题目上的回答差异有多大。差异越大,偏差平方和越大;如果所有人都答同一个分数,偏差平方和就是0。
这个逻辑看起来简单,但它是后面所有方差分解、共同方法偏差检验的地基:数据里的变异不是一团混沌,而是可以按照来源拆开的。
1.2 测量学视角:观测变异是怎么被拆开的
在教育测量和心理测量里,有一个经典模型叫“真分数理论”:X = T + E,即观测分数等于真实分数加随机误差。对应到方差上就是:测量得分的总变异 = 真实分数的变异 + 随机误差的变异。
但问卷研究的情况稍微复杂一点。一个题目的回答除了反映被试的真实态度(T),以及随机误差(E),还会混入一种稳定的、不随题目内容变化的系统成分。比如被测者看到题目后习惯性地往高分选,或者因为担心评价而刻意美化自己,这种倾向性会对所有题目都产生影响。这个系统成分叫“共同方法变异”,它不关心题目测的是工作满意度还是离职意愿,它只管让所有题目的分数一起偏高或者一起偏低。
所以更完整的方差分解其实是:总变异 = 实质构念变异 + 共同方法变异 + 随机误差变异。这就是为什么我们可以用潜在误差变量控制法去把共同方法变异单独分离出来——如果偏差平方和代表了总变异,那它分出来的每一份,都有各自的统计含义。后面Amos里所有输出,本质上都是在做这种方差拆解。
2. 为什么问卷数据总是绕不开共同方法偏差
既然偏差平方和能拆出“共同方法变异”,那接下来的问题就是:这种变异危害到底有多大,以及我们怎么知道它存不存在。
2.1 共同方法偏差的来源
共同方法偏差的英文全称是Common Method Bias,简称CMB。它指的是测量中因为方法因素而非构念因素造成的系统性变异。最常见的来源有三个。
第一,同一数据源。自变量和因变量是同一批被试自己填的,比如一个人同时报告“我感受到的组织支持”和“我的离职意愿”,两条路径都来自同一个人的主观感知,方法上天然相关。第二,同一个测量时间点。横向问卷在某个固定时间统一施测,被试当时的心情、疲劳程度、完成问卷的耐心都会被写入数据。第三,同一种测量工具和语境。全用5点计分量表、相似的措辞方式、相近的题目顺序,都会让被试形成“作答惯性”。
还有一个很容易被忽略的来源是题目的语义相近。比如“我的领导很关心我”和“我的领导愿意倾听我的想法”,表面看是构念内的两个测量题项,但它们共享了“领导正面形象”这个语义开关,也会被方法因子吸收。
2.2 不检验会有什么后果
共同方法偏差最坑人的地方在于,它制造的虚假相关既可能放大真实的变量关系,也可能掩盖本来存在的真实关系。
举个例子,研究假设是“工作压力→职业倦怠→离职意愿”。如果三个变量的题项都来自同一份问卷、同一次施测,那么被试出于情绪一致性,压力高的人可能把所有负面题都打高分,这会人为提高工作压力、职业倦怠、离职意愿之间的相关性。结果就是原来的中介效应本来不显著,加上共同方法变异以后反而显著了;反过来,如果共同方法变异把误差方差拉得很大,也可能让真实的细微效应被噪音淹没,导致检验不出结果。
在因子分析里,CMB的典型表现是:全部题项做探索性因子分析时,第一个未旋转因子的方差解释率异常高,或者出现一个“挂着几乎所有题项”的怪异因子。这个现象就是Harman单因素检验的判断基础,后面会细说。
2.3 主流的检验手段怎么选
目前社会科学里检验共同方法偏差的方法主要有三种,各有自己的定位。
| 方法 | 核心思路 | 优点 | 局限 |
|---|---|---|---|
| Harman单因素检验 | 把所有题项丢进EFA,看第一个未旋转因子的方差解释率是否超过40% | 操作快速,几乎可以使用任何统计软件完成 | 只是粗筛,无法量化方法方差,检验力经常被批评 |
| 潜在误差变量控制法(ULMC) | 在结构方程模型中加入一个指向所有题项的方法潜变量,分离共同变异 | 能直接估计方法方差占比,可与嵌套模型比较,严谨度高 | 要求样本量大、模型设定正确,操作门槛高 |
| 标记变量法 | 在问卷中事先放入一个理论上与实质构念无关的“标记变量”,做偏相关或纳入模型控制 | 操作思路直观,审稿人接受度高 | 必须先找到真正无关联的标记变量,这在实际研究中很难找 |
三种方法并不互相排斥。我的习惯是先在SPSS里快速跑Harman做一个初判,等正式建模时再用ULMC做确认。标题里提到的“潜在误差变量控制法”就是第二类,它不直接测量方法因素,而是通过模型设定把方法效应“拦截”下来,这也是它名字里“潜在误差变量”的来源。
3. 潜在误差变量控制法的建模逻辑
如果你以前没接触过ULMC,第一次看到模型图可能会觉得奇怪:为什么凭空多出一个潜变量,还指向了所有测量题项?这里把这个方法的统计逻辑拆开讲清楚。
3.1 一句话讲清ULMC
潜在误差变量控制法(Unmeasured Latent Method Construct)的做法是:在原本的实质构念模型之上,额外增加一个“方法因子”,让它指向所有测量题项。这样每个题项的总方差就被拆成了四块:实质构念载荷贡献的方差、方法因子载荷贡献的方差、题项残差,以及与测量模型相关的协方差。通过比较“没有方法因子的模型”和“加入方法因子的模型”的拟合差异,就可以判断共同方法偏差是否显著存在。
这个方法的要点在于“未测量”——我们并没有直接测量“方法”本身,而是假设存在一个公共的、导致所有题目产生系统性共同变更的潜在变量,用它去捕捉所有不能被实质构念解释的共同方差。
3.2 模型识别必须处理的三个约束
在Amos里搭ULMC模型,最怕的问题就是模型无法识别。所谓“识别”,通俗说就是数据和待估参数之间的信息够不够。方法因子是一个新加入的潜变量,如果不做任何约束,它就得估计指向每个题项的载荷、自身的方差,还要处理与实质构念之间的协方差,参数太多,数据根本提供不了足够信息。
因此常规操作上有三个必须处理的约束。
约束一:方法因子的方差需要固定,通常固定为1。这样方法载荷就是自由参数,模型可以识别,后续解释也方便。
约束二:方法因子到各个题项的载荷需要加等值约束,至少要部分等值。比如同一个构念内的题项,让它们负荷在方法因子上时使用相同的参数名称。这一步的目的不是理论假设,而是为了保证识别。如果没有这个约束,方法因子与实质构念之间很容易发生信息混淆,模型要么不收敛,要么跑出负方差。
约束三:每个实质构念仍然需要一个标识指标,通常将每个潜变量的第一个题项载荷固定为1,否则潜变量的尺度无法确定。
这三个约束做完,模型的可估参数就进入了合理范围。实际建模时,我一般先固定方法因子方差为1,再把所有方法载荷按构念分组设置相等的命名,比如工作满意度下的四个题项都命名为cm_a1,离职意愿下的三个题项都命名为cm_b1,这样既有约束又不至于太死板。
3.3 结果怎么解释,方法方差算到多少才需要警惕
模型跑通之后,有两类结果要看。
第一类是模型比较结果。加入方法因子的嵌套模型与基准模型相比,如果卡方变化量Δχ²显著(p < 0.05),同时CFI变化量不超过0.002,说明模型虽然显著改善了拟合,但实质路径的结论基本没有改变,这时候可以认为共同方法偏差对假设检验的影响不大。反过来,如果Δχ²不显著,说明加入方法因子并没有比基准模型更好,共同方法偏差可能并不严重。
第二类是方法因子本身的大小。从Amos输出的标准化载荷,把方法因子对每个题项的标准化载荷平方,取平均或者汇总,就可以得到共同方法方差的占比。很多文献把25%、30%作为警惕线,也就是说,如果共同方法因子解释了总方差的20%以上,就应该在讨论部分认真说明共同方法偏差的可能影响,并建议未来研究使用纵向设计或多来源数据来规避。
需要特别说明的是,方法因子载荷大多是正数,因为共同方法偏差通常表现为量表得分一致性偏高或偏低。如果跑出来的方法载荷是负的,或者某些题项的方法载荷特别大,就要怀疑是不是题目文本、反向题设置或者数据质量出了问题,而不是简单套用模板解释。
4. Amos操作全流程:从基础CFA到带方法因子的嵌套模型
下面进入实操部分。我用一个最常见的研究场景举例:问卷包含两个构念A和B,A有3个题项,B有3个题项,全部来自同一批被试的自评数据。现在要用Amos做ULMC检验。
4.1 动手之前要准备什么
建议先在SPSS里完成数据清理,再做操作。至少需要确认三点:没有极端异常值,缺失值已经处理,每个题项都是数值型变量。Amos本身对缺失值处理不友好,数据里有空单元格,平时自己跑可能勉强能出结果,一旦加到方法因子这种复杂模型,很容易冒出“协方差矩阵非正定”的报错。
准备好数据之后,打开Amos Graphics软件,界面初始状态是一块空白画布。Amos的版本差异不大,不同版本只是在按钮位置和默认命名上有区别,整体流程是通用的。
4.2 分步操作:搭建不带方法因子的基准模型
先画基准模型,这个模型后面要作为比较的基础。
第一步,点击工具栏里的“绘制潜变量”图标,在画布上画出两个椭圆,分别代表构念A和构念B。再点击“绘制观测变量”图标,在每个潜变量旁边画出对应数量的矩形。Amos会自动把矩形和椭圆连起来,默认路径就位了。
第二步,双击矩形,在Object Properties里给每个观测变量命名,名称要与SPSS数据文件里的变量名严格对应。如果不匹配,Amos会弹窗提示找不到变量。
第三步,双击椭圆,把潜变量名称改成A和B。再在椭圆之间用“绘制因果路径”图标画一条单向箭头,表示假设的影响方向。确认无误后,先跑一次基准模型。点“计算估计值”图标,Amos底部状态栏会显示计算结果。如果出现红色警告,先处理,再继续。记录下关键拟合指标:卡方值χ²、自由度df、CFI、TLI、RMSEA。后面比较模型时要用到χ²和df,其他指标作为辅助说明。
4.3 分步操作:添加方法因子并设置约束
基准模型跑通之后,开始加方法因子。
步骤一:在画布空白处再画一个潜变量,命名“CMF”,它就是要塞入模型的方法因子。把它放在所有题项的旁边或下方,不影响画布整洁就行。
步骤二:用单箭头从CMF分别指向每一个观测变量。这里一定要用单箭头指向题项,方向错了结果就完全不对。方法因子的逻辑是“方法变异共同影响所有题项”,所以箭头方向是从方法因子往外放射。
步骤三:给CMF的方差固定为1。右键点击CMF椭圆,选择“Object Properties”,切到“Parameters”选项卡,在“Variance”一栏输入1,勾选“Fixed”。这一步是为了让方法因子有尺度,同时帮助模型识别。
步骤四:给方法载荷设置等值约束。按住Ctrl键依次点击所有从CMF指向题项的路径,然后右键选择“Object Properties”,在“Regression weight”一栏输入相同的自定义名称,比如统一填“cm1”。这里要理解,Amos里相同名称的参数是同一个待估参数,所以填同样名称就等价于强制这些载荷相等。实践中我建议按照题项所属构念分组:构念A的三个题项统称“cm_a”,构念B的三个题项统称“cm_b”,不要把所有题项全部压成一个值,那样约束太强可能和实际数据冲突,导致拟合不好。
步骤五:确认每个实质构念都有一个参照指标,默认Amos会自动把潜变量到其第一个观测变量的路径设为1。如果不放心,可以打开参数栏查看,凡是标记“1”的路径都表示固定为1的参照路径,不需要改动。
步骤六:再次点击“计算估计值”运行模型。正常情况模型可以正常收敛,如果出现识别问题,不要急着改约束,先按第5章里的排查清单逐项检查。
4.4 读取输出结果并完成模型比较
跑通之后,界面上方点击“查看文本输出”按钮,会弹出独立的文本结果窗口。重点看几个模块。
在“Estimates”下的“Scalar Estimates”里,先看“Regression Weights”,这是未标准化的载荷估计。再看“Standardized Regression Weights”,里面会有CMF到每个题项的标准化载荷。这些标准化载荷的平方,就是方法因子在该题项上贡献的方差比例。比如某个题项在CMF上的标准化载荷为0.35,平方后是0.1225,也就是说该题项变异的12.25%来自共同的测量方法。
把所有题项在CMF上的标准化载荷平方做一个平均,就得到平均的共同方法方差占比。如果占比明显偏高,比如超过30%,建议在论文的局限部分明确说明,并补充其他稳健性检验。
模型比较的数据需要两类:基准模型和带方法因子模型各自的χ²和df。直接在文本输出的“Model Fit”里找到两个模型的对应值。比较公式是Δχ² = χ²_基准 - χ²_方法因子,Δdf = df_基准 - df_方法因子。把这个Δχ²拿去查卡方分布表,看p值是否小于0.05,或者用Excel函数,输入“=CHISQ.DIST.RT(Δχ², Δdf)”得到p值。
报告的写法可以套用一个模板:“加入未测方法因子后,模型拟合显著改善(Δχ² = 12.35,Δdf = 3,p < 0.01),但核心路径系数方向与显著性未发生实质变化,表明自变量与因变量之间的观测关系主要受实质构念驱动,共同方法偏差虽存在但不构成严重威胁。”
这里有一个审稿人常问的问题:如果Δχ²显著,是不是就宣告共同方法偏差严重了?不一定。Δχ²显著只能说明加入方法因子后模型在统计上有改善,但改善的实际幅度要看方法方差占比和路径系数的稳定性。所以最终结论不能只写“显著”两个字,必须同时报告方法方差占比和路径系数稳定性。
5. 常见报错与排查经验
Amos里面的报错提示非常简洁,经常就一句话,新手看了往往一脸茫然。这里把用ULMC最容易踩的几个坑集中梳理一遍。
5.1 模型无法识别怎么办
最常见的提示是“The model is probably unidentified. To make the model identified, fix one or more parameters.”意思是模型参数估计不出来,需要固定某些参数。
按优先级排查四个方向。第一,方法因子方差是否已经固定为1,如果没有固定,立即补上。第二,方法载荷是否加了等值约束,如果完全没有约束,试着至少把同一构念内的方法载荷设为同名参数。第三,是否存在某个潜变量只对应1个观测变量,如果是,这个潜变量基本没有可识别的方差信息,建议至少需要3个题项,最少也要2个。第四,数据本身是否有问题,比如两个题项完全线性重复,实际提供的信息量远低于名义上的题项数。
5.2 方差为负或载荷超界(Heywood案例)
有时候Amos跑完,模型没有报识别错误,但看输出时发现某个残差方差是负数,或者标准化载荷大于1,这种情况叫Heywood case。这通常不是统计软件出bug,而是模型与数据产生了冲突。
常见的诱因有三个:样本量太小、题项之间相关过低或者过高、方法因子与实质构念之间的信息分配失衡。ULMC方法对样本量比较敏感,一般建议样本量不少于200,最好超过300。如果你手头样本只有150左右,加方法因子后很容易出这种问题。
处理方式从简单到复杂依次是:清洗异常样本,检查是否存在故意乱答题的被试;检查题项,删除与整体极度不协调的坏题项;对方法载荷施加更强的等值约束,比如把所有方法载荷全部设为同一个参数。如果改完还不行,就不要硬撑,换用更简单的方法报告共同方法偏差检验结果,比如只报告Harman单因素检验,并说明局限。
5.3 方法因子不显著,是不是白做了
有不少人加完方法因子后发现,CMF到各个题项的载荷不显著,或者模型比较Δχ²不显著,第一反应是“做错了”。实际上这不是错误,而是一个有意义的发现:数据中不存在明显的共同方法偏差。
这种情况也要诚实报告。最好的写法是:“加入未测方法因子后,模型拟合未显著改善(Δχ² = 2.10,Δdf = 3,p = 0.55),方法因子载荷普遍不显著,表明本研究数据未受严重共同方法偏差影响。”这本身就是一条完整的、值得写进论文的结论。
真正需要警惕的是另一种情况:方法因子载荷显著,但它逮住的可能不是所谓“方法”,而是题项共有的实质成分。比如某些题项在表达上过于相似,方法因子捕捉到的是“语义重叠”而非“方法偏差”。这也是ULMC饱受方法论学者批评的一个点。我在写论文时通常会在局限部分主动承认这一点,同时补充标记变量检验或Harman检验的结果,形成三角验证,这样一来审稿人的攻击面就小了很多。
我个人的使用习惯是:凡是横截面自评数据,拿到手先在SPSS里用Harman单因素做个粗筛,如果第一公因子方差解释率超过40%,再用ULMC做确认。如果两个方法的结果一致,报告起来就非常踏实;如果不一致,优先以ULMC为准,但在讨论中坦诚讨论分歧的可能原因。这套组合动作做下来,既扛得住审稿人的质疑,也让自己对数据有更清晰的认识。
最后再分享一个小技巧:Amos画完模型后,点击“插件”里的“保存模型图”或直接复制图形放进论文附录,很多期刊都接受这种展示方式。模型图中把方法因子画在侧边,用虚线表示指向所有题项的路径,并注明方差固定为1、载荷等值约束,读图的人一眼就能看懂你的做法。