0

我有以下普通最小二乘模型(OLS)交互模型,我想为三重交互提取离散边际效应(即,在离散的速度和外国制造汽车类别中重量的平均边际效应)weight* speed*foreign

mpg ~ cost + foreign + weight + speed + foreign + cost*foreign + weight*speed + weight*speed*foreign 

可以看出,模型中有三个交互。变量指定如下:

cost是一个以市场上所有汽车的平均值为中心的连续变量,负值表示低于平均值的程度,正值表示更昂贵的汽车。

foreign是一个二进制变量,1 国外/0 国内

weight是一个连续变量

speed是一个因子变量,表示汽车在三个类别中行驶的速度,低-中-高。低是基线类别(省略类别)。

感兴趣的数量是模型中的三重交互:weight*speed*foreign。我使用以下代码来估计模型并提取相关系数和方差协方差矩阵。我想使用 Berry 等人的以下程序。(2016 年)文章:“改进假设相互作用的理论测试”,使用以下图表:边际效应公式

我使用以下代码提取了导出边际效应和方差-协方差矩阵所需的相关系数:

m <- lm(mpg ~ cost + foreign + weight + speed + foreign + cost*foreign + weight*speed + weight*speed*foreign, data=x)
beta.hat <- coef(m) 
cov <-  vcov(m)

最终,我想要一个包含&weight的不同离散类别的平均边际效应的数据框,最终目标是显示离散边际效应的点图。根据图像,我知道如何推导因子变量 ( ) 的两个未省略类别的边际效应。例如,我认为这对于“高速”是正确的:speedforeignspeed

z0 <- seq(0,1,1) #This captures the two-categories of the Z conditioning variable of foreign
dy.dx <-  beta.hat["weight"] + beta.hat["weight*speed=High"] + beta.hat["weight*foreign*speed=High"]*z0 # Discrete Marginal Effect
se.dy.dx <- sqrt(cov["weight", "weight"] + z0^2*cov["weight * speed=High", "weight * speed=High"] + z0^2*cov["foreign * weight", "foreign * weight"] + z0^2*z0^2*cov["foreign * weight * speed=High", "foreign * weight * speed=High"] + 2*z0*cov["weight","weight * speed=High"] + 2*z0*cov["weight","foreign * weight"] + 2*z0*z0*cov["weight","foreign * weight * speed=High"] + 2*z0*z0*cov["weight * speed=High","foreign * weight"] + 2*z0*z0^2*cov["weight * speed=High","foreign * weight * speed=High"] + 2*z0*z0^2*cov["foreign * weight","foreign * weight * speed=High"]) #Compute Standard Errors for MEs of foreign and domestic cars

我的主要问题是我如何推导出被忽略的速度类别的重量的平均边际效应?我知道这是由weight*speed构成项捕获的,但是在计算估计值的标准误差时,我是否需要考虑三重交互作用dy.dx?考虑到 Berry 等人在第 3 行的表格,这是一个适当的解决方案吗?

4

1 回答 1

1

我不确定您使用的是什么数据集,因此我将使用内置mtcars数据集展示一个稍作修改的版本。为了获得您想要的数量,我将使用margins

# three variables
## wt # continuous (your `weight` variable)
## vs # 0/1 (your `foreign` variable)
## cyl # categorical (your `speed` variable)

# note simplified formula construction:
m <- lm(mpg ~ wt*vs*cyl, data = mtcars)

library("margins")
(mar <- margins(m, at=list(vs = 0:1, cyl = c(4,6,8))))
Average marginal effects at specified values
## lm(formula = mpg ~ wt * vs * cyl, data = mtcars)
## 
##  at(vs) at(cyl)      wt      vs      cyl
##       0       4  -4.083 -0.0502 -1.18447
##       1       4  -5.721 -0.0502 -0.05289
##       0       6  -3.129  2.2130 -1.18447
##       1       6 -13.139  2.2130 -0.05289
##       0       8  -2.176  4.4761 -1.18447
##       1       8 -20.557  4.4761 -0.05289

上面的wt列显示了连续项在与之交互的两个变量的水平上的边际效应。要绘制此图,您有几个选择。一个简单的就是:

plot(mar)

边距图

来看看结果。另一个可能是获取summary()对象(这只是一个数据框)并根据需要进行绘图(基础、ggplot 等):

summary(mar)
##  factor vs cyl      AME      SE       z      p    lower   upper
##     cyl  0   4  -1.1845  1.5304 -0.7740 0.4389  -4.1839  1.8150
##     cyl  0   6  -1.1845  1.5304 -0.7740 0.4389  -4.1839  1.8150
##     cyl  0   8  -1.1845  1.5304 -0.7740 0.4389  -4.1839  1.8150
##     cyl  1   4  -0.0529  1.4410 -0.0367 0.9707  -2.8772  2.7714
##     cyl  1   6  -0.0529  1.4398 -0.0367 0.9707  -2.8748  2.7690
##     cyl  1   8  -0.0529  1.4405 -0.0367 0.9707  -2.8761  2.7703
##      vs  0   4  -0.0502  5.8858 -0.0085 0.9932 -11.5861 11.4857
##      vs  0   6   2.2130  3.6550  0.6055 0.5449  -4.9508  9.3767
##      vs  0   8   4.4761  5.2348  0.8551 0.3925  -5.7839 14.7361
##      vs  1   4  -0.0502  5.8896 -0.0085 0.9932 -11.5936 11.4932
##      vs  1   6   2.2130  3.6611  0.6045 0.5455  -4.9626  9.3886
##      vs  1   8   4.4761  5.2397  0.8543 0.3930  -5.7935 14.7457
##      wt  0   4  -4.0826  6.3551 -0.6424 0.5206 -16.5383  8.3731
##      wt  0   6  -3.1291  3.3271 -0.9405 0.3470  -9.6502  3.3920
##      wt  0   8  -2.1756  0.9056 -2.4023 0.0163  -3.9507 -0.4006
##      wt  1   4  -5.7210  1.3883 -4.1209 0.0000  -8.4420 -3.0000
##      wt  1   6 -13.1390 12.3771 -1.0616 0.2884 -37.3977 11.1198
##      wt  1   8 -20.5569 24.7939 -0.8291 0.4070 -69.1522 28.0383
于 2017-03-24T09:23:40.797 回答