martes, 23 de abril de 2019

Programando un comando de estimación en Stata: Un primer comando ado.

Extracto traducido y basado del publicado por David M. Drukker, Director Ejecutivo de Econometría.


Analizo el código de un comando de estimación simple para centrarme en los detalles de cómo implementar un comando de estimación. El comando que discuto estima la media por el promedio de la muestra. Comienzo por revisar las fórmulas y un do-file que las implementa. Posteriormente introduzco la programación de archivos ado y discuto dos versiones del comando. En el camino, ilustro algunas de las características de postestimación que funcionan después del comando.

Esta es la cuarta publicación de la serie Programando un comando de estimación en Stata


Las fórmulas para nuestro estimador

Las fórmulas para el promedio de la muestra y su varianza muestral estimada, asumiendo un proceso distribuido de forma independiente e idéntica, son


El código mean1.do realiza estos cálculos en price de la base de datos auto.




mean1.do utiliza summarize para calcular las estadísticas descriptivas. Las líneas 5-7 y la línea 11 almacenan los resultados guardados por summarize en r() en macros locales que posteriormente se usan para calcular las fórmulas. Le recomiendo que utilice double, en lugar del formato predeterminado float para calcular todas las variables utilizadas en las fórmulas, ya que casi siempre vale la pena ocupar la memoria adicional para obtener la precisión adicional que ofrece el double sobre float. (Esencialmente, cada variable ocupa el doble de espacio, pero obtienes los cálculos correctos de aproximadamente 10-16 en lugar de 10−8).

Estos cálculos producen lo siguiente


Ejemplo 1: Cálculo de la media y su varianza muestral.


Ahora verifico que mean produzca los mismos resultados.


Ejemplo 2: Resultados de mean.




Un primer archivo ado

El código en mymean1.ado realiza los mismos cálculos que mean1.do. (El archivo mymean1.ado está en mi directorio de trabajo actual)


La línea 1 de mymean1.ado especifica que el archivo define el comando mymean1. El nombre del comando debe ser el mismo que el nombre del archivo que precede al sufijo .ado. El comando mymean1 realiza los mismos cálculos que el do-file mean1.do.


Ejemplo 3: Resultados de mymean1



Un comando ligeramente mejor

Queremos que nuestro comando sea reutilizable; queremos que estime la media de cualquier variable en la memoria, en lugar de solo para price realizado por mymean1.ado. En la línea 5 de mymean2.ado, utilizamos el comando syntax para almacenar el nombre de la variable especificada por el usuario en la macro local varlist que utilizamos en el resto de los cálculos.


El comando extremadamente útil syntax coloca los elementos de la sintaxis de Stata especificados por el usuario en macros locales y arroja errores cuando el usuario comete un error. Discutiré syntax con mayor detalle en publicaciones posteriores.

Comienzo por ilustrar cómo replicar los resultados anteriores.


Ejemplo 4: Resultados de mymean2 price


Ahora demostraré que funciona para otra variable.


Ejemplo 5: Resultados de mymean2 trunk



Almacenando los resultados en e()

mymean2.ado no almacena los resultados que despliega. Arreglaremos este problema en mymean3.ado. La línea 2 especifica la opción e-class en program define para hacer a mymean3 un comando de clase e. La línea 18 utiliza ereturn post para mover la matriz de estimaciones puntuales (b) y la varianza-covarianza estimada del estimados (VCE) dentro de e(b) y e(v). El marco de estimación-postestimación usa nombres de parámetros para visualización, pruebas de hipótesis y otras características. En las líneas 15 y 16, colocamos esos nombres en las columnas del vector de estimaciones y el VCE estimado. En la línea 17, colocamos esos nombres en la fila del VCE estimado.


El comando ereturn display en la línea 19 de mymean3.ado fácilmente crea una tabla de salida estándar usando los resultados ahora almacenados en e(b) y e(V).


Ejemplo 6: Resultados de mymean3 trunk



Estimación – postestimación

test, lincom, testnl, nlcom, y otras características estimación-posestimación basadas en la prueba Wald, funcionan después de mymean3 porque toda la información requerida está almacenada en  e(b) y e(V).

Para ilustrarlo, realizo una prueba Wald con hipótesis nula de que la media de trunk es 11.



Ejemplo 7: Las pruebas funcionan después de mymean3


Los resultados almacenados en e() son el pegamento que mantiene unido el marco de estimación-postestimación. Hasta ahora solo hemos almacenado e(b) y e(V), por lo que aún no funcionan todas las características estándar. (Pero llegaremos allí en la serie #StataProgramming).


Usando nombres temporales para objetos globales

Las variables y matrices de Stata son globales, como se explicó en mi anterior publicación de blog. Necesitamos algunos nombres seguros para los objetos globales. Estos nombres seguros no deberían estar en uso en ningún otro lugar, y deberían ser temporales, ya que queremos que Stata borre los objetos correspondientes cuando finalice el comando. Los comandos tempvar y tempname ponen nombres seguros en macros locales y luego borran los objetos correspondientes cuando el archivo ado o do finaliza. Descartamos explícitamente e2, si existía, en la línea 9 del bloque de código 2, en la línea 12 del bloque de código 3 y en la línea 11 del bloque de código 4. No necesitamos una línea de este tipo en el bloque de código, porque estamos utilizando nombres temporales de variables.

En la línea 7 de mymean4.ado, el comando tempvar coloca un nombre seguro en la macro local e2. En la línea 8 de mymean4.ado, el comando tempname coloca nombres seguros en las macros locales b y V. Ilustro el formato seguido por estos nombres seguros al mostrarlos en las líneas 9–11. La salida revela que a un par de guiones bajos le siguen números y letras mayúsculas. La línea 15 ilustra el uso de estos nombres seguros. En lugar de crear la matriz b, creamos la matriz cuyo nombre está almacenado en la macro local b. En la línea 8, el comando tempname creó la macro local b para mantener un nombre seguro.


El código produce la siguiente salida

Ejemplo 8: Resultados de mymean4 trunk


Removiendo las líneas que despliegan los nombres seguros contenidos en las macros locales obtenemos mymean5.ado.



Este código produce el resultado


Ejemplo 9: Resultados de mymean5 trunk



Hecho y sin hacer

Ilustré algunas técnicas básicas de programación de archivos ado mediante la implementación de un comando que estima la media de la variable. Aunque tenemos un comando que produce resultados correctos y fáciles de leer, que tienen algunas características de estimación - postestimación, solo hemos tachado la superficie de lo que normalmente queremos hacer en un comando de estimación. Profundizo un poco más en las siguientes publicaciones al desarrollar un comando que realiza una estimación de mínimos cuadrados ordinarios.



Gracias por leernos. Siga al pendiente de nuestras próximas entradas y siéntase libre de compartir este blog con sus colegas y amigos.

Para cualquier información referente a Stata, escríbanos a: info@multion.com 

Este blog es administrado por MultiON Consulting S.A. de C.V.

No hay comentarios.:

Publicar un comentario