Команда 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(*)
, это запрашивает предельные эффекты. Который можно получить способом, идентичным Stata, используя margins::margins()
, как вы уже знаете.