Сохранение коэффициентов и стандартных ошибок как переменных

Я выполнил регрессию и хотел бы сохранить коэффициенты и стандартные ошибки как переменные.

Я вижу коэффициенты с ereturn list и e(b), но у меня проблемы с получением стандартных ошибок. Кроме того, я сейчас не совсем понимаю, как превратить их в переменные. В руководстве Stata они ссылаются на [eqno] b[varname] и [eqno] se[varname], но нет примера, и я не могу понять / найти в Интернете, как их использовать.

Пример, где b1 - коэффициент регрессии для зависимой переменной 1, se1 - стандартная ошибка регрессии для зависимой var1:

name    year    output  var1    var2    b1  b2  se1 se2  
a   1   0.72    0.74    0.87    0.64    0.15    0.48    0.62  
a   2   0.61    0.75    0.33    0.64    0.15    0.48    0.62  
a   3   0.08    0.61    0.85    0.64    0.15    0.48    0.62  
b   1   0.02    0.22    0.26    0.64    0.15    0.48    0.62  
b   2   0.8 0.32    0.51    0.64    0.15    0.48    0.62  
b   3   0.47    0.68    0.79    0.64    0.15    0.48    0.62  
c   1   0.56    0.12    0.63    0.64    0.15    0.48    0.62  
c   2   0.35    0.49    0.53    0.64    0.15    0.48    0.62  
c   3   0.93    0.65    0.97    0.64    0.15    0.48    0.62 

Любая помощь будет очень признательна!


person user3507584    schedule 30.05.2014    source источник
comment
Зачем вам сохранять константы в переменных? Попробуйте scalars или locals. Стандартная ошибка - это просто квадратный корень из дисперсии. e(V) содержит матрицу вариации-ковариации.   -  person Roberto Ferrer    schedule 30.05.2014


Ответы (2)


Пример сделать это вручную,

sysuse auto, replace
reg price mpg foreign trunk weight length
mata: b=st_matrix("e(b)")' // extracts e(b) into mata matrix b
mata: se=sqrt(diagonal(st_matrix("e(V)"))) // converts e(V) into se and placed in mata matrix se
getmata b se, force // force mata matrices into variables
list b se if b<.

Или, чтобы избежать мата, вы можете использовать,

sysuse auto, replace
reg price mpg foreign trunk weight length
ereturn list
mat b=e(b)' // transpose e(b) into matrix b
svmat double b, n(beta) // convert matrix b into variable beta1 (see help svmat)

mat V=e(V) // place e(V) in V
loca nv=`e(rank)' // count number of right hand variables
mat se=J(`nv',1,-9999) // create empty matrix for standard errors
forval i=1/`nv' {
    mat se[`i',1]=sqrt(V[`i',`i']) // convert the variances into the se one at a time
}   
svmat double se, n(se) // convert matrix se into variable se1
list beta1 se1 if beta1<.

Не совсем уверен, как вы хотели расположить значения. Если они вам нравятся в столбцах, а не в строках (скажем, вы хотите вручную предсказать yhat), просто транспонируйте матрицы перед запуском svmat. Необходимо изменить только эти три строки.

mat b=e(b) // instead of "mat b=e(b)'"
mat se=J(1,`nv',-9999) // instead of "mat se=J(`nv',1,-9999)"
mat se[1,`i']=sqrt(V[`i',`i']) // instead of "mat se[1,`i']=sqrt(V[`i',`i'])"
person Aspen Chen    schedule 30.05.2014

Роджер Ньюсон из Imperial написал хороший пакет под названием parmest, который будет сделай это за тебя. Мне потребовалось время, чтобы проработать варианты, но это работает очень хорошо.

person drstevok    schedule 30.05.2014