David M. Drukker, Director Ejecutivo de Econometría.
Muestro
cómo escribir un comando de estimación de Stata que implemente el estimador de
mínimos cuadrados ordinarios (MCO) al explicar el código. Uso conceptos que
presenté en publicaciones anteriores de #StataProgramming. En particular, me
baso en Programando un comando de estimación en Stata:
Usado comandos matriciales y funciones para calcular objetos MCO, en el cual están las fórmulas para
MCO y mostré cómo calcularlas usando comandos y funciones de matriciales, y en Programando un comando de estimación en Stata: Un
primer comando ado,
en el que introduje algunos conceptos de programación ado. Aunque presento
algunos trucos de macro locales que uso todo el tiempo, también me baso en Programando un comando de estimación en Stata:
Dónde almacenar tus cosas.
Esta
es la sexta publicación de la serie Programando
un comando de estimación en Stata. Te recomiendo que empieces por el
principio.
Trucos para Macros Locales
Uso
muchos trucos para macro locales en mis archivos ado. En esta sección,
ilustramos los que uso en los comandos que desarrollo en esta publicación. En
cada archivo ado que escribo, hago preguntas sobre listas de nombres de
variables almacenadas en macros locales. Con frecuencia utilizo las funciones extendidas
para macros y el comando gettoken para hacer estas preguntas y almacenar
los resultados en una macro local y almacenar los resultados en una macro
local.
La sintaxis para guardar el resultado de una función
extendida para macro en una macro local es
local localname : extended_fcn
A
continuación, utilizo la función extendida para macro word count para
contar el número de elementos en la lista y guardar los resultados en la macro
local count.
Ejemplo 1: Guardando y extrayendo el
resultado de una función extendida para macros
Hay
diversas funciones extendidas para macros, pero solamente ilustro la que
utilizo en esta publicación; escriba help
extended fcn
para obtener una lista completa.
Un
token es un elemento en una lista. Frecuentemente utilizo el comando gettoken dividir una lista en partes.
El comando gettoken tiene la sintaxis
gettoken localname1
[localname2] : localname3
gettoken guarda el
primer token en la lista guardada en la macro local localname3 dentro de
la macro local localname1. Si se especifica localname2, los
tokens restantes se guardan en la macro local localname2.
Utilizo gettoken para
guartdar el primer token guardado en mylist dentro de
la macro local first, cuyo
contenido, subsecuentemente, extraigo y despliego.
Ejemplo 2: Usando gettoken para
guardar solamente el primer token
Ahora utilizo gettoken para guardar el primer token
guardado en mylist dentro de la macro local first y los tokens remanentes
dentro de la macro local left.
Subsecuentemente, extraigo y despliego
los contenidos de first y left.
Ejemplo 3: Usando gettoken para
guardar el primero y los restantes tokens
Frecuentemente quiero incrementar el valor de la macro local
por un monto fijo, digamos, 3. Ahora ilustraré una solución que uso.
Ejemplo 4: Actualización de macro
local
Cuando el valor actualizado, también conocido como el valor
de incremento, es 1, podemos usar el operador de incremento, como
aparece a continuación:
Ejemplo 5: Actualización de macro
local
Una primera versión de myregress
Eñ codigo en myregress1 implementa una versión de las
formulas MCO. Utilizo myregress1 en el ejemplo 6. Debajo del
ejemplo 6, comento el codigo y el resultado.
Ejemplo 6: Resultado de myregress
Aquí
mis comentarios del código y el resultado del ejemplo 6.
- La línea 2 especifica que myregress1 es un comando de clase e que guarda sus resultados en e().
- Las
líneas 5 a 8 ilustran que el comando syntax guarda los nombres d elas
variables especificadas por el usuario en la macro local varlist. Este
comportamiento también es explicado en el ejemplo 6.
- La
línea 10 usa el comando gettoken para guardar el nombre de la primera
variable guardada en la macro local varlist dentro de la macro local depvar.
La línea 11 despliega este nombre y el uso se ilustra en el ejemplo 6.
- La
línea 13 usa matrix accum para poner (X’X) y (X’y) dentro
de una matriz de Stata llamada zpz, tal como se discutió en Programando un comando de estimación en Stata:
Usado comandos matriciales y funciones para calcular objetos MCO y mayormente ilustrado en las líneas
14 y 15 y el ejemplo 6.
- La
línea 17 guarda el número de variables en la macro local varlist dentro
de la macro local p.
- La
línea 18 incrementa la macro local p en 1 para contar con el
término constante incluido en matrix accum por defecto.
- Las
líneas 20 a 23 extraen (X’X) y (X’y) de zpz y pone el
vector de puntos de estimación dentro del vector fila b.
- La línea 25 pone dentro de la variable xbhat.
- Las líneas 26 y 27 calculan los residuales y los residuales al cuadrado, respectivamente.
Las
líneas 28 a 32 calculan la matriz estimada de varianzas y covarianzas del
estimador (VCE) de la suma de residuales al cuadrado.
- La
línea 33 guarda b y V dentro de e(b) y e(V),
respectivamente.
- La
línea 34 guarda el nombre del comando de estimación (myregress1) en e(cmd).
- La
línea 35 produce una tabla estándar de resultados de Stata a partir de los
resultados en e(b) y e(V).
myregress1
contiene código que ayuda a ilustrar
cómo trabaja, y utiliza nombres codificados para objetos globales como
variables Stata y matrices Stata. Los usuarios no desean ver el resultado de
las líneas de la ilustración, por lo que deben eliminarse. Los usuarios no
desean que sus matrices Stata globales se sobrescriban con un comando que
utilizan, que es lo que myregress1 haría a una matriz llamada zpz,
xpx, xpxi, b o V.
El código en myregress2 arregla estos problemas.
- La
línea 8 usa tepname para poner nombres seguros dentro de las macros
locales zpz, xpx, xpxi, b y V.
- La
línea 9 usa tempvar para poner nombres seguros dentro de las macros
locales xbhat, res, res2.
- Las
líneas 11, 14 a 18 y 25 a 26 usa los nombres seguros en las macros locales
creadas por tempname en lugar de los nombres codificados para las
matrices.
- Las
líneas 18 a 20 usan los nombres seguros en las macros locales creadas por tempvar
en lugar de los nombres codificados para las variables que crea.
- La siguiente imagen muestra el resultado obtenido por myregress2.
Ejemplo 7: Resultado de myregress2
Hecho y sin hacer
Después de revisar algunos trucos con macros locales que uso en la
mayoría de los archivos ado que escribo, desarrollo dos versiones de un comando
ado que implementa un estimador de MCO. En la siguiente publicación,
extenderé este comando para que el usuario pueda solicitar un VCE
robusto, o que el término constante pueda ser suprimido, o ambos.
Esto es todo por esta ocasión. Te invitamos a seguir al pendiente de nuestro Blog, ¡Gracias!
No hay comentarios.:
Publicar un comentario