在R中复制STATA的默认边距输出

时间:2018-05-03 15:00:50

标签: r

R套餐保证金默认为计算平均边际效应。 使用选项dydx(*)

在STATA中计算平均边际效应

那是:

STATA:
margins, dydx(*)

给出与

相同的结果
R:
margins(model)

我们是参与STATA课程的几个R用户,其中使用的边距命令只是

STATA:    
margins

我们尝试过许多不同的方法来重现默认的STATA输出,但没有运气。有人可以帮助我们或链接我们相关指南吗? R-package“margin”的插图仅使用带有“dydx(*)”选项的示例。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

Stata的margins命令执行两项任务:

  • “预测边距”
  • “边际效应”(各种类型-平均边际效应,平均局部效应,平均边际效应,弹性等)

当您指定margins VARNAME时,您将获得预测边距,这是数据集反事实版本中的平均预测值,其中VARNAME固定为可能的值。请考虑以下内容:

webuse margex, clear
quietly regress y i.sex i.group
. margins sex

Predictive margins                              Number of obs     =      3,000
Model VCE    : OLS

Expression   : Linear prediction, predict()

------------------------------------------------------------------------------
             |            Delta-method
             |     Margin   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
         sex |
       male  |   60.56034   .5781782   104.74   0.000     59.42668    61.69401
     female  |   78.88236   .5772578   136.65   0.000      77.7505    80.01422
------------------------------------------------------------------------------

您可能会认为这等同于简单地获取所有病例的预测值,然后获取男性和女性的亚组平均值,但是:

predict y_star
tabstat y_star, by(sex)

Summary for variables: y_star
     by categories of: sex 

   sex |      mean
-------+----------
  male |   64.5721
female |  74.88129
-------+----------
 Total |  69.73357
------------------

实际发生的是:

replace sex = 0
predict p_male
replace sex = 1
predict p_female
mean p_male p_female

Mean estimation                   Number of obs   =      3,000

--------------------------------------------------------------
             |       Mean   Std. Err.     [95% Conf. Interval]
-------------+------------------------------------------------
      p_male |   60.56034   .1301116      60.30523    60.81546
    p_female |   78.88236   .1301117      78.62725    79.13748
--------------------------------------------------------------

因此,该功能为您提供了反事实平均预测。

您可以在R中获得相同的结果:

library("prediction")
library("webuse")
webuse::webuse("margex")
m <- lm(y ~ sex + group, data = margex)
prediction(m, at = list(sex = c(0,1)))
Average predictions for 3000 observations:
 at(sex) value
       0 60.51
       1 78.93

不幸的是,预测没有提供预测边距的差异,只是边距本身。

如果您指定, dydx(*),则要求边际效应。如您已经知道的那样,可以使用margins::margins()以与Stata相同的方式获得它。