Записване на коефициенти и стандартни грешки като променливи

Изпълних регресия и бих искал да запазя коефициентите и стандартните грешки като променливи.

Виждам коефициентите с 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