Mostrando las entradas con la etiqueta Comando. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Comando. Mostrar todas las entradas

miércoles, 19 de febrero de 2020

Programando un comando de estimación en Stata: Usando una subrutina para analizar una opción compleja.


David M. Drukker, Director Ejecutivo de Econometría.

Realizo dos mejoras en el comando que implementa el estimador de mínimos cuadrados ordinarios (OLS) que discutí en Programando un comando de estimación en Stata: Permitiendo opciones. 

Primero, agrego una opción para un estimador robusto por conglomerados de la varianza-covarianza del estimador (VCE). En segundo lugar, hago que el comando acepte la sintaxis moderna para un estimador robusto o un clúster robusto del VCE. En el proceso, uso subrutinas en mi programa ado para facilitar el análisis y analizo algunos trucos de análisis avanzados. 

Esta es la décima publicación de la serie Programando un comando de estimación en Stata: Permitir restricciones de muestra y variables factor. Te recomiendo que empieces por el principio. 

Permitiendo un estimador robusto o robusto por conglomerados (VCE)
La sintaxis de myregress9, la cual discuto en Programando un comando de estimación en Stata: Permitiendo opciones, es 

myregress9 depvar [indepvars] [if] [in] [, robust noconstant

La sintaxis de myregress10, el cual analizo aquí, es 

myregress10 depvar [indepvars] [if] [in] [, vce(robust | cluster clustervar) noconstant

Por defecto, myregress10 estima el VCE asumiendo que los errores son independientes e idénticamente distribuidos (IID). Si la opción vce(robust) se especifica, myregress10 usa el estimador robusto de el VCE. Si la opción vce(cluster clustervar) se especifica, myregress10 usa el estimador robusto por conglomerados del VCE. Vea Cameron y Trivedi (2005), Stock y Watson (2010), Wooldridge (2015) para una introducción a OLS; vea Programando un comando de estimación en Stata: Usado comandos matriciales y funciones para calcular objetos MCO para las formulas y las implementaciones matriciales en Stata. 

Recomiendo que dé un clic en el nombre del archivo para descargar el código para mi myregress10.ado. Para evadir el desplazamiento, vea el código en el editor de archivos do, o en su editor de texto favorito para ver los números de línea. 

Code block 1: myregress10.ado





El comando syntax en la línea 5 pone cualquier cosa que el usuario especifique en vce() dentro de una macro local llamada vce. Por ejemplo, si el usuario escribe:




La macro local vce contendrá “hello there”. Si el usuario no especifica algo en la opción vce(), la macro local vce estará vacía. La línea 14 usa está condición para ejecutar las líneas 15-21 solo si el usuario ha especificado algo en la opción vce.

Cuando el usuario especifica algo en la opción vce, la línea 15 llama a la subrutina ado my_vce_parse para analizar qué hay en la macro local vce. my_vce_parse guarda el nombre de la variable clúster en r(clustervar) y aborda condiciones de error, tal como analizo a continuación. La línea 16 guarda “robust” dentro de la macro local vcetype, y la línea 17 guarda el contenido de la macro local r(clustervar) creada por my_vce_parse dentro de la macro local clustervar. 

Si el usuario no especifica algo en vce(), la macro local vcetype estará vacía y la línea 36 asegura que myregress10 calcule un estimador IID del VCE.

Las líneas 19 y 20 se ejecutan solamente si la macro local clustervar no está vacía. La línea 19 la variable a utilizar, cuyo nombre está guardado en la macro local touse, para abordar valores faltantes en la variable clúster, cuyo nombre está guardado en clustervar. La línea 20 ordena la base de datos en orden ascendente de la variable clúster. Los usuarios no quieren comandos de estimación reordenando sus datos. En la línea 2, especifico la opción sortpreserve en program define para mantener la base de datos en el orden en el que estaba cuando myregress fue ejecutado por el usuario.


Las líneas 36-65 calculan el estimador requerido para el VCE. Recuerde que la macro local vcetype está vacía o contiene “robust” y que la macro local clustervar está vacía o contiene el nombre de la variable clúster. Las condicionales if y else usan los valores guardados en vcetype y clustervar para ejecutar uno o tres bloques de código.


1. Las líneas 38-42 calculan un estimador robusto del VCE cuando vcetype contiene “robust” y clustervar está vacía.

2. Las líneas 45-53 calcula un estimador robusto por conglomerados del VCE cuando vcetype contiene “robust” y clustervar contiene el nombre de la variable clúster.

3. Las líneas 60-64 calculan un estimador IID del VCE cuando vcetype no contiene “robust”.


La línea 73 guarda el nombre de la variable clúster en e(clustervar), si la macro local clustervar no está vacía. 

Las líneas 78-111 define la rclass subrutina ado my_vce_parse, la cual realiza dos tareas. Primero, guarda el nombre de la variable clúster en la macro local r(cluster) cuando el usuario especifica vce(cluster clustervar). Segundo, encuentra casos en los cuales el usuario especifique un error de sintaxis en vce() y reporta un error en tales casos. 

Poniendo estos detalles de análisis dentro de una subrutina hace al comando principal más fácil de seguir. Recomiendo que encapsulen detalles en las subrutinas. 

La subrutina ado my_vce_parse es local al comando ado myregress10; el nombre my_vce_parse está en un espacio para nombres local en myregress10, y my_vce_parse puede ser ejecutado solamente desde myregress10

La línea 79 usa syntax para guardar lo que sea que el usuario especifique en la opción vce() de la macro local vce, La línea 81 pone el número de letras en vce dentro de la macro local case. La línea 83 provoca que la subrutina ado my_vce_error despliegue un mensaje de error y reporte un código de error 498 cuando haya más de dos palabras en vce. (RTecuerde que vce debe contener robust, o bien, cluster clustervar.) 

Habiendo descartado los casos con más de dos palabras, la línea 87 guarda lo que la macro local vce contenga en la macro local 0. La línea 88 usa syntax para analizar lo que está en la macro local 0. Si el usuario especifica vce(robust), o una abreviación válida del mismo, syntax guarda “robust” en la macro local robust; de otra manera, la macro local robust estará vacía. Si el usuario especifica vce(cluster algo), o una abreviación válida de cluster, syntax guarda “cluster” en la macro local cluster; de otra manera, la macro local cluster estará vacía. La opción * hace que syntax ponga cualquier opción remanente dentro de la macro local options. En este caso, syntax guardará el algo en la macro local options. 

Recuerde el truco utilizado en las líneas 87 y 88. La opción de analizar es frecuentemente mucho más fácil al guardar lo que la macro local contiene en la macro local 0 y usando syntax para analizarlo. 

Cuando hay dos palabras en la macro local vce, las líneas 91-100 aseguran que la primera palabra sea “cluster” y que la segunda palabra, guardada en la macro local options, sea el nombre de una variable numérica. Cuando todo está bien, la línea 100 guarda el nombre de esta variable numérica en la macro local clustervar. Las líneas 95-98 usan una construcción delicada para desplegar un error personalizado. En lugar de dejar que confirm despliegue un mensaje de error, las líneas 95-98 usan capture y una condicional if para desplegar nuestro mensaje personalizado de error. En detalle, la línea 95 usa confirm para confirmar que la macro local options contenga el nombre de una variable numérica. capture pone el código producido por confirm en el escalar _rc. Cuando options contenga el nombre de una variable numérica, confirm produce el código de retorno 0 y capture guarda este código de retorno positivo en _rc. 

Cuando todo está bien, la línea 109 limpia lo que sea que esté en r(), y la línea 110 guarda el nombre de la variable clúster en r(clustervar). 

Las líneas 113-118 definen la subrutina ado my_vce_error, la cual despliega un mensaje personalizado de error. Semejante a my_vce_parse, ,my_vce_error es local en myregress10.ado. 

Hecho y sin hacer

Agregué una opción para el estimador robusto por conglomerados del VCE, e hice que myregress10 aceptara la sintaxis moderna tanto para un estimador robusto como uno robusto por conglomerados para el VCE. En el proceso, utilice subrutinas en myregress10.ado para facilitar el análisis de sintaxis, y utilice algunos trucos avanzados sobre esto. 

Leer myregress10.ado hubiera sido más difícil de leer si no hubiera usado subrutinas para simplificar la rutina principal. 

Aunque parezca que he cubierto todos los matices posibles, solo he tratado algunos. Escriba help syntax para obtener más detalles sobre las opciones de análisis mediante el comando syntax. 

Referencias
Cameron, A. C., and P. K. Trivedi. 2005. Microeconometrics: Methods and applications. Cambridge: Cambridge University Press.

Stock, J. H., and M. W. Watson. 2010. Introduction to Econometrics. 3rd ed. Boston, MA: Addison Wesley New York.

Wooldridge, J. M. 2010. Econometric Analysis of Cross Section and Panel Data. 2nd ed. Cambridge, Massachusetts: MIT Press.

Wooldridge, J. M. 2015. Introductory Econometrics: A Modern Approach. 6th ed. Cincinnati, Ohio: South-Western.



viernes, 3 de enero de 2020

Programando un comando de estimación en Stata: Permitiendo opciones.


David M. Drukker, Director Ejecutivo de Econometría.

Realizó tres mejoras al comando que implementa el estimador de mínimos cuadrados ordinarios (OLS) que discutí en Programando un comando de estimación en Stata: Permitir restricciones de muestra y variables factor. Primero, permito al usuario que solicite un estimador robusto de la varianza-covarianza del estimador (VCE). En segundo lugar, permito que el usuario suprima el término constante. Tercero, almaceno los grados de libertad residuales en e(df_r) para que test use la distribución t o F en lugar de la distribución normal o chi cuadrada para calcular el p-value de las pruebas de Wald. 

Esta es la novena publicación de la serie Programando un comando de estimación en Stata: Permitir restricciones de muestra y variables factor. Te recomiendo que empieces por el principio. 

Permitiendo errores estándar robustos

La sintaxis de myregress6, la cual discuto en Programando un comando de estimación en Stata: Permitir restricciones de muestra y variables factor, es 

myregress6 depvar [indepvars] [if] [in]

Donde las variables independientes pueden ser series de tiempo o variables factor. myregress7 tiene la sintaxis

myregress7 depvar [indepvars] [if] [in] [,robust]

Por defecto, myregress7 estima el vce asumiendo que los errores son independientes e idénticamente distribuidos (IID). Si la opción robust se especifica, myregress7 usa el estimador robusto de el VCE. Vea Cameron y Trivedi (2005), Stock y Watson (2010), Wooldridge (2015) para una introducción a OLS; vea Programando un comando de estimación en Stata: Usando comandos matriciales y funciones para calcular objetos MCO para las formulas y las implementaciones matriciales en Stata. Dé un clic en el nombre del archivo para descargar cualquier bloque de código. Vea el código en el editor de archivos do, o en su editor de texto favorito para ver los números de línea.


Code block 1: myregress7.ado








El usuario puede especificar la opción robust escribiendo robust, robus, robu, rob, ro o r. En otras palabras, r es la mínima abreviación de la opción robust, la línea 5 de myregress7 implementa esta sintaxis. Especificar robust es opcional porque Robust está entre corchetes. r es la abreviación mínima porque R está en mayúscula y las letras restantes están en minúsculas. 


Si el usuario especifica robust, o una abreviación valida, la macro local robust contendrá la palabra “robust”; de otra manera, la macro local robust estará vacía. La línea 25 usa este hecho para determinar cuál VCE debería ser calculada; especifica que las líneas 26 a 31 deberán ser ejecutadas si la macro local robust está vacía y que las líneas 32 a 36 deberían ejecutarle de otro modo. Las líneas 26-31 computan el estimador IID de del VCE. Las líneas 32-34 calculan el estimador robusto del VCE. Las líneas 35 y 36 colocan “robust” y “Robust” dentro de las macros locales vce y vcetype respectivamente. 

La línea 41 coloca el contenido de la macro local vce dentro de la macro local e(vce), la cual informa a los usuarios y a los comandos posteriores a la estimación qué estimador de VCE se utilizó. Por convención, e(vce) está vacío para el caso IID. La línea 42 coloca el contenido de la macro local vcetype dentro de la macro local e(vcetype), la cual se utiliza por ereturn display para etiquetar correctamente los errores estándar como robustos. 

Ahora ejecutaré una regresión con errores estándar robustos. 

Ejemplo 1: myregress7 con errores estándar robustos




Suprimiendo el término constante
 myregress8 tiene la sintaxis 
myregress8 depvar [indepvars] [if] [in] [,robust noconstant]



Code block 2: myregress8.ado















































El comando syntax en la linea 5 coloca “noconstant” dentro de la macro local constant si el usuario escribe nocons, noconst, noconsta, noconstan o noconstant; de otra forma, la macro local constant está vacía. La abreviación minima de la opción noconstant es nocons porque el no en minusculas está seguidop por CONStant. Note que especificar la opción crea la macro local constant porque el no es seguido por letras mayusculas que especifican la abreviación minima.

Para implementar la opción, especifico qué contiene la macro local constant como una opción en el comando  matrix accum en la linea 14 y en el comando matriz accum repartidos en las lineas 33 y 34. El comando matrix accum que comienza en la linea 33 es muy largo para una linea. Usé /// para continuar el comando en la linea 34.
Ahora ilustro la opción noconstant.

Ejemplo 2: myregress8 con la opción noconstant


Usando distribuciones t o F

Las tablas de resultados resportadas en los ejemplos 1 y 2 usan la distribución normal para calcular los p-values y lo sintervalos de confianza, porque los comandos de estimación basados en Wald como test y ereturn display usan la normal o la distribución chi cuadrada a menos que los grados de libertad residuales se almacenen en e(df_r).


Code block 3: myregress9.ado


La línea 42 de myregress9.ado guarda los grados de libertad residuales en e(df_r).
El ejemplo 3 ilustra que ereturn display y test ahora usan la distribución t y F.

Ejemplo 3: distribuciones t o F después de myregress9


Hecho y sin hacer

Agregué una opción para el estimador robusto del VCE, agregué una opción para suprimir el término constante y guardé los grados de libertad residuales en e(df_r) con lo cual los comandos postestimación basados en Wald usarán las distribuciones t o F. Ilustré el análisis de opciones con los ejemplos, pero omití la teoría general y muchos detalles. Escriba . help syntax para más detalles sobre opciones de análisis de gramática usando el comando syntax.
En la siguiente publicación, implementaré la sintaxis moderna para errores estándar robustos y tipo clúster.


Referencias
Cameron, A. C., and P. K. Trivedi. 2005. Microeconometrics: Methods and applications. Cambridge: Cambridge University Press.
Stock, J. H., and M. W. Watson. 2010. Introduction to Econometrics. 3rd ed. Boston, MA: Addison Wesley New York.
Wooldridge, J. M. 2015. Introductory Econometrics: A Modern Approach. 6th ed. Cincinnati, Ohio: South-Western.



¡Gracias por leernos!




martes, 29 de octubre de 2019

Programando un comando de estimación en Stata: Permitir restricciones de muestra y variables factor

David M. Drukker, Director Ejecutivo de Econometría.


Modificaré el comando de mínimos cuadrados ordinarios (OLS) que se discutió en Programando un comando de estimación en Stata: Un mejor comando para MCO para permitir restricciones en la muestra, manejar valores perdidos, permitir variables factor, y para lidiar con la perfecta colinealidad de las variables.

Esta es la octava publicación de la serie programando un comando de estimación en Stata. Te recomiendo que empieces por el principio.

Restricciones en la muestra

El comando myregress4 descrito en programando un comando de estimación en Stata: Un mejor comando para MCO tiene la sintaxis

myregress4 depvar [indepvars]

Donde indepvars pueden ser variables con operadores de series de tiempo. myregress5 permite restricciones en la muestra y valores perdidos. Tiene la sintaxis

myregress5 depvar [indepvars] [if] [in]

Un usuario puede opcionalmente especificar una expresión if o un rango in para restringir la muestra. También hice que myregress5 manejara valores perdidos en las variables especificadas por el usuario.




El comando syntax en la línea 5 especifica que el usuario puede opcionalmente restringir la muestra al especificar una expresión if o un rango in. Cuando el usuario especifica una expresión if, syntax lo pone dentro de una macro local if; de otra manera, la macro local if estará vacía. Cuando el usuario especifica un rango in, syntax lo pone dentro de una macro local in; de otra manera, la macro local in estará vacía.

Podemos usar las macros locales if e in para manejar restricciones en la muestra especificadas por el usuario, pero estos no se encargan de los valores perdidos en las variables especificadas por los usuarios. 

El comando marksample en la línea 6 crea una macro local llamada touse, la cual contiene el nombre de una variable temporal que es una variable identificadora de la muestra. Cada observación en la variable identificadora de la muestra tiene el valor cero o uno. Es uno si la observación está incluida en la muestra. 
Es cero si la observación está excluida de la muestra. Una observación se puede excluir de la muestra por una expresión if del usuario, por un rango in especificado por el usuario, o porque hay un valor perdido en una de las variables especificadas.

Las líneas 20 a 23 usan la variable identificadora de muestra contenida en la macro local touse para hacer que se cumplan las restricciones en los cálculos MCO.

La línea 28 envía la variable identificadora de muestra dentro de e(sample), la cual es uno si la observación fue incluida en la muestra de estimación y es cero si la observación fue excluida de la muestra de estimación.

La línea 29 guarda el número de observaciones de la muestra en e(N).
El ejemplo 1 ilustra que myregress5 ejecuta la regresión solicitada en la muestra que respeta los valores faltantes en rep78 y a la expresión if



Ejemplo 1: myregress5 con valores faltantes y una expresión if



Permitiendo variables factor



El ejemplo 1 incluye el número de repartaciones como una variable continua, pero puede tratarse mejor como un factor discreto. myregress6 acepta factores. Las listas de variables factor generalmente implican listas de variables que contienen variables perfectamente colineales, por lo que myregress6 también maneja variables perfectamente colineales.



El fv en el parentesis despues de varlist en el comando syntax de la linea 5 modifica el varlist para aceptar variables factor. Cualquier variable factor especificada es guardada en la macro local varlist en una forma canonica.

Los comandos de estimación no permiten que la variable deoendiuente sea una variable factor. El comando _fv_check_deovar en la linea 9 saldrá con un error si la macro local depvar contiene una variable factor.


La línea 15 guarda el número de columnas en la matriz formada por matrix accum en la macro local p. La línea 19 guarda el número de columnas linealmente independientes en la macro local k. Este caculo utiliza diag0cnt() para tener en cuenta las variables perfectamente colineales que se descartaron. (Cada variable descartada pone un cero en la diagonal del inverso generalizado calculado por symin() y diag0cnt() devuelve el número de ceros en la diagonal.)

Sobre la línea 29, especifico la opción builddfvinfo en ereturn post para guardar información escondida que ereturn display, contrast, margins, y pwcompare usan para etiquetar tablas y para decidir cuáles funciones de los parámetros son estimables.

La línea 31 guarda el número de variables linealmente independientes en e(rank) para comandos postestimación.


Ahora, utilizo myregress6 para incluir rep78 como una variable que puede utilizar operadores factoriales. La categoría base es descartada porque se incluye un término constante.



Ejemplo 2: myregress6 con una variable factor




Hecho y sin hacer

Modifiqué el comando de mínimos cuadrados ordinarios (OLS) que se discutió en Programando un comando de estimación en Stata: Un mejor comando para MCO para permitir restricciones en la muestra, manejar valores faltantes, permitir variables factor, y para lidiar con la perfecta colinealidad de las variables. En la siguiente publicación, muestro cómo permitir opciones para errores estándar robustos y para suprimir el término constante.


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.

lunes, 26 de agosto de 2019


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


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!