matrix - regresion - manual stata econometria
Stata: combina coeficientes/errores estándar de varias regresiones en un solo conjunto de datos(el número de variables puede variar) (1)
Ya he hecho una pregunta sobre el almacenamiento de coeficientes y errores estándar de varias regresiones en un solo conjunto de datos.
Permítanme reiterar el objetivo de mi pregunta inicial:
Me gustaría ejecutar varias regresiones y almacenar sus resultados en un archivo DTA que luego podría usar para el análisis. Mis limitaciones son:
- No puedo instalar módulos (estoy escribiendo código para otras personas y no estoy seguro de qué módulos han instalado)
- Algunos de los regresores son variables de factores.
- Cada regresión difiere solo por la variable dependiente, por lo que me gustaría almacenar eso en el conjunto de datos final para hacer un seguimiento de a qué regresión corresponden los coeficientes / varianzas.
La solución sugerida por Roberto Ferrer estaba funcionando bien en mis datos de prueba, pero resulta que no funciona tan bien en otro tipo de datos. La razón es que mi muestra cambia ligeramente de una regresión a la siguiente, y alguna variable de factor no toma el mismo número de valores en cada regresión. Esto da como resultado que los efectos fijos (creados sobre la marcha usando i.myvar
como regresor) no tengan la misma cardinalidad.
Digamos que decido poner los efectos fijos de año (como en: interceptos específicos de un año) utilizando i.year
pero en una regresión no hay observación para el año 2006. Eso significa que esta regresión particular tendrá un regresor menos (el maniquí correspondiente al año == 2006 no se crea), y como resultado una matriz más pequeña que almacena los coeffs.
Esto da como resultado un error de conformabilidad cuando se intenta apilar las matrices juntas.
Me preguntaba si había una manera de hacer que la solución inicial sea robusta a un número variable de regresores. (¿Tal vez guardar cada regresión como dta, luego fusionar?)
Todavía estoy sujeto a la restricción de que no puedo confiar en paquetes externos.
Puede seguir la estrategia de append
conjuntos de datos, haciendo pequeños cambios al código en la pregunta que hace referencia:
clear
set more off
save test.dta, emptyok replace
foreach depvar in marriage divorce {
// test data
sysuse census, clear
generate constant = 1
replace marriage = . if region == 4
// regression
reg `depvar'' popurban i.region constant, robust noconstant // regressions
matrix result_matrix = e(b)/vecdiag(e(V)) // grab coeffs and their variances in a 2xK matrix
matrix rownames result_matrix = `depvar''_b `depvar''_v // add rownames to the two extra rows
// get original column names of matrix
local names : colfullnames result_matrix
// get original row names of matrix (and row count)
local rownames : rowfullnames result_matrix
local c : word count `rownames''
// make original names legal variable names
local newnames
foreach name of local names {
local newnames `newnames'' `=strtoname("`name''")''
}
// rename columns of matrix
matrix colnames result_matrix = `newnames''
// from matrix to dataset
clear
svmat result_matrix, names(col)
// add matrix row names to dataset
gen rownames = ""
forvalues i = 1/`c'' {
replace rownames = "`:word `i'' of `rownames''''" in `i''
}
// append
append using "test.dta"
save "test.dta", replace
}
// list
order rownames
list, noobs
El resultado es lo que quieres Sin embargo, el problema es que el conjunto de datos se vuelve a cargar cada vez que pasa el ciclo; carga datos tantas veces como regresiones que estime.
Es posible que desee echar un vistazo a la post
y verificar si puede administrar una solución más eficiente. statsby
también podría funcionar, pero necesita encontrar una forma inteligente de cambiar el nombre de las variables almacenadas.