在结构方程模型中,调节效应是很常见的形式。它描绘的是自变量(X)对因变量(Y)的作用强度受到调节变量(M)的影响。
比如,大家都知道吃夜宵吃多容易变胖,但夜宵在家吃和出去吃可能效果不一样。出去吃烧烤火锅,热量就比在家水煮白菜更容易胖。那么“吃夜宵的量(自变量X)”对“体重增加(因变量Y)”的影响,受到“吃饭地点(调节变量M)”的调节。作用关系如下图:
(图片引自Hayes, 2013. Model Templates for PROCESS for SPSS and SAS)
验证的步骤通常是:先确认自变量X和因变量Y之间的关系,然后检验交互变量X*M与因变量Y之间的关系。
通常来讲,调节变量(M)是独立于自变量(X)和因变量(Y)的,最好不要和它们有直接关系,否则会很难解释。比如上面的例子,还存在一种可能:因为烧烤火锅经常是和别人一起去吃,而且味道比水煮白菜好,所以吃的更多。那么吃饭地点(M)和吃夜宵的量(X)有了联系,解释起来就很麻烦了。
很不幸,我今天就遇到了。今天中午在重新整理数据的时候,把调节变量放进了相关分析的矩阵里。发现调节变量(M)和自变量(X)相关达到了显著性。
第一反应是:糟糕,我不会遇到多重共线性了吧?!
(注:多重共线性是指多个自变量(X1,X2,X3...)预测一个因变量(Y)时,自变量与自变量之间存在相关的情况,会导致预测结果出现偏差)
第二反应是:这是本质多重共线性,还是非本质多重共线性?
之前在方杰等(2015)的论文里看到,调节效应检验最好将自变量(X)和调节变量(M)做中心化处理,有助于调节效应正负的解释,以及减少“非本质”多重共线性。所以,如果我这边遇到的是“非本质”多重共线性的话,我后续做中心化处理既有理有据,同时还能把偏差消除掉。美滋滋。
但是打开这篇论文之后傻了,非本质共线性指的是自变量X和交互变量XM,或者调节变量M和交互变量XM之间的相关。而我遇到的自变量X和调节变量M的相关恰恰就是本质多重共线性。
既然事情已经发生,那就只能想想该怎么解决了。百度了一下多重共线性的解决办法,大致有以下几种:
1)增加样本量(加不了,实验已经做完了);
2)移除共线性变量(就俩,移了就没了);
3)逐步回归(就俩变量X和M,怎么逐步啊);
4)岭回归或主成分回归(感觉要学新东西,先不学)。
当可选的解决办法都被否定之后,我出现了侥幸心理:仅仅只是X和M相关,能判定是多重共线性吗?是否还有其他判定标准?
还真有,就是——方差膨胀系数(variance inflation factor,VIF)。网上说VIF值一般在1左右,5到10之间可以接受,大于10则是严重的多重共线性。
计算VIF的R代码如下:
library(car)
#一般的回归方程
formula <- lm(y~x1+x2)
vif(formula)
#调节效应方程
formula2 <- lm(y~x1+x2+x1*x2)
vif(formula2)
当我把自己的数据代入之后,发现同样的数据,放在一般的回归里VIF值很低,一旦加上交互变量,就会忽然变得很高(多次尝试不同的数据仍然是类似的结果)。我猜测,交互项是由x1与x2相乘得来,它与x1和x2相关度都很高,所以导致了VIF值很高。
看来这条路又走不通了。
刚才吃饭的时候又想了一下,把交互变量丢到方程里面的做法着实是自己找抽。明明想观察的是自变量和调节变量之间是否共线,结果自己把导致共线的变量丢进去了。
重新计算之后,结果还是令人满意的,只有1出头,所以称不上是多重共线性。
Data <- data.frame(y,x1,x2)
formula <- lm(y~x1+x2)
vif(formula)
x1 x2
1.159 1.159
formula2 <- lm(y~x1+x2+x1*x2)
vif(formula2)
x1 x2 x1:x2
22.150 16.888 51.179
###我是吃完饭之后的分割线###
#x和m是相关的两组数据,看来仅仅是相关,离共线性还差的远
formula4 <- lm(y~x+m)
> vif(formula4)
x m
1.0791 1.0791
松了口气之后,才重新想起下午看到VIF值的公式。当VIF=10的时候,x1预测x2的R平方要高达0.9了,是一个非常高的值。想想也是,我这点数据怎么可能这么高呢,哈哈哈哈哈哈。
算是虚惊一场吧,回头再找点参考文献说明一下就好了。
忙活了一中午和下午,充实是挺充实,但好像又什么都没干。
参考:
方杰, 温忠麟, 梁东梅, & 李霓霓. (2015). 基于多元回归的调节效应分析. 心理科学, 38(03), 715-720
温忠麟, 侯杰泰, & 张雷. (2005). 调节效应与中介效应的比较和应用. 心理学报, 37(2), 268-274