Stata:如何理解三个变量的交乘项?

发布时间:2022-12-09 阅读 4549

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:陈希 (中国农业科学院农经所)
邮箱chenxi_alice@163.com


目录


1. 写在前面

多元回归模型中经常包含交互项,也会出现三个连续变量交互的情况,但是应该如何理解三项交互的含义呢?

我们摘译了 UCLA FAQs 中的相关介绍,从斜率的角度加以解释:How can I understand a 3-way continuous interacation?

2. 对三项交互的解释

三项交互的情况,即两个调节变量共同影响因变量在自变量上的回归

我们可以从多个角度解读三项交互的含义,本文主要介绍基于边际效应 (斜率) 视角的理解,即当两个调节变量在高值和低值的不同组合下保持恒定时,因变量在自变量上的斜率。在计算出简单斜率之后,我们将计算并检验所有斜率之间的差异。本文使用的方法主要源于 Dawson 和 Richter (2004) 的论文。Dawson 和 Richter 使用许多复杂公式计算了简单斜率的差异及其标准误差。我们将采取一种更加简单的方式来进行说明。

我们将首先研究回归方程,其中包括三项连续相互作用。在公式中,Y 是因变量,X 是核心变量,Z 和 W 分别是两个调节变量。

我们可以将方程中的各项重新排列组合为两组,第一组(不包含 X 的项)为截距,而第二组(所有包含 X 的项)定义为简单斜率。

接下来,我们将 Z 和 W 的高值定义为高于其各自均值一个标准差,并将它们表示为 Hz 和 Hw;低值定义为低于其均值一个标准差,分别为 Lz 和 Lw。由此,共形成四种可能的条件组合:

  1. Hz×Hw
  2. Hz×Lw
  3. Lz×Hw
  4. Lz×Lw

其中,条件 1 表示为当 Z 和 W 都处于其高值时的斜率公式,具体为:

3. Stata 实操

3.1 基础模型

我们将使用数据集 hsb2.dta 来说明。为了保持符号的一致性,我们将暂时更改变量的名称:上文中,y 表示因变量,x 表示自变量,z 表示第一个调节变量,w 表示第二个调节变量。从下面的代码中可以清楚地看出,write 是因变量,read 是自变量,mathscience 是调节变量。

use https://stats.idre.ucla.edu/stat/stata/notes/hsb2, clear
rename write y
rename read x
rename math w
rename science z

regress y c.x###c.z###c.w
regress y c.x###c.z###c.w


      Source |       SS           df       MS      Number of obs   =       200
-------------+----------------------------------   F(7, 192)       =     26.28
       Model |  8748.54751         7   1249.7925   Prob > F        =    0.0000
    Residual |  9130.32749       192   47.553789   R-squared       =    0.4893
-------------+----------------------------------   Adj R-squared   =    0.4707
       Total |   17878.875       199   89.843593   Root MSE        =    6.8959

------------------------------------------------------------------------------
           y |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
           x |     -3.014      1.803    -1.67   0.096       -6.570       0.542
           z |     -2.435      1.757    -1.39   0.167       -5.902       1.031
     c.x#c.z |      0.055      0.033     1.70   0.091       -0.009       0.119
           w |     -3.228      1.926    -1.68   0.095       -7.028       0.572
     c.x#c.w |      0.074      0.036     2.05   0.041        0.003       0.145
     c.z#c.w |      0.061      0.035     1.74   0.083       -0.008       0.130
 c.x#c.z#c.w |     -0.001      0.001    -2.00   0.047       -0.002      -0.000
       _cons |    166.544     93.128     1.79   0.075      -17.141     350.229
------------------------------------------------------------------------------

请注意这个 xzw 的 P 值为0.047,在5%的显著性水平下显著。 根据上文,我们将创建四个条件,分别是当 wz 比平均值高一个标准差,以及其比平均值低一个标准差的排列组合。

/* determine range of x for graphing */
sum x 
sum w

/* determined high and low values for w */
global Hw=r(mean)+r(sd)
global Lw=r(mean)-r(sd)

sum z

/* determine high and low values for z */
global Hz=r(mean)+r(sd)
global Lz=r(mean)-r(sd)

我们将使用 margins 命令来计算 wz 这四个值的简单斜率。我们使用 dydx 选项来获得斜率。值得注意的是,在命令的括号中我们加入了 wz 的各种组合。

margins, dydx(x) at(w=($Hw $Lw) z=($Hz $Lz)) vsquish


Average marginal effects                        Number of obs     =        200
Model VCE    : OLS

Expression   : Linear prediction, predict()
dy/dx w.r.t. : x
1._at        : z    =    61.75089
               w    =    62.01345
2._at        : z    =    61.75089
               w    =    43.27655
3._at        : z    =    41.94911
               w    =    62.01345
4._at        : z    =    41.94911
               w    =    43.27655

------------------------------------------------------------------
         |        Delta-method                                    
         |  dy/dx   Std. Err.     t    P>|t|  [95% Conf. Interval]
---------+--------------------------------------------------------
 x       |                                                        
     _at |                                                        
      1  |  0.165      0.095    1.73   0.086    -0.024       0.353
      2  |  0.236      0.143    1.65   0.100    -0.046       0.518
      3  |  0.612      0.196    3.12   0.002     0.225       0.999
      4  |  0.218      0.128    1.71   0.090    -0.034       0.469
------------------------------------------------------------------

根据上述结果,我们发现 HwHz, LwHzLwLz 条件下的简单斜率都非常相似。但是, Hwlz的斜率似乎与其他三种都不太相同。 下一步是绘制斜率以及观测值的散点图。我们将再次使用 margins 命令来获取绘图信息。由于我们使用的是线性回归,因此我们只需要两个点来定义每个简单的斜率回归线。我们将使用 x 值 20 和 80,它们涵盖了变量 x 的全部范围。

margins, at(x=(20 80) w=($Hw $Lw) z=($Hz $Lz)) vsquish
margins, at(x=(20 80) w=($Hw $Lw) z=($Hz $Lz)) vsquish

Adjusted predictions      Number of obs = 200
Model VCE    : OLS

Expression   : Linear prediction, predict()
1._at        : x               =          20
               z               =    61.75089
               w               =    62.01345
2._at        : x               =          20
               z               =    61.75089
               w               =    43.27655
3._at        : x               =          20
               z               =    41.94911
               w               =    62.01345
4._at        : x               =          20
               z               =    41.94911
               w               =    43.27655
5._at        : x               =          80
               z               =    61.75089
               w               =    62.01345
6._at        : x               =          80
               z               =    61.75089
               w               =    43.27655
7._at        : x               =          80
               z               =    41.94911
               w               =    62.01345
8._at        : x               =          80
               z               =    41.94911
               w               =    43.27655

----------------------------------------------------------------
     |         Delta-method                                    
     |  Margin   Std. Err.      t    P>|t|  [95% Conf. Interval]
-----+----------------------------------------------------------
 _at |                                                        
  1  |  53.294      4.059    13.13   0.000    45.288      61.301
  2  |  44.503      5.033     8.84   0.000    34.575      54.431
  3  |  35.420      6.803     5.21   0.000    22.003      48.837
  4  |  39.981      3.034    13.18   0.000    33.997      45.965
  5  |  63.168      1.927    32.79   0.000    59.367      66.968
  6  |  58.678      4.007    14.65   0.000    50.775      66.580
  7  |  72.138      5.488    13.14   0.000    61.313      82.963
  8  |  53.033      4.787    11.08   0.000    43.591      62.475
----------------------------------------------------------------

接下来,我们使用 marginsplot 命令进行绘图。addplot 选项允许包括观测值的散点图以及简单的斜率回归线。

marginsplot, recast(line) noci addplot(scatter y x, msym(oh) jitter(3))

marginsplot, recast(line) noci addplot(scatter y x, msym(oh) jitter(3))

3.2 加入协变量的情况

我们将在这一节中处理向模型添加协变量的情况。 下面是上一页的回归模型,其中添加了两个协变量 V~1~V~2~

向模型添加协变量不会更改简单斜率的公式,只要协变量不与自变量或调节变量交互即可。 我们在之前的模型中添加两个协变量,socst 重命名为 V~1~ses 将重命名为 V~2~。本节与上一示例完全相同,只是将协变量添加到 regress 命令中。

rename socst v1
rename ses v2
regress y c.x###c.z###c.w v1 v2


  Source |      SS       df       MS      Number of obs   =       200
---------+-----------------------------   F(9, 190)       =     25.36
   Model | 9757.27668     9  1084.14185   Prob > F        =    0.0000
Residual | 8121.59832   190  42.7452543   R-squared       =    0.5457
---------+-----------------------------   Adj R-squared   =    0.5242
   Total |  17878.875   199   89.843593   Root MSE        =     6.538

----------------------------------------------------------------------
           y |   Coef.  Std. Err.     t    P>|t|  [95% Conf. Interval]
-------------+--------------------------------------------------------
           x |  -3.463     1.717   -2.02   0.045    -6.849      -0.077
           z |  -2.902     1.670   -1.74   0.084    -6.197       0.392
     c.x#c.z |   0.062     0.031    2.02   0.045     0.001       0.123
           w |  -3.697     1.831   -2.02   0.045    -7.309      -0.084
     c.x#c.w |   0.080     0.034    2.33   0.021     0.012       0.147
     c.z#c.w |   0.070     0.033    2.09   0.038     0.004       0.135
 c.x#c.z#c.w |  -0.001     0.001   -2.32   0.021    -0.003      -0.000
          v1 |   0.279     0.058    4.84   0.000     0.165       0.393
          v2 |  -0.906     0.691   -1.31   0.192    -2.270       0.458
       _cons | 185.313    88.564    2.09   0.038    10.618     360.009
----------------------------------------------------------------------

值得注意的是,包含协变量后,三项相互作用甚至比之前更加显著。 接下来,我们将计算 wz 的各种组合的简单斜率。margins 命令与没有协变量的示例完全相同,因为协变量不参与交互作用。

/* compute simple slopes */
margins, dydx(x) at(w=($Hw $Lw) z=($Hz $Lz)) vsquish


Average marginal effects      Number of obs = 200
Model VCE    : OLS

Expression   : Linear prediction, predict()
dy/dx w.r.t. : x
1._at        : z               =    61.75089
               w               =    62.01345
2._at        : z               =    61.75089
               w               =    43.27655
3._at        : z               =    41.94911
               w               =    62.01345
4._at        : z               =    41.94911
               w               =    43.27655

----------------------------------------------------------------
         |       Delta-method                                   
         | dy/dx   Std. Err.    t    P>|t|  [95% Conf. Interval]
---------+------------------------------------------------------
 x       |                                                      
     _at |                                                      
      1  | 0.036      0.095   0.37   0.708    -0.152       0.223
      2  | 0.144      0.137   1.05   0.296    -0.127       0.414
      3  | 0.498      0.188   2.64   0.009     0.127       0.870
      4  | 0.093      0.124   0.75   0.453    -0.151       0.337
----------------------------------------------------------------

让我们在观测值的顶部绘制四个简单的斜率。同样的,我们只需要两个 x=20x= 80 两个点来定义每条斜率回归线。

margins, at(x=(20 80) w=($Hw $Lw) z=($Hz $Lz)) vsquish


Predictive margins     Number of obs     =  200
Model VCE    : OLS

Expression   : Linear prediction, predict()
1._at        : x               =          20
               z               =    61.75089
               w               =    62.01345
2._at        : x               =          20
               z               =    61.75089
               w               =    43.27655
3._at        : x               =          20
               z               =    41.94911
               w               =    62.01345
4._at        : x               =          20
               z               =    41.94911
               w               =    43.27655
5._at        : x               =          80
               z               =    61.75089
               w               =    62.01345
6._at        : x               =          80
               z               =    61.75089
               w               =    43.27655
7._at        : x               =          80
               z               =    41.94911
               w               =    62.01345
8._at        : x               =          80
               z               =    41.94911
               w               =    43.27655

----------------------------------------------------------------
     |         Delta-method                                     
     |  Margin   Std. Err.      t    P>|t|  [95% Conf. Interval]
-----+----------------------------------------------------------
 _at |                                                          
  1  |  56.987      3.937    14.47   0.000    49.221      64.753
  2  |  47.840      4.826     9.91   0.000    38.321      57.359
  3  |  38.204      6.501     5.88   0.000    25.381      51.027
  4  |  44.624      3.040    14.68   0.000    38.627      50.621
  5  |  59.127      2.060    28.70   0.000    55.063      63.190
  6  |  56.454      3.835    14.72   0.000    48.888      64.019
  7  |  68.113      5.302    12.85   0.000    57.654      78.572
  8  |  50.202      4.581    10.96   0.000    41.166      59.237
----------------------------------------------------------------

marginsplot, recast(line) noci addplot(scatter y x, msym(oh) jitter(3))

marginsplot, recast(line) noci addplot(scatter y x, msym(oh) jitter(3))

如图所示,模型中加入协变量后,我们发现简单斜率有了一些变化。但是,斜率 3 还是与其他斜率有着较为不同的坡度。 我们可以通过 margins 命令的 pwcompare(effects) 选项计算斜率之间的差异。

/* compute pairwise differences in simple slopes */
margins, dydx(x) at(w=($Hw $Lw) z=($Hz $Lz)) vsquish pwcompare(effects)


Pairwise comparisons of average marginal effects

Model VCE    : OLS                              Number of obs = 200

Expression   : Linear prediction, predict()
dy/dx w.r.t. : x
1._at        : z               =    61.75089
               w               =    62.01345
2._at        : z               =    61.75089
               w               =    43.27655
3._at        : z               =    41.94911
               w               =    62.01345
4._at        : z               =    41.94911
               w               =    43.27655

----------------------------------------------------------------------
          | Contrast Delta-method    Unadjusted        Unadjusted
          |    dy/dx   Std. Err.      t    P>|t|  [95% Conf. Interval]
----------+-----------------------------------------------------------
 x        |                                                           
      _at |                                                           
  2 vs 1  |    0.108      0.156     0.69   0.490    -0.200       0.416
  3 vs 1  |    0.463      0.196     2.37   0.019     0.077       0.848
  4 vs 1  |    0.057      0.156     0.37   0.713    -0.250       0.365
  3 vs 2  |    0.355      0.245     1.45   0.149    -0.128       0.838
  4 vs 2  |   -0.051      0.164    -0.31   0.757    -0.373       0.272
  4 vs 3  |   -0.406      0.210    -1.93   0.055    -0.819       0.008
----------------------------------------------------------------------

根据该表显示,似乎只有斜率 3 与斜率 1 (LzHw vs HzHw) 之间有显著差异。但在我们下此结论之前,我们需要调整 p 值,以考虑到这些是事后检验。为了检验,我们需要在 margins 命令中加入 mcompare(bonferroni) 选项。

/* compute pairwise differences in simple slopes with Bonferroni correction */
margins, dydx(x) at(w=($Hw $Lw) z=($Hz $Lz)) vsquish pwcompare(effects) mcompare(bonferroni)


Pairwise comparisons of average marginal effects

Model VCE    : OLS                              Number of obs = 200

Expression   : Linear prediction, predict()
dy/dx w.r.t. : x
1._at        : z               =    61.75089
               w               =    62.01345
2._at        : z               =    61.75089
               w               =    43.27655
3._at        : z               =    41.94911
               w               =    62.01345
4._at        : z               =    41.94911
               w               =    43.27655

---------------------------
             |    Number of
             |  Comparisons
-------------+-------------
x            |
         _at |            6
---------------------------

------------------------------------------------------------------------
           | Contrast Delta-method    Bonferroni         Bonferroni
           |    dy/dx   Std. Err.      t    P>|t|   [95% Conf. Interval]
-----------+------------------------------------------------------------
x          |                                                            
       _at |                                                            
   2 vs 1  |    0.108      0.156     0.69   1.000     -0.308       0.524
   3 vs 1  |    0.463      0.196     2.37   0.114     -0.058       0.984
   4 vs 1  |    0.057      0.156     0.37   1.000     -0.358       0.473
   3 vs 2  |    0.355      0.245     1.45   0.894     -0.298       1.008
   4 vs 2  |   -0.051      0.164    -0.31   1.000     -0.487       0.386
   4 vs 3  |   -0.406      0.210    -1.93   0.328     -0.965       0.154
------------------------------------------------------------------------

使用 Bonferroni 校正后,斜率 3 vs 斜率 1 的 p 值变为 0.114,在统计意义上并不显著。由于 Bonferroni 校正过于保守,可能不是最佳选择,但它比较容易实施。

4. 参考资料

  • How can I understand a 3-way continuous interaction?, UCLA FAQs, -Link-

  • Dawson, J.F. & Richter, A.W. (2004) A significance test of slope differences for three-way interactions in moderated multiple regression analysis. RP0422. Aston University, Birmingham, UK.

  • Dawson, J. F., A. W. Richter, 2006, Probing three-way interactions in moderated multiple regression: Development and application of a slope difference test, Journal of Applied Psychology, 91 (4): 917. -Link-, -PDF-, -cited-2000+

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 交乘 交互 边际效应
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh