看似无关的回归后的利润率在Stata中太慢

看似无关的回归后的利润率在Stata中太慢,stata,margins,Stata,Margins,我有一个300万obs数据集。我需要用SUR估计LPM,并得到边际效应 我用了gsem。。。vce(群集x),然后页边距。。。强制执行。但是需要很长时间才能得到利润率结果(超过2小时)。我确实需要为CI设置标准错误,因此我不能使用nose选项 还有其他方法可以提高速度吗?确切的代码取决于您所指的确切边际效果。您可以使用lincom计算部分效果,其速度很可能快于边距 例如,假设我们估计该模型: x1对y的部分效应可通过对x1进行偏导数获得: 通过插入平均值,我们可以在x2和x3的平均值处得到x

我有一个300万obs数据集。我需要用SUR估计LPM,并得到边际效应

我用了
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
来计算边距。@你有没有一个例子来说明我是如何做到的?谢谢!