看似无关的回归后的利润率在Stata中太慢
我有一个300万obs数据集。我需要用SUR估计LPM,并得到边际效应 我用了看似无关的回归后的利润率在Stata中太慢,stata,margins,Stata,Margins,我有一个300万obs数据集。我需要用SUR估计LPM,并得到边际效应 我用了gsem。。。vce(群集x),然后页边距。。。强制执行。但是需要很长时间才能得到利润率结果(超过2小时)。我确实需要为CI设置标准错误,因此我不能使用nose选项 还有其他方法可以提高速度吗?确切的代码取决于您所指的确切边际效果。您可以使用lincom计算部分效果,其速度很可能快于边距 例如,假设我们估计该模型: x1对y的部分效应可通过对x1进行偏导数获得: 通过插入平均值,我们可以在x2和x3的平均值处得到x
gsem。。。vce(群集x)
,然后页边距。。。强制执行
。但是需要很长时间才能得到利润率结果(超过2小时)。我确实需要为CI设置标准错误,因此我不能使用nose
选项
还有其他方法可以提高速度吗?确切的代码取决于您所指的确切边际效果。您可以使用
lincom
计算部分效果,其速度很可能快于边距
例如,假设我们估计该模型:
x1对y的部分效应可通过对x1进行偏导数获得:
通过插入平均值,我们可以在x2和x3的平均值处得到x1对y的影响。要在Stata执行此操作:
// Get data
webuse regress
// Run the regression
qui reg y c.x1##c.(x2 x3)
// Get the sample means of x2 and x3
sum x2 if e(sample), meanonly
scalar m_x2 = r(mean)
sum x3 if e(sample), meanonly
scalar m_x3 = r(mean)
// Calculate partial effect
lincom x1 + m_x2 * c.x1#c.x2 + m_x3*c.x1#c.x3
结果:
. lincom x1 + m_x2 * c.x1#c.x2 + m_x3*c.x1#c.x3
( 1) x1 - .2972973*c.x1#c.x2 + 3019.459*c.x1#c.x3 = 0
------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
(1) | 1.409372 1.005254 1.40 0.163 -.5778255 3.396569
------------------------------------------------------------------------------
如您所见,这与通过边距获得的结果相同:
. qui reg y c.x1##c.(x2 x3)
. margins, dydx(x1) atmeans
Conditional marginal effects Number of obs = 148
Model VCE : OLS
Expression : Linear prediction, predict()
dy/dx w.r.t. : x1
at : x1 = 3.014865 (mean)
x2 = -.2972973 (mean)
x3 = 3019.459 (mean)
------------------------------------------------------------------------------
| Delta-method
| dy/dx Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x1 | 1.409372 1.005254 1.40 0.163 -.5778256 3.396569
------------------------------------------------------------------------------
这里的速度比较显示,在这种情况下,lincom
比margins
快14倍,观察次数为300万次:
clear
webuse regress
expand 20271
gen lincom = .
gen margins = .
qui reg y c.x1##c.(x2 x3)
forval i = 1/50 {
timer clear
timer on 1
sum x2 if e(sample), meanonly
scalar m_x2 = r(mean)
sum x3 if e(sample), meanonly
scalar m_x3 = r(mean)
lincom x1 + m_x2 * c.x1#c.x2 + m_x3*c.x1#c.x3
timer off 1
timer on 2
margins, dydx(x1) atmeans
timer off 2
timer list
replace lincom = r(t1) in `i'
replace margins = r(t2) in `i'
}
ttest lincom == margins
di "On average, lincom is " %4.2f `=r(mu_2) / r(mu_1)' " times faster than margins with `=_N' observations"
// On average, lincom is 13.88 times faster than margins with 3000108 observations
确切的代码取决于您确切表示的边际效果。您可以使用lincom
计算部分效果,其速度很可能快于边距
例如,假设我们估计该模型:
x1对y的部分效应可通过对x1进行偏导数获得:
通过插入平均值,我们可以在x2和x3的平均值处得到x1对y的影响。要在Stata执行此操作:
// Get data
webuse regress
// Run the regression
qui reg y c.x1##c.(x2 x3)
// Get the sample means of x2 and x3
sum x2 if e(sample), meanonly
scalar m_x2 = r(mean)
sum x3 if e(sample), meanonly
scalar m_x3 = r(mean)
// Calculate partial effect
lincom x1 + m_x2 * c.x1#c.x2 + m_x3*c.x1#c.x3
结果:
. lincom x1 + m_x2 * c.x1#c.x2 + m_x3*c.x1#c.x3
( 1) x1 - .2972973*c.x1#c.x2 + 3019.459*c.x1#c.x3 = 0
------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
(1) | 1.409372 1.005254 1.40 0.163 -.5778255 3.396569
------------------------------------------------------------------------------
如您所见,这与通过边距获得的结果相同:
. qui reg y c.x1##c.(x2 x3)
. margins, dydx(x1) atmeans
Conditional marginal effects Number of obs = 148
Model VCE : OLS
Expression : Linear prediction, predict()
dy/dx w.r.t. : x1
at : x1 = 3.014865 (mean)
x2 = -.2972973 (mean)
x3 = 3019.459 (mean)
------------------------------------------------------------------------------
| Delta-method
| dy/dx Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x1 | 1.409372 1.005254 1.40 0.163 -.5778256 3.396569
------------------------------------------------------------------------------
这里的速度比较显示,在这种情况下,lincom
比margins
快14倍,观察次数为300万次:
clear
webuse regress
expand 20271
gen lincom = .
gen margins = .
qui reg y c.x1##c.(x2 x3)
forval i = 1/50 {
timer clear
timer on 1
sum x2 if e(sample), meanonly
scalar m_x2 = r(mean)
sum x3 if e(sample), meanonly
scalar m_x3 = r(mean)
lincom x1 + m_x2 * c.x1#c.x2 + m_x3*c.x1#c.x3
timer off 1
timer on 2
margins, dydx(x1) atmeans
timer off 2
timer list
replace lincom = r(t1) in `i'
replace margins = r(t2) in `i'
}
ttest lincom == margins
di "On average, lincom is " %4.2f `=r(mu_2) / r(mu_1)' " times faster than margins with `=_N' observations"
// On average, lincom is 13.88 times faster than margins with 3000108 observations
也许你可以自己用lincom
来计算边距。@你有没有一个例子来说明我是如何做到的?谢谢!也许你可以自己用lincom
来计算边距。@你有没有一个例子来说明我是如何做到的?谢谢!