Stata Básico Intermedio Aplicado a la Investigación Económica Juan Carlos Abanto Orihuela 5 de febrero de 2009 UdecomBooks 2 Stata Básico Intermedio Aplicado a la Investigación Económica www.iddeasac.com [email protected] Índice general Índice general 3 1. Introducción al Stata 1.1. Iniciando Stata . . . . . . . . . . . 1.2. Tipos de Archivos en Stata . . . . . 1.3. Estructura Básica de Stata . . . . . 1.4. Principales Comandos de Trabajo y 1.4.1. Las Bitácoras . . . . . . . . 1.4.2. La Base de Datos . . . . . . 1.4.3. Append, Merge, Collapse . . . . . . . . . . . . . . . . . Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 7 7 7 9 2. Manejo de Datos 2.1. Cargando los Datos en Stata . . . . 2.2. Etiquetas . . . . . . . . . . . . . . 2.3. Comando IF . . . . . . . . . . . . . 2.4. Comando SUMMARIZE . . . . . . 2.5. Comando SPLIT . . . . . . . . . . 2.6. Creando Variables . . . . . . . . . . 2.7. KEEP y DROP . . . . . . . . . . . 2.8. Reestructurando los Datos . . . . . 2.9. Muestreos Probabilı́sticos . . . . . . 2.10. Generación de Números Aleatorios 2.11. Percentiles, Cuartiles, Deciles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 15 17 18 18 19 22 24 26 26 27 . . . . . . . . 31 31 33 38 40 40 40 43 47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Análisis Grafico con Stata 3.1. Visualizando Algunos Comandos . . . . . . . . . 3.2. TWOWAY . . . . . . . . . . . . . . . . . . . . . . 3.3. TWOWAY y SCATTERPLOT . . . . . . . . . . 3.4. Combinando TWOWAY Y SCATTERPLOT . . . 3.4.1. Filtro de Gráficos . . . . . . . . . . . . . . 3.4.2. Unión de Gráficos . . . . . . . . . . . . . . 3.5. Opciones para Edición de Gráficos . . . . . . . . . 3.6. Trabajando con Esquemas y Gráficos Adicionales 3 UdecomBooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ÍNDICE GENERAL 3.6.1. 3.6.2. 3.6.3. 3.6.4. 3.6.5. Esquemas . . . . . . . . . . . . Gráficos de Barras Verticales . . Gráficos de Barras Horizontales Gráficos de Cajas . . . . . . . . Gráficos de Pastel . . . . . . . . 4. Análisis de Regresión Lineal 4.1. Regresión Lineal . . . . . . . 4.2. Diagnostico de los Resultados 4.2.1. Efecto Influencia . . . 4.3. Normalidad del Residuo . . . 4.4. Homocedasticidad del Residuo 4.5. Multicolinealidad . . . . . . . 4.6. Linealidad . . . . . . . . . . . 4.7. Especificación del modelo . . 4.8. Independencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Variables Categóricas 5.1. Estimación con Variables Categóricas 5.2. El Comando Xi . . . . . . . . . . . . 5.3. Pruebas de Hipótesis . . . . . . . . . 5.4. Creación de Variables Dummys . . . 5.5. Bucles y Programas . . . . . . . . . . Bibliografı́a Stata Básico Intermedio Aplicado a la Investigación Económica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 49 49 50 51 . . . . . . . . . 55 55 59 59 62 63 64 64 65 66 . . . . . 69 69 70 72 75 75 81 www.iddeasac.com [email protected] Sesión 1 Introducción al Stata 1.1. Iniciando Stata Stata es una poderosa herramienta en aplicaciones económicas. Puede ayudarnos a analizar fácil y eficientemente, series de tiempo, paneles, y data de sección cruzada. Nos dará las herramientas que necesitamos para organizar y manejar un gran tamaño de data, obteniendo resultados de análisis estadı́sticos. En esta sesión introduciremos las nociones básicas del software, para posteriormente realizar un análisis estadı́stico y familiarizarnos con el manejo y modificación de la base de datos. Veamos como se presenta Stata al iniciarse. (ver Figura 1.1) Figura 1.1: Pantalla de Inicio 5 UdecomBooks 6 1. Introducción al Stata Los comandos de stata están implementados en el menú el cual esta organizado por tópicos. Ası́ nosotros podemos trabajar interactivamente y de manera muy simple, sin embargo sigue siendo útil el uso de comandos para realizar el análisis dado que da pie al manejo de programas, o estructuras de programación. (ver Figura 1.2) Figura 1.2: Barra de Comandos 1.2.Tipos de Archivos en Stata En STATA, distinguimos 3 tipos de archivos importantes: Archivo de extensión dta, para la generación de base de datos, en ella se almacenara información de las variables con su respectiva extensión. Archivo de extensión log, smcl, para la generación de bitácoras, en ella se guardaran los resultados de manera ordenada, sin tener que pasarlos a ningún tipo de archivo de texto. Archivo de extensión do, que es un archivo de ejecución, donde se elabora el programa. Archivo de extensión gph, para la generación de gráficos almacenados en la carpeta de trabajo 1.3.Estructura Básica de Stata Siempre que trabajemos en STATA, es recomendable que mantengamos cierta estructura. (ver Figura 1.3) 1.4. Principales Comandos de Trabajo y Análisis 7 Figura 1.3: Estructura Básica 1.4.Principales Comandos de Trabajo y Análisis Ahora veamos los principales comandos de trabajo, los cuales harán que los futuros análisis econométricos sean simples de realizar. 1.4.1.Las Bitácoras En estos objetos se guardara la información tal y cual aparecen en la ventana Result, aunque también podrı́amos indicarle al programa que deseamos solo guardar los comandos y no los resultados. log using clase1.log o también cmdlog using clase1.log 1.4.2.La Base de Datos El uso de la base de datos es vital para nuestro análisis, a continuación presentamos los comandos que nos enseñara a trabajar con esta. use auto.dta UdecomBooks 8 1. Introducción al Stata use auto.dta if foreign==1 use auto.dta in 1/10 use make mpg using auto.dta save auto01.dta Repasemos lo que hemos aprendido: Ya sabemos como limpiar la memoria de Stata, también sabemos como ampliar esta memoria para trabajar con data de gran capacidad. Sabemos como fijar el path de trabajo, como crear una rutina y como cargar la base de datos a nuestro espacio de trabajo. Ahora vamos a trabajar con la base de datos para empezar nuestro análisis. use auto01.dta browse replace mpg=20 if mpg==19 save, replace list make list make price describe codebook summarize summarize summarize summarize summarize mpg weight mpg weight if foreign price if mpg<21.3 price if mpg>=21.3 price, detail tabulate mpg table table table table mpg rep78, contents(n mpg) rep78, contents(n mpg mean mpg sd mpg median mpg) rep78, c(n mpg mean mpg sd mpg median mpg) format(%9.2f) sort mpg gsort mpg gsort -mpg sort foreign by foreign: summarize price 1.4. Principales Comandos de Trabajo y Análisis 9 count count if foreign==0 count if foreign==1 by foreign: count generate orden=_n rename orden num_obs by foreign: egen prom_mill=mean(mpg) drop num_obs keep make price mpg prom_mill 1.4.3.Append, Merge, Collapse El comando append y merge nos ayudara a unir bases de datos integrándolas en una sola. Append, pegara hacia abajo o verticalmente y Merge, pegara hacia el costado o de forma horizontal. clear use base1, list use base2, list use base3, list use base4, list clear clear clear clear Vamos a empezar observando cada una de las bases de datos que tenemos, veamos la figura1.4 Empecemos nuestra tarea en Stata, podemos observar que Figura 1.4: Bases de Datos UdecomBooks 10 1. Introducción al Stata la base de datos Base1 tiene los mismos campos (columnas) que la base de datos Base2, pero diferentes filas, seria útil, unir ambas bases. Abramos entonces, la base de datos Base1 y peguemosla con la base de datos Base2, una unión vertical. use base1.dta, clear list append using base2 list save base12.dta, replace list Hagamos lo mismo con las bases de datos Base3 y Base4 y observemos los resultados: use base3.dta, clear list append using base4 list save base34.dta, replace list ¿Por qué la variable la variable sexo se añadió 2 veces como columna?¿por qué no se unió en una sola columna? use base3.dta, clear list rename Sexo sexo list save base03.dta, replace use base03.dta, clear list append using base4 list save base034.dta, replace Ahora si resulto bien la unión vertical. Veamos la base12 que tenı́amos antes. Ahora mi interés es fusionar ambas bases de datos, para ello, primero debemos ordenar ambas bases según la variable con la que vamos a fusionar (la variable común). use base034.dta, clear list sort nombre list 1.4. Principales Comandos de Trabajo y Análisis 11 save base034s.dta, replace use base12.dta, clear list sort nombre list save base12s.dta, replace Ya tenemos las 2 bases de datos ordenadas, ahora vamos a fusionarlas clear use base12s.dta, clear list merge nombre using base034s.dta list save basetotal.dta, replace La figura1.5 nos muestra la base de datos total. Figura 1.5: Base Total El comando collapse sirve para convertir una base de datos que contiene variables para diversas unidades de estudio, en una base de datos que contiene estadı́sticos de dichas variables (medias, medianas, sumas etc). Permite obtener estadı́sticos para unidades más grandes (en un sentido jerárquico), como por ejemplo, pasar de datos por individuo a datos por hogar, de datos por distritos a datos por provincia (agregación) En el comando se especifican aquellas variables que se ”colapsan” y las condiciones que se imponen para dicha transformación. Algunas variables pueden ser colapsadas según su suma, otras según su media, etc. (ver figura1.6) Aquellas variables que no se especifican desaparecen automáticamente de la base de datos. Este comando crea una nueva base de datos y cierra la base de partida. Si deseamos quedarnos con esta base debemos grabarla. UdecomBooks 12 1. Introducción al Stata Figura 1.6: Estructura del comando “split” use kids, clear list collapse age list use kids, clear collapse age, by(famid) list use kids, clear collapse(mean) avgage=age, by(famid) list use kids, clear collapse (mean) avgage=age avgwt=wt, by(famid) list use kids, clear collapse (mean) avgage=age avgwt=wt (count) numkids=birth, by(famid) list use kids, clear tabulate sex, generate(sexdum) 1.4. Principales Comandos de Trabajo y Análisis 13 list famid sex sexdum1 sexdum2 collapse (count) numkids=birth (sum) girls=sexdum1 boys=sexdum2, by(famid) list famid boys girls numkids Basado en los WDI, genere una base de datos con los totales de CO2 emitidos por región, para el año 2002. Genere también una base con la población mundial a lo largo del tiempo. UdecomBooks 14 1. Introducción al Stata RETO 1 . La base “enaho01-2004-300-oct-nov.dta” contiene datos del módulo 300 de la ENAHO recopilados entre octubre y noviembre de 2004, mientras que “enaho01-2004-300-dic.dta” contiene los datos del mismo módulo para diciembre de ese mismo año. Ambas bases están a nivel de individuos. Se pide juntar estos datos en un solo archivo que debe ser grabado con el nombre: “Personas.dta”. . A la base “Personas.dta” añada las siguientes variables: Las 5 variables de Necesidades Básicas Insatisfechas (nbi1 al nbi5) desde la base de datos “enaho01-2004-100.dta”. Recuerde que esta base fue recopilada a nivel de hogares en el mismo periodo. La variable sobre tipo de vivienda (p101). . Usando el archivo “enaho01-2004-300-oct-nov.dta” (módulo de educación a nivel de individuos) realice las siguiente tarea: Obtenga una nueva base (colapsada) que contenga para cada hogar: el promedio de edad de sus miembros (ver p208a), el porcentaje de hombres en el hogar (ver p207), el máximo nivel educativo aprobado por algún miembro del hogar (ver p301a). Sesión 2 Manejo de Datos 2.1. Cargando los Datos en Stata Ahora vamos a empezar el tratamiento de los datos pero antes, hagamos un pequeño ejercicio con la base de datos auto.dta use auto.dta describe summarize generate price2=2*price describe save auto2.dta generate price3=3*price save auto2.dta save auto2.dta, replace generate price4=4*price use auto.dta use auto.dta, clear clear 2.2. Etiquetas Aprendamos a etiquetar a nuestras bases de datos o variables para poder identificarlas en un futuro y ası́ poder trabajar de forma mas ordenada. use auto.dta describe label data "Este archivo contiene datos de autos para el a~ no 1978" describe label variable rep78 "Record de reparación en 1978" label variable price "Precio del carro en 1958" label variable mpg "Millas por galon para el carro" 15 UdecomBooks 16 2. Manejo de Datos label variable foreign "Origen del carro, extranjero o domestico" describe label define foreignl 0 "domestico" 1 "extranjero" label values foreign foreignl describe table foreign ttest mpg, by(foreign) save auto3.dta Hagamos un ejercicio similar con la base de datos iraninos.dta clear use iraninos.dta set more off label define sexow 0 "mujer" label define sexow 1 "hombre", add describe browse label values sexo sexow describe browse label drop sexow label label label label label define define define define values getareow 0 "prematuro" getareow 1 "rec.nac.", add getareow 2 "lactante", add getareow 3 "escolares", add getareo getareow label define oliguriaw 0 "no oliguria" label define oliguriaw 1 "oliguria", add label values oliguria oliguriaw label define congenitow 0 "no congenito" label define congenitow 1 "congenito", add label values congenito congenitow label define sepsisw 0 "no sepsis" label define sepsisw 1 "sepsis", add label values sepsis sepsisw label define tipodaow 0 "asfixia neonat" 2.3. Comando IF label label label label define define define values 17 tipodaow 1 "nta", add tipodaow 2 "nti", add tipodaow 3 "nefro tox", add tipodao tipodaow label define finalw 0 "vivo" label define finalw 1 "muerto", add label values final finalw Observemos que la variable dependiente en esta base de datos es final, muerte de una persona debido a una falla renal aguda. Las variables explicativas serian sepsis y tipodaño, mientras que las de control serian sexo, getareo. Probablemente oliguria y congenito sean variables que me indiquen el nivel especifico de la enfermedad (serian variables no tan claras en este ejemplo). 2.3.Comando IF La estructura del comando IF es fácil de recordar, la figura2.1 nos muestra el esquema base. Figura 2.1: Estructura del comando “if” clear use auto.dta keep make rep78 foreign mpg price tabulate rep78 foreign tabulate rep78 foreign if (rep78 >=4) tabulate rep78 foreign if (rep78 >=4), column nofreq list if (rep78 >= 4) list if (rep78 >= 4) summarize summarize summarize summarize summarize price price price price price if if if if if & !missing(rep78) (rep78 (rep78 (rep78 (rep78 (rep78 == <= == >= >= 1) | (rep78 == 2) 2) 3) | (rep78 == 4) | (rep78 == 5) 3) 3) & !missing(rep78) Cabe resaltar que luego de la sentencia “if” usamos “ & ” para decir “y”, usamos “ == ” para decir “igual a”, y usamos “ ! ” para negar algo o decir “no”. UdecomBooks 18 2. Manejo de Datos 2.4.Comando SUMMARIZE Esta estructura es mas compleja y más difı́cil de recordar, sin embargo la siguiente forma general (ver figura2.2), nos ayudara a recordarla y usarla de manera más apropiada. Figura 2.2: Estructura del comando “summarize” use auto summarize summarize summarize summarize summarize price mpg mpg price if (foreign == 1) mpg price if (foreign == 1) & (mpg <30) mpg price if (foreign == 1) & (mpg <30) , detail Si queremos trabajar con observaciones del 1 al 10 summarize in 1/10 También podrı́a estar interesado en el resumen estadı́stico para carros extranjeros y domésticos, por separado, para ello usamos el comando by: by foreign: summarize 2.5.Comando SPLIT El comando split separa el contenido de una variable tipo string en dos o más partes, usando un carácter que indica separación, de modo que se generan nuevas variables tipo string. (ver figura2.3) Es útil para separar palabras, códigos u otras partes de una variable tipo string de información múltiple. Por ejemplo, en el siguiente caso (ver figura2.4), queremos separar el tipo de documento del número, en dos variables. Aquı́, el objetivo es que la variable string “documento” se parta en dos variables string, una que contenga el tipo de documento y otra el número de este documento. 2.6. Creando Variables 19 Figura 2.3: Estructura del comando “split” Figura 2.4: Base Documentos use "split y destring", clear split documento, parse("-") destring use "split y destring", clear split documento, parse("-") destring documento2, replace Si deseáramos concatenar dos variables cualquiera sean estas, y generar una variable tipo string, el comando a usar deberá ser: egen docum=concat(documento1 documento2), punct("/") Donde la opción punct permite especificar el separador entre las distintas partes al conformar una única variable. Por ejemplo, espacio será punct(“ ”), o coma , punct(,) o guión , punct(-). 2.6.Creando Variables Trabajemos con la base de datos auto, y con la variable length (longitud del auto en pulgadas) use auto, clear summarize length generate length_feet = length / 12 UdecomBooks 20 2. Manejo de Datos generate length_feet = length / 12 replace length_feet = length / 12 summarize length lenght_feet generate length2 = length^2 summarize length2 generate loglen = log(length) summarize loglen summarize length generate zlength = (length - 187.93) / 22.27 summarize zlength Observemos la variable mpg (millaje por galón) tabulate mpg No nos es muy fácil el análisis de esta variable, podrı́amos mejorar su presentación si la clasificáramos por rangos. generate replace replace replace tabulate mpg3 = mpg3 = mpg3 = mpg3 = mpg mpg3 . 1 if (mpg <= 18) 2 if (mpg >= 19) & (mpg <=23) 3 if (mpg >= 24) & (mpg <.) Ahora podemos hacer un cruce de tablas entre la variable mpg3 y la variable foreign y observar el millaje de los carros domésticos y extranjeros. ¿Qué es lo que se observa? Mediante una remodificación de los datos, podemos hacer lo mismo en unas cuantas lı́neas, mediante el uso de rangos y el comando recode. generate mpg3a = mpg recode mpg3a min/18=1 19/23=2 24/max=3 tabulate mpg mpg3a Veamos un ejemplo con categorı́as, ahora deseamos crear una variable que nos muestre el millaje de los carros respecto a su origen, esta tomara el valor de “0” para valores por debajo de la media de mpg en el grupo domestico y extranjero y “1” para valores por encima de la media de mpg en los grupos domestico y extranjero. sort foreign by foreign: summarize mpg, detail ¿Qué observamos? 2.6. Creando Variables 21 generate mpgfd = mpg recode mpgfd min/18=0 19/max=1 if foreign==0 recode mpgfd min/24=0 25/max=1 if foreign==1 by foreign: tabulate mpg mpgfd El comando recode cambia los valores de una variable de acuerdo a las reglas especificadas. recode opiniongob (1=4 nada) (2=3 poco) (3=2 "mas o menos") /// (4=1 bastante) (.=0 "no opina"), gen(opina) También podemos usar una extensión del commando generate, egen me permitirá crear expresiones mas complejas aun, tales como medias, desviaciones estándar, máximos, mı́nimos, etc. egen minimo_p=min(price) egen median_p=median(price) egen std_p=std(price), mean(0) std(1) Nota1: Tipo de Datos En Stata existen dos clases de datos a usar: . Datos numéricos, dentro de estos podemos encontrar la siguiente clasificación: Figura 2.5: Datos Tipo Numéricos . Datos cadena de texto, dentro de estos podemos encontrar la siguiente clasificación: Figura 2.6: Datos Tipo Cadena UdecomBooks 22 2. Manejo de Datos Lógicamente debemos considerar que un uso de datos con mayor poder de almacenaje se traducirá en mayor tamaño de bytes usados, lo cual restara espacio a nuestro disco de almacenaje. Generemos algunas variables como ejemplo: generate double x=2 generate str2 y="maria" list y ¿Qué notamos?, ¿Cómo saber rápidamente si una variable es de cierto tipo? Si deseáramos convertir una variable string a una variable numérica o una variable numérica a una string, podrı́amos usar los comandos encode y decode, veamos esto: clear use auto.dta encode make, generate(A) label list A describe make A decode A, generate(B) describe make A B O también podrı́amos usar la siguiente sentencia: generate str2 generate int describe Z P Z="am" P=real(Z) 2.7.KEEP y DROP A veces no desearemos tener todas las variables en el espacio de trabajo, muchas veces desearemos trabajar solo con algunas variables de nuestra base de datos. use auto describe keep make mpg price describe use auto, clear drop displacement gear_ratio describe 2.7. KEEP y DROP 23 use auto , clear tabulate rep78 , missing drop if missing(rep78) tabulate rep78 , missing use auto , clear keep if (rep78 <= 3) tabulate rep78, missing clear Ya hemos visto como el uso de keep, drop, keep if y drop if, puede sernos útil si queremos eliminar variables innecesarias y ası́ tener mas memoria de trabajo. Ahora veamos en la figura2.7 la estructura del comando use y los criterios de selección. Figura 2.7: Estructura del comando “use” use make price mpg using auto.dta describe clear use auto.dta if (rep78 <= 3) tabulate rep78, missing clear use auto.dta if (rep78 >= 4) & (rep78 <.) tabulate rep78, missing clear use make mpg price rep78 if (rep78 <= 3) using auto.dta describe tabulate rep78 UdecomBooks 24 2. Manejo de Datos clear use make mpg price rep78 using auto.dta if (rep78 <= 3) describe tabulate rep78 clear use make mpg if (rep78 <= 3) using auto ¿Qué sucedió con esta sentencia? 2.8.Reestructurando los Datos A veces nos será útil reestructurar la forma como los datos son presentados, especialmente para trabajar con datos panel, para ello nos será de utilidad aprender los comandos con anticipación. clear use ingfam.dta list Figura 2.8: Base “ingfam” La forma como se presenta la data, es la forma ancha o “wide”, a nosotros nos podrı́a interesar, sin embargo, trabajar con la forma larga o “long” de la data, para ello debemos modificar la estructura de esta base de datos de la siguiente manera: reshape long ingfam, i(codfam) j(a~ no) list “Long” le dice al comando reshape, si se desea ir de una forma long a una wide o viceversa, “ingfam” le dice a Stata que la raı́z de la variable a ser convertida a la forma long es ingfam, “i” le dice a stata que la variable codfam será considerada como identificador de los individuos, “j” indica a Stata que la parte variable de ingfam será considerada e incorporada como una variable año. 2.8. Reestructurando los Datos 25 reshape wide list reshape long list Veamos una base de datos que nos brinda información sobre los las alturas de un conjunto de niños de 1 y 2 años de edad use ni~ noaltpes, clear list codfam nacimiento alt1 alt2 Figura 2.9: Base “niñoaltpes” Veamos como podemos transformar esta base de datos a una forma “long”. ¿Cuál es la raı́z de la variable que será convertida de la forma wide a la forma long? ¿Qué variables identifican a los individuos en la estructura wide? ¿Cómo llamaremos a la variable que contendrá a los sufijos de la variable raı́z? reshape long alt, i( codfam nacimiento) j(edad) list codfam nacimiento edad alt use ni~ noaltpes,clear list codfam nacimiento alt1 alt2 pes1 pes2 reshape long alt pes, i( codfam nacimiento) j(edad) list codfam nacimiento edad alt pes use ingpadmad.dta, clear list A nosotros nos podrı́a interesar que la variable “nombre” y la variable “ing” se estructuren de una forma long, pero los sufijos “p” y “m” son del tipo cadena o string, ya no son números. ¿Cómo podemos estructurar nuestro comando en este caso? reshape long nombre ing, i(codfam) j(padmad) string list UdecomBooks 26 2. Manejo de Datos Figura 2.10: Base “ingpadmad” 2.9.Muestreos Probabilı́sticos En las encuestas, las observaciones son escogidas a partir de un proceso aleatorio. Ası́, las probabilidades de selección para distintas observaciones pueden diferir en función a la forma como se lleve a cabo dicho proceso de selección aleatorio. Las ponderaciones de muestreo son iguales (o proporcionales) al inverso de la probabilidad de selección. En otras palabras, los ponderadores (o factores de expansión) pueden ser interpretados como el número de elementos de la población que el elemento muestreado representa. En consecuencia, no tener en cuenta los ponderadores de la muestra en los procedimientos estadı́sticos genera estimaciones sesgadas al valor verdadero de la población. Ası́ mismo, su omisión altera las desviaciones estándar de nuestras estimaciones. Los factores de expansión nos permiten pasar de la muestra al conjunto de la población. Ellos son necesarios también para tener en cuenta las diferentes tasas de muestreo según dominios geográficos, etc. La mayorı́a de comandos de stata pueden ponderar datos. Stata proporciona cuatro tipos de ponderaciones, la que más se emplea es la asociada a los factores de expansión, que se indica con la opción pweight que permite identificar los pesos que indican la inversa de la probabilidad de que la observación sea incluida debido al diseño del muestreo. table x1 x2 [pweight=pesopob] table x1 x2 [pw=pesopob] 2.10.Generación de Números Aleatorios Crearemos un archivo vacı́o para 100 observaciones: set obs 100 Generamos números aleatorios con distribución uniformes U(0,1) gen x = uniform() Luego generamos números aleatorios con distribución normal N(0,1) 2.11. Percentiles, Cuartiles, Deciles 27 gen y = invnorm(uniform()) Para generar una variable con distribución uniforme U(a,b) generate y = a + (b-a) * uniform() Para generar una variable con distribución normal N(u,ô) generate z = u + o ^ * invnorm(uniform()) Generemos una variable notas, igual a U(0,20) + N(0,1) gen notas = 20*uniform() + invnorm(uniform()) Trunquemosla en el rango de 0 a 20 replace notas = clip(notas, 0, 20) format notas %3.1f Generemos una variable sexo que sea 1 si es hombre y 0 si es mujer gen sexo = uniform() > 0.5 Generemos una variable ingreso que valla del 2000 al 2007 gen ingreso = 2000 + floor(8*uniform()) 2.11.Percentiles, Cuartiles, Deciles Las medidas de posición son muy importantes en el análisis estadı́stico, probabilı́stica y regresional. Los cuartiles son medidas estadı́sticas de posición que tienen la propiedad de dividir la serie estadı́stica en cuatro grupos de números iguales de términos. De manera similar los deciles dividen a la serie en diez partes iguales y los percentiles dividen a los términos de la serie en cien grupos iguales. Ası́ como la mediana divide la serie o distribución en dos partes iguales, existen tres cuartiles, nueve deciles y noventa y nueve percentiles que dividen en cuatro, diez y cien partes iguales a la distribución. De estas tres últimas medidas de posición los cuartiles son las de mayor aplicación. Se emplean generalmente en la determinación de estratos o grupos correspondientes a fenómenos socio-económicos, monetarios o teóricos. XTILE El comando xtile genera una variable categórica (eg: 1, 2, 3) según el cuantil en que se encuentra cada observación. UdecomBooks 28 2. Manejo de Datos xtile nuevavar = variable , nquantiles(#) xtile tercio = notas, n(3) PCTILE El comando pctile genera una variable con los puntos de corte entre cada cuantil. pctile nuevavar = variable , nquantiles(#) pctile cortes = notas, n(3) Por ejemplo, generemos una variable décimo que sea 1 si es décimo superior, y 0 caso contrario. Hágalo de 2 formas distintas xtile es_decimo = notas, n(10) replace es_decimo= (es_decimo==10) summarize notas, detail gen es_decimo = notas > r(p90) pctile corte_dec = notas, n(10) gen es_decimo = notas > corte_dec[9] Muestre en las notas, el promedio, el máximo, el mı́nimo, por sexo. Muestre la probabilidad de ser décimo superior, por año de ingreso tab es_decimo tercio tabstat notas, by(es_decimo) tabstat notas, by(sexo) stat(mean max min) tabstat es_decimo, by(ingreso) format(%3.2f) 2.11. Percentiles, Cuartiles, Deciles 29 RETO 2 El sostenido crecimiento de la economı́a peruana en los últimos años ha provocado que en la actualidad observemos un boom de inversiones a nivel descentralizado. Ası́, diversas actividades económicas que antes se desarrollaban solo en Lima han empezado a mirar el interior del paı́s como plazas alternativas para expandir sus negocios. Con este fin, la recientemente fundada empresa de consultorı́a Grupo IDDEA S.A.C. le ha pedido su colaboración para desarrollar las siguientes tareas en Stata. . En el módulo “sumarias” (que contiene variables calculadas de ingreso y gasto) se le pide identificar cada hogar con el nombre de la localidad que representa según la variable “ubigeo” (distrito). Además, en este módulo deberá crear una nueva variable que indique el departamento al que pertenece cada hogar (esta variable debe tener un value map con los nombres de los 24 departamentos y el Callao). Para esta tarea usted cuenta con la base de datos ubigeo.dta. . Con una sola instrucción (un solo comando) muestre las siguientes estadı́sticas descriptivas para el gasto per capita en todos los departamentos del paı́s (percentil 99, media, desviación estándar, rango). . El INEI calcula las estadı́sticas de pobreza bajo el método del gasto, para lo cual utilizará la variable “gasto total” y la dividirá entre el total de personas en el hogar para calcular el gasto per capita. Luego generará una variable que valga uno en caso el hogar supere la lı́nea de pobreza per capita (linea06) y cero en caso contrario. Finalmente, se le pide estimar para cada departamento cual es el nivel de pobreza considerando que un individuo es pobre si pertenece a un hogar pobre. . Con el módulo de educación construya una tabla que muestre para cada dominio geográfico el porcentaje de personas según nivel educativo alcanzado, para lo cual considerará solo tres niveles: 1, al menos primaria incompleta, 2, Al menos secundaria completa y 3, superior. . Al módulo educación añada la variable gasto per cápita, calculado en la base sumaria como el cociente entre gasto total y total de miembros del hogar. Luego, cree una variable que contenga los cuartiles (1,2,3,4) del gasto per capita y construya una tabla cruzada entre el nivel educativo y la nueva variable que ha creado para todas aquellas personas que no residen en Lima Metropolitana. UdecomBooks 30 2. Manejo de Datos Sesión 3 Análisis Grafico con Stata Ahora vamos a trabajar con los principales gráficos en Stata. Muchos de estos gráficos son de bastante utilidad para observar los problemas inherentes al análisis de regresión que observaremos en la próxima sección. 3.1. Visualizando Algunos Comandos clear use auto.dta histogram mpg Figura 3.1: Histograma graph box mpg graph box mpg, by(foreign) 31 UdecomBooks 32 3. Análisis Grafico con Stata Figura 3.2: Grafico de Cajas Figura 3.3: Scatter y Ajuste Lineal Figura 3.4: Grafico Matricial 3.2. TWOWAY 33 3.2.TWOWAY El S&P 500 es el ı́ndice más seguido para tener una idea del desempeño general de las acciones estadounidenses. Este ı́ndice consiste de las acciones de 500 empresas que fueron seleccionadas por su tamaño, liquidez (qué tan fácil es comprar o vender sus tı́tulos) y representatividad por actividad económica, incluyendo 400 industriales, 20 del sector transporte, 40 de servicios y 40 financieras. Sólo se toman en cuenta empresas estadounidenses. Vale la pena destacar que el peso de cada acción dentro del ı́ndice corresponde a la proporción que representa el valor de mercado de la empresa dentro del total de las 500 empresas que conforman el ı́ndice. El valor de mercado del capital es igual al precio por acción multiplicado por el número total de acciones. Usemos la base de datos S&P 500.(ver figura3.5 clear use s&p.dta describe Figura 3.5: Índice S&P UdecomBooks 34 3. Análisis Grafico con Stata Figura 3.6: Opciones del “twoway” Figura 3.7: Opciones del “twoway” Figura 3.8: Opciones del “twoway” 3.2. TWOWAY 35 Figura 3.9: Opciones del “twoway” UdecomBooks 36 3. Análisis Grafico con Stata Usemos una nueva base de datos: clear use highschool.dta describe Figura 3.10: Base Highschool graph graph graph graph twoway twoway twoway twoway histogram read kdensity read (histogram read) (kdensity read) function y=normden(x), range(-4 4) Figura 3.11: Histograma y Kernel 3.2. TWOWAY 37 Figura 3.12: Más opciones del “twoway” UdecomBooks 38 3. Análisis Grafico con Stata 3.3.TWOWAY y SCATTERPLOT twoway scatter read write , scheme(economist) twoway scatter write read, msymbol(square) msize(small) mcolor(black) twoway scatter write read, mfcolor(red) mlcolor(black) mlwidth(medthick) twoway scatter read write if id <=10, mlabel(id) mlabposition(2) /// mlabsize(large) mlabcolor(green) twoway scatter read write if id <=10,mlabel(ses) mlabangle(90) /// mlabposition(2) mlabgap(3) egen mread = mean(read), by(write) label variable mread "Nota prom lectura x grupo de escritura" twoway scatter mread write, connect(l) sort twoway scatter mread write, connect(l) twoway scatter mread write, connect(l) clwidth(thick) clcolor(red) /// clpattern(shortdash) sort egen sdread = sd(read), by(write) label variable sdread "SD prom nota de lectura x grupo de escritura" twoway scatter sdread write, connect(l) sort cmissing(n) twoway scatter sdread write, connect(l) sort cmissing(y) 3.3. TWOWAY y SCATTERPLOT Figura 3.13: Connect Figura 3.14: Connect sort cmissing UdecomBooks 39 40 3. Análisis Grafico con Stata 3.4.Combinando TWOWAY Y SCATTERPLOT 3.4.1.Filtro de Gráficos twoway scatter read write, by(female) twoway scatter read write, by(female ses) twoway scatter read write, by(ses female, cols(2)) Figura 3.15: Opción “by” 3.4.2.Unión de Gráficos twoway (scatter read write) (lfit read write) , ytitle(Nota /// de lectura) 3.4. Combinando TWOWAY Y SCATTERPLOT 41 Figura 3.16: Opción “ytitle” de un grafico twoway (scatter read write) (lfit read write), name(scatter) twoway (scatter read write, mlabel(id)) (lfit read write, /// range(30 70)), by(ses female) ytitle(Nota de lectura) Figura 3.17: Nombre a un grafico twoway (scatter read write) (scatter math write) twoway (scatter read write) (scatter math write) (lfit read /// write) (lfit math write) UdecomBooks 42 3. Análisis Grafico con Stata twoway (scatter read write) (scatter math write) (lfit read /// write) (lfit math write), legend(label(3 "Ajuste Lineal") /// label(4 "Ajuste Lineal")) legend(order(1 3 2 4)) twoway (scatter read write) (scatter math write) (lfit read /// write, pstyle(p1) range(25 80) ) (lfit math write, /// pstyle(p2) range(25 80) ), legend(label(3 "Ajuste Lineal") /// label(4 "Ajuste Lineal")) legend(order(1 3 2 4)) Figura 3.18: Editando la legenda de un grafico separate write, by(female) graph twoway (scatter write0 read) (scatter write1 read), /// ytitle(Nota de Escritura) legend(order(1 "Hombres" 2 "Mujeres")) graph twoway (scatter write0 read) (scatter write1 read) /// (lfit write0 read) (lfit write1 read), ytitle(Nota de /// Escritura) legend(order(1 "Hombres" 2 "Mujeres" 3 "Aj. /// Lineal Hombres" 4 " Aj. Lineal Mujeres")) 3.5. Opciones para Edición de Gráficos 43 Figura 3.19: Ordenando la legenda de un grafico 3.5.Opciones para Edición de Gráficos El esquema siguiente nos ayudara a entender los principales comandos de edición de gráficos. Podemos guiarnos de estos para poder tener una mejor presentación en nuestros gráficos. graph twoway scatter read write, title("Grafica de Dispersión /// entre Lectura y Escritura") Figura 3.20: Antes de la edición UdecomBooks 44 3. Análisis Grafico con Stata graph twoway scatter read write, /// ytitle(Nota del Examen de Escritura) /// xtitle(Nota del Examen de Lectura) graph twoway scatter read write, /// title("Grafica de Dispersión entre Lectura y Escritura ", /// size(large) color(red) position(12) ring(1)) /// ytitle(Nota del Examen de Escritura) /// xtitle(Nota del Examen de Lectura) graph twoway scatter read write, /// title("Grafica de Dispersión entre Lectura y Escritura ", /// size(large) color(red) position(12) ring(1) box bcolor(white) /// blcolor(red) bmargin(medium)) /// ytitle(Nota del Examen de Escritura) /// xtitle(Nota del Examen de Lectura) graph twoway scatter read write, /// title("Grafica de Dispersión entre Lectura y Escritura " /// "Muestra de 200 Estudiantes", linegap(3) size(large) color(red) /// position(12) ring(1) box bcolor(white) blcolor(red) /// bmargin(medium)) /// ytitle(Nota del Examen de Escritura) /// xtitle(Nota del Examen de Lectura) graph twoway scatter read write, /// title("Grafica de Dispersión entre Lectura y Escritura ", /// size(large) color(red) position(12) ring(9) box bcolor(white) /// blcolor(red) bmargin(medium)) /// ytitle(Nota del Examen de Escritura) /// xtitle(Nota del Examen de Lectura) /// subtitle("Muestra de 200 Estudiantes") /// note(Datos de Escuela Secundaria y Superior) /// caption(Grupo IDDEA.SAC) graph twoway scatter read write, /// title("Grafica de Dispersión entre Lectura y Escritura ", /// size(large) color(red) position(12) ring(9) box bcolor(white) /// blcolor(red) bmargin(medium)) /// ytitle(Nota del Examen de Escritura) /// xtitle(Nota del Examen de Lectura) /// subtitle("Muestra de 200 Estudiantes") /// note(Datos de Escuela Secundaria y Superior, size(medium) /// 3.5. Opciones para Edición de Gráficos 45 position(5)) caption(Grupo IDDEA.SAC, size(vsmall) position(5)) graph twoway scatter read write, /// title("Grafica de Dispersión entre Lectura y Escritura ", /// size(large) color(red) position(12) ring(9) box bcolor(white) /// blcolor(red) bmargin(medium)) /// ytitle(Nota del Examen de Escritura, color(white)) /// xtitle(Nota del Examen de Lectura, color(white)) /// subtitle("Muestra de 200 Estudiantes", color(white)) /// note(Datos de Escuela Secundaria y Superior, color(white) /// size(medium) position(5)) /// caption(Grupo IDDEA.SAC,color(green) size(small) position(5)) /// graphregion( color(navy) ) /// plotregion( fcolor(teal) ) Figura 3.21: Después de la edición UdecomBooks 46 3. Análisis Grafico con Stata use encuesta.dta graph hbar commute, over(division) graph hbar commute, over(division) asyvar graph bar propval100, over(nsw) over(division) nofill asyvars /// ylabel(0(10)80) twoway scatter ownhome propval100, xlabel(#10) ylabel(#5) twoway scatter ownhome propval100, xscale(alt) twoway scatter propval100 rent700 ownhome, ylabel(0(10)100) /// yscale(alt) twoway (scatter propval100 ownhome) (scatter rent700 ownhome, /// yaxis(2)) twoway scatter ownhome propval100 [aweight=rent700], msize(small) /// scheme(vg_outm) yscale(alt) xscale(alt) Figura 3.22: Grafico de burbujas use s&p.dta 3.6. Trabajando con Esquemas y Gráficos Adicionales tw (rarea high low date) (spike volmil date) tw (rarea high low date) (spike volmil date, yaxis(2)) tw (rarea high low date) (spike yscale(range(500 1400) axis(1)) volmil date, yaxis(2)), /// tw (rarea high low date) (spike volmil date, yaxis(2)), /// yscale(range(500 1400) axis(1)) yscale(range(0 5) axis(2)) tw (rarea high low date) (spike volmil date, yaxis(2)), /// yscale(range(500 1400) axis(1)) yscale(range(0 5) axis(2)) /// scheme(vg_teal) Figura 3.23: Diferentes escalas 3.6.Trabajando con Esquemas y Gráficos Adicionales 3.6.1.Esquemas use encuesta.dta scatter propval100 rent700 ownhome, scheme(vg_blue) UdecomBooks 47 48 3. Análisis Grafico con Stata Figura 3.24: Scatter y esquema vg blue 3.6. Trabajando con Esquemas y Gráficos Adicionales 49 3.6.2.Gráficos de Barras Verticales use nlsw.dta graph bar ttl_exp graph bar prev_exp tenure ttl_exp graph bar (median) prev_exp tenure ttl_exp graph bar (median) prev_exp tenure (mean )ttl_exp graph bar (mean) meanwage=wage (median ) medwage=wage graph bar prev_exp tenure, over(occ5) graph bar prev_exp tenure, over(occ5) percentages graph bar prev_exp tenure, over(occ5) percentages stack use highshool.dta graph bar write, over( race) over( female) over( ses) /// legend(rows(1) stack) blabel(bar, format(%4.1f) size(vsmall)) /// bargap(10) percent scheme(vg_blue) Figura 3.25: Bar y esquema vg green 3.6.3.Gráficos de Barras Horizontales use nlsw.dta graph hbar wage, over(occ5) graph hbar wage, over(occ5) over(collgrad) graph hbar wage,over(urban2) over(occ5) over(collgrad) UdecomBooks 50 3. Análisis Grafico con Stata graph hbar wage,over(urban3) over(union) missing graph hbar wage,over(grade4) over(union) graph hbar wage,over(grade4, gap(*.3)) over(union) graph hbar wage,over(grade4, gap(*3)) over(union) graph hbar wage,over(occ7) graph hbar wage,over(occ7, sort(1)) graph hbar wage,over(occ7, sort(1) descending) graph hbar wage hours,over(occ7) graph hbar wage hours,over(occ7, sort(1)) graph hbar wage hours,over(occ7, sort(2)) graph hbar wage hours,over(occ7, sort(2)) over(married) graph hbar wage hours,over(occ7, sort(2)) over(married, /// descending) asyvars graph hbar wage hours,over(occ7, sort(2)) over(married, /// descending) asyvars stack graph hbar wage,over(occ7, label(alternate)) over(collgrad) Figura 3.26: Hbar y esquema vg rose 3.6.4.Gráficos de Cajas use nlsw.dta graph box wage, graph box wage, graph box wage, graph box wage, over(grade4) over(grade4) nooutsides over(grade4) nooutsides over(union) over(grade4) nooutsides over(union) /// 3.6. Trabajando con Esquemas y Gráficos Adicionales asyvars graph box wage, over(grade4) nooutsides over(union) /// asyvars over(urban2) graph hbox tenure, nooutsides over(occ7) graph hbox tenure, nooutsides over(occ7, sort(1)) graph hbox prev_exp tenure, nooutsides over(occ7, /// sort(1)) graph hbox prev_exp tenure, nooutsides over(occ7, /// sort(1)) over(collgrade) graph hbox prev_exp tenure, nooutsides over(occ7, /// sort(1)) over(collgrad) graph hbox ttl_exp tenure, nooutsides over(urban2) /// over(married) by(union) graph hbox ttl_exp tenure, nooutsides over(urban2) /// over(married) by(union, total) graph hbox ttl_exp tenure, nooutsides over(urban2) /// over(married) by(union, total row(1)) graph hbox ttl_exp tenure, nooutsides over(urban2) /// over(married) by(union, total cols(1)) Figura 3.27: Hbox y esquema vg teal 3.6.5.Gráficos de Pastel use nlsw.dta graph pie, over(occ7) UdecomBooks 51 52 3. Análisis Grafico con Stata graph pie, over(union) graph pie, over(union) missing graph pie, over(occ7) graph pie, over(occ7) noclockwise graph pie, over(occ7) noclockwise sort graph pie, over(occ7) sort pie(3, explode) graph pie, over(occ7) sort pie(3, explode color(cyan)) /// pie(7, explode(5) color(gold)) graph pie, over(occ7) graph pie, over(occ7) plabel(_all sum) graph pie, over(occ7) plabel(_all sum) scheme(economist) graph pie, over(occ7) plabel(_all percent) scheme(economist) graph pie, over(occ7) plabel(_all name) scheme(economist) graph pie, over(occ7) plabel(_all name, gap(-5)) /// plabel(_all percent, gap(5) format("%2.0f")) scheme(economist) graph pie, over(occ7) plabel(_all name, gap(-5)) /// plabel(_all percent, gap(5) format("%2.0f")) /// legend(title(Ocupación) position(9) cols(1) stack) /// scheme(economist) Figura 3.28: Pie y esquema economist 3.6. Trabajando con Esquemas y Gráficos Adicionales 53 RETO 3 CLASIFICACIÓN DE RIESGOS La base de datos “deudores”, tiene información acerca de la edad, sexo, distrito, ingresos, deuda, y calificación de la deuda, para 19,000 deudores. . ¿Cuál es la edad promedio de la muestra? Analice la distribución de la edad, con un histograma. . ¿Qué AFP tiene más clientes? Realice una grafica sustentando su respuesta. . Genere una dummy mal pagador, que sea 1 si el deudor está atrasado con sus deudas . ¿Que % de hombres y mujeres son mal pagadores? ¿Quienes ganan más, en promedio? . ¿A qué edad las personas se atrasan menos? Realice una grafica sustentando su respuesta. . Genere una nueva base de datos a nivel de distrito, con el número de personas, el salario promedio, y el % de deudores atrasados. . Guarde solo los distritos con al menos 100 personas. . ¿Qué distritos son los más ricos? ¿En cuáles la gente es peor pagadora? Realice una grafica sustentando sus resultados. UdecomBooks 54 3. Análisis Grafico con Stata Sesión 4 Análisis de Regresión Lineal 4.1. Regresión Lineal Ahora vamos a trabajar con las herramientas que hemos aprendido y vamos a generar relaciones econométricas. Empecemos con evaluar una regresión MCO. use elemapi.dta regress api00 acs_k3 meals full Nuestras expectativas son que un mejor rendimiento académico, este relacionado con un tamaño de clase pequeño, pocos estudiantes recibiendo comida 55 UdecomBooks 56 4. Análisis de Regresión Lineal gratuita, y un alto porcentaje de profesores que tengan sus credenciales de enseñanza completa. regress api00 acs_k3 meals full Ahora debemos observar los coeficientes de los resultados de nuestra regresión, y su significancia. Estos coeficientes deben ser coherentes con nuestras expectativas. ¿Qué es lo que observamos? Antes de decir que esta regresión es correcta debemos hacer un conjunto de pruebas. describe list in 1/5 list api00 acs_k3 meals full in 1/10 codebook api00 acs_k3 meals full yr_rnd summarize api00 acs_k3 meals full summarize acs_k3, detail tabulate acs_k3 list snum dnum acs_k3 if acs_k3 < 0 list dnum snum api00 acs_k3 meals full if dnum == 140 histogram acs_k3 graph box acs_k3 stem acs_k3 stem full tabulate full tabulate dnum if full <= 1 count if dnum==401 Hemos encontrado 3 problemas en la data, valores perdidos, valores negativos insertados de manera incorrecta y proporciones introducidos como porcentajes. 4.1. Regresión Lineal 57 regress api00 acs_k3 meals full Luego de corregir la data podemos volver a estimar la regression y observar: use elemapi2.dta regress api00 acs_k3 meals full Digamos que estamos interesados en saber cual es la relación entre el numero de estudiantes y el rendimiento académico. regress api00 enroll Primero debemos fijarnos en el test F, y ver si es significativo, lo cual nos mostrara la significancia del modelo. El R2 nos dirá que tanto de la varianza de nuestra variable endógena, es explicado por los regresores. Luego debemos observar la significancia de los parámetros, ver si sus signos son acorde con la teorı́a. La constante es el valor predecido para cuando nuestra explicativa sea cero. Podemos observar también que Stata nos presenta la descomposición de la varianza. La varianza total esta particionada en la varianza explicada por las variables independientes (model) y la varianza que no es explicada por dichas variables(residual). Sabemos que existe una suma de cuadrados asociada a las tres partes de la varianza. Conceptualmente estas son: X SST = (y − ȳ)2 X SSR = (y − ŷ)2 X SSM = (ŷ − ȳ)2 Ası́ pues se puede comprobar que SST=SSM+SSR, además debemos recordar también que R2=SSM/SST. También podemos observar los grados de libertad, asociados con cada parte de las varianzas. La varianza total tiene N-1 gl, los gl del modelo son K-1, los gl del residuo simplemente es la diferencia entre el total menos el modelo. Observamos también las medias cuadráticas, es decir la división de la suma de cuadrados entre sus gl. Con estas nosotros podemos calcular el valor del test F=MSM/MSR, lo cual nos da el ajuste del modelo. El Root MSE es la desviación estandar del error (raı́z cuadrada de MSR). Obtengamos los valores predichos o estimados para el rendimiento académico con nuestro modelo y guardemos dichos valores en la variable fv predict fv Veamos los valores estimados y los reales: UdecomBooks 58 4. Análisis de Regresión Lineal list api00 fv in 1/10 scatter api00 enroll twoway (scatter api00 enroll) (lfit api00 enroll) Veamos los outliers twoway (scatter api00 enroll, mlabel(snum)) (lfit api00 enroll) Ahora obtengamos el residuo de la regresión predict e, residual Ups, problemas en los coeficientes y sus significado, entonces ¿Qué hacer? regress api00 ell meals yr_rnd mobility acs_k3 acs_46 full /// emer enroll, beta De esta manera podemos comparar un coeficiente con otro, dado que todos tienen la misma medida ahora. Un nuevo comando, busquemos en la red. findit listcoef listcoef Observación SD=desviación estándar observada, desviación estándar de la variable Y SD del Error= desviación estándar del error: MSE (error estándar de la predicción) bstdx=coeficientes de la regresión con las variables x(estandarizadas) y la variable Y(en su unidad original) bstdy=coeficientes de la regresión con las variables x(en su unidad original) y la variable Y(estandarizada) bstdxy=coeficientes de la regresión con las variables x(estandarizadas) y la variable Y(estandarizada) Veamos una prueba de hipótesis test ell==0 test ell Veamos una prueba de hipótesis conjunta test acs_k3 acs_46 Veamos la correlación entre las variables correlate api00 ell meals yr_rnd mobility acs_k3 acs_46 full /// emer enroll 4.2. Diagnostico de los Resultados 59 Veamos otra opción para correlacionar variables pwcorr api00 ell meals yr_rnd mobility acs_k3 acs_46 full /// emer enroll, obs sig La normalidad Solo el residuo necesita tener una distribución normal, no las variables para que se validen los test. Los coeficientes estimados no requieren una normalidad de residuos. Seria bueno sin embargo poseer variables que posean una distribución normal. histogram enroll histogram enroll, normal bin(20) histogram enroll, normal bin(20) xlabel(0(100)1600) kdensity enroll, normal graph box enroll symplot enroll qnorm enroll pnorm enroll Veamos todas las posibilidades ladder enroll gladder enroll Ajustemos a nuestra mejor eleccion generate lenroll = log(enroll) hist lenroll, normal 4.2.Diagnostico de los Resultados 4.2.1.Efecto Influencia Ahora vamos a centrarnos en el diagnostico de nuestros resultados. Vemos los problemas que podrı́an presentarse. Para ello debemos considerar los efectos de outliers (una observación con un amplio residuo, que indica una muestra peculiar o un error en la data), leverage (medida de cuan lejos una variable independiente esta desviada de su media, puede afectar los coeficientes de la regresión) y el efecto influencia (observación que al removerla, cambia la estimación de los coeficientes radicalmente. dicho problema se le atribuye a un leverage o a un outlier) Usemos para esto, la base de datos diseñada por Alan Agresti y Barbara Finlay (Prentice Hall, 1997). UdecomBooks 60 4. Análisis de Regresión Lineal use crimen.dta describe sum crimenes asesinatos pcturb pctblanco pctnivedu pobreza soltero graph matrix crimenes pcturb pobreza soltero Figura 4.1: Crimenes, pcturb, pobreza y soltero Observamos algunas irregularidades. Vemos en muchos gráficos puntos que están apartados del resto ¿de que estados serán? scatter scatter scatter crimenes pcturb, mlabel(estado) crimenes pobreza, mlabel(estado) crı́menes soltero, mlabel(estado) ¿Qué observamos? regress crimenes pcturb pobreza soltero predict r, rstudent stem r sort r list estadoid estado r in 1/10 list estadoid estado r in -10/l findit hilo hilo r estado 4.2. Diagnostico de los Resultados list r 61 crimenes pcturb pobreza soltero if abs(r) > 2 predict lev, leverage stem lev hilo lev estado, show(5) high Analizar aquellos puntos con leverage mayores a (2k+2)/n display (2*3+2)/51 list crimenes pcturb pobreza soltero estado lev if lev >.156 Veamos el leverage y los residuos cuadrados lvr2plot, mlabel( estado) list estado crimenes pcturb pobreza soltero if estado=="ms" estado=="dc" | /// Veamos los Cook’s D predict d, cooksd list crimenes pcturb pobreza soltero estado d if d>4/51 Veamos la influencia predict dfit, dfits list crimenes pcturb pobreza soltero estado dfit if abs(dfit)> /// 2*sqrt(3/51) Evaluemos que pasarı́a con los coeficientes si se borrara la información en algunas variables, ¿estos cambiarı́an? Es decir, ¿nuestros coeficientes son robustos o no? dfbeta list estado DFpcturb DFpobreza DFsoltero in 1/5 El valor de dfbeta para una observación, significara que de ser incluida en el análisis (comparativamente a no ser incluida) incrementara el coeficiente de beta, en dicho valor multiplicado por el error estándar del beta correspondiente. Un dfbeta mayor a 2/sqrt(n) necesita ser investigado. display 2/sqrt(51) scatter DFpcturb DFpobreza DFsoltero estadoid, ylabel(-1(.5)3) /// yline(.28 -.28) scatter DFpcturb DFpobreza DFsoltero estadoid, ylabel(-1(.5)3) /// yline(.28 -.28) mlabel(estado estado estado) list DFsoltero estado crimenes pcturb pobreza soltero if /// abs( DFsoltero) > 2/sqrt(51) UdecomBooks 62 4. Análisis de Regresión Lineal Veamos el efecto influencia a través de regresiones parciales, de manera grafica. avplot soltero, mlabel( estado) avplots regress regress crimenes pcturb pobreza soltero if estado !="dc" Si bien podemos buscar outliers con variables pertenecientes al modelo, también podemos hacerlo con variables que no están incluidas en el modelo. regress crimenes pcturb pobreza soltero avplot pctblanco regress crimenes pcturb pobreza soltero pctblanco 4.3.Normalidad del Residuo La normalidad del residuo es requerida por muchas investigaciones si nosotros deseamos validar las pruebas de hipótesis sobre t-value y F-value. Ojo, la no normalidad del residuo no invalidad la regresión. Una regresión valida requiere que el residuo sea idéntica e independientemente distribuida, no requiere que las variables explicativas sean distribuidas de forma normal. Si no como explicarı́amos el uso de variables dummys en nuestras regresiones. use elemapi2,clear regress api00 meals ell emer predict r, resid Análisis grafico de normalidad kdensity r, normal pnorm r qnorm r 4.4. Homocedasticidad del Residuo 63 Test de Normalidad Test de Lawrence C. Hamilton findit iqr iqr r Test de Shapiro-Wilk W (Ho: Normalidad) swilk r 4.4.Homocedasticidad del Residuo Supuesto crucial en un modelo MCO, la varianza de sus residuos debe ser constante. Si la varianza no es constante entonces hay heterocedasticidad que bien podrı́a ser modelada a través de un modelo de volatilidad. Detección rvfplot, yline(0) Figura 4.2: Homocedasticidad del residuo Test de Heterocedasticidad (Ho: Varianza constante) Test de White estat imtest Test de Breusch y Pagan UdecomBooks 64 4. Análisis de Regresión Lineal estat hettest El análisis grafico no nos muestra un problema serio de heterocedasticidad. Ası́ que no lo corregiremos por ahora. 4.5.Multicolinealidad Cuando dos variables explicativas están altamente relacionadas, podemos hablar de multicolinealidad. Para detectar la multicolinealidad nosotros usaremos el factor de inflación de varianza (VIF) Aquella variable cuyo vif sea mayor a 10 deberá ser investigada. regress api00 meals ell emer vif regress api00 acs_k3 avg_ed grad_sch col_grad some_col vif ¿Qué podriamos decir de esta regresión?, ¿porqué presentaria problemas de multicolinealidad? regress api00 acs_k3 grad_sch col_grad some_col vif findit collin collin acs_k3 avg_ed grad_sch col_grad some_col collin acs_k3 grad_sch col_grad some_col 4.6.Linealidad Uno de los supuestos del Modelo Lineal General es la linealidad de parámetros especificada en mi regresión. Si estamos frente a un ajuste no lineal, entonces nosotros tendremos problemas dado que estamos forzando una lı́nea como ajuste de nuestra relación no lineal. Analicemos solo a una variable. regress api00 enroll twoway (scatter api00 enroll) (lfit api00 enroll) (lowess api00 enroll) regress predict scatter scatter api00 meals some_col r, resid r meals r some_col 4.7. Especificación del modelo 65 No se vio una clara no linealidad, entonces usemos algo mas efectivo acprplot meals, lowess lsopts(bwidth(1)) acprplot some_col, lowess lsopts(bwidth(1)) Tampoco se ve un problema grave de no linealidad. Usemos una data mas interesante. use nations.dta describe regress birth gnpcap urban acprplot gnpcap, lowess acprplot urban, lowess graph matrix birth gnpcap urban, half kdensity gnpcap, normal Transformemos un dato generate lggnp=log(gnpcap) label variable lggnp "log-10 of gnpcap" kdensity lggnp, normal Regresionemos con el dato transformado regress birth lggnp urban acprplot lggnp, lowess 4.7.Especificación del modelo Un error en la especificación del modelo puede ocurrir cuando uno o mas variables relevantes son omitidas del modelo o una o mas variables relevantes son incluidas en el modelo. Una mala especificación puede afectar los parámetros estimados. Digamos que estamos corriendo una regresión entre el tamaño de la clase y el rendimiento académico, un incremento en la primera influirá incrementando la segunda, evaluaremos la especificación del modelo, para ello usaremos los siguientes comandos use elemapi2, clear regress api00 acs_k3 Un par de métodos Linktest, esta basado en la idea de que si el modelo esta bien especificado, entonces no deberı́amos encontrar variables independientes que sean significativas. El comando crea 2 variables nuevas, una variable UdecomBooks 66 4. Análisis de Regresión Lineal estimada, y el cuadrado de dicha estimación. Se evalúa el modelo con ambas variables, la estimación y hat deberı́a ser significativa pues es el valor estimado, pero su cuadrado no deberı́a serlo, pues de estar bien especificado el modelo, la estimación al cuadrado no deberı́a tener mucho poder explicativo. Linktest Ovtest regress api00 acs_k3 full linktest ovtest regress api00 linktest ovtest acs_k3 full meals 4.8.Independencia Los errores asociados a una observación no deberı́an estar asociados a los errores de alguna otra observación. En nuestro caso, al haber recolectado datos de 8 tipos de escuela es probable que estudiantes dentro de sus escuelas tiendan a ser mas parecidos que estudiantes de otra escuela, esto producirı́a errores no independientes. El problema de autocorrelacion es muy común en series de tiempo, en la cual nosotros evaluamos el test DW para ver la autocorrelación de primer orden. Si quisiéramos especificar este análisis en nuestra data, podrı́amos considerar a la variable snum como el tiempo use elemapi2, clear tsset snum regress api00 enroll dwstat predict r, resid scatter r snum ¿Qué observamos? 4.8. Independencia 67 RETO 4 . Trabajar con el archivo “gobusa5089.dta” y contestar las siguientes preguntas: ¿Identificar las variables y opinar respecto a cada variable, realizar un análisis gráfico y estadı́stico para comprender la base de datos?. ¿Identificar las variables de polı́tica y las variables apolı́ticas? ¿Elaborar una tabla de correlaciones entre la variable tax y las variables polı́ticas y comentar los resultados sobresalientes?. Responder a lo siguiente: ¿Quiénes cobran más impuestos, los estados con gobiernos divididos o los estados con gobiernos unificados?, ¿qué tan seguro estás de su respuesta?. Marco teórico mı́nimo. Existen varias teorı́as respecto del impacto de los factores polı́ticos y económicos sobre la polı́tica tributaria en cada estado: Las teorı́as apolı́ticas dicen que las variables socioeconómicas y demográficos (ingreso, población, grupos de edad) son los principales determinantes de los impuestos. Entre las teorı́as polı́ticas, algunos dicen que los factores polı́ticos partidistas (partido en el gobierno y/o congreso local, mayorı́a demócrata en el congreso o no, etc.) también son importantes. Mientras que otros dicen que son las variables polı́ticas no-partidistas (gobierno dividido, margen de la primera fuerza en el congreso local, etc.) las que afectan los impuestos, y no tanto la ideologı́a o identidad del partido en el poder (demócrata vs. republicano). Especifica al menos tres regresiones (con errores estándar robustos) para la variable tax y compara sus resultados. Interpreta brevemente los coeficientes, su bondad de ajuste, etc. y explica cuál de ellos es preferible a los otros. (Tip: no incluyas la variable spend en tu regresión). Pruebas de hipótesis Controlando por otros factores, la relación entre población e impuestos es no lineal. Controlando por otros factores, los gobernadores demócratas cobran más impuestos que los no demócratas. Manteniendo otros factores constantes, los estados con mayorı́a demócrata en el congreso local cobran más impuestos que los gobiernos sin mayorı́a demócrata. UdecomBooks 68 4. Análisis de Regresión Lineal Manteniendo otros factores constantes, los gobiernos divididos cobran menos impuestos que los gobiernos no divididos. El impacto del gobierno dividido cambia si sólo consideramos el perı́odo 1975-1989 en la regresión. Manteniendo otros factores constantes, una vez que controlamos por quién tiene la mayorı́a en el congreso (demmaj1), el margen de esta mayorı́a (dem1) no tiene un impacto en los impuestos. Interpretando regresiones: ¿Cuál es la bondad de ajuste de un modelo sin variables polı́ticas? ¿Cuánto poder explicativo adicional se consigue al incluir las variables polı́ticas? ¿Qué variables polı́ticas importan más, las partidistas o las no partidistas? (ojo, esta pregunta requiere cierta interpretación de la R2 ajustada de varios modelos, ası́ como la magnitud y significancia de tus coeficientes). Predicciones: ¿Cuánto cambian los impuestos per cápita si el ingreso per cápita aumenta en una desviación estándar? Calcula este cambio en dólares y como proporción de los impuestos promedio de la muestra. ¿Cuánto cambian los impuestos cuando la mayorı́a demócrata en el congreso local pasa de 10 a 30 %? Calcula este cambio en dólares y como proporción de los impuestos promedio de la muestra. Sesión 5 Variables Categóricas 5.1. Estimación con Variables Categóricas Habı́amos usado variables continuas anteriormente, sin embargo es posible usar variables categóricas en un análisis de regresión pero requiere un trabajo extra en la interpretación, el análisis y diagnostico de los resultados. use elemapi2.dta, clear describe api00 some_col yr_rnd codebook api00 codebook some_col codebook yr_rnd codebook mealcat mealcat Uso de variables dummy Regresionemos el rendimiento académico con la variable que nos indica si el alumno esta en el programa year-round o no regress api00 yr_rnd twoway (scatter api00 yr_rnd) (lfit api00 yr_rnd) tabulate yr_rnd, sum(api00) Observamos un parámetro negativo en la regresión, para nuestra variable dummy. Esto significa que si dicha variable toma el valor de cero la medida del rendimiento de los alumnos será su media considerando solo a aquellos alumnos que no están en el programa o sistema de enseñanza, mientras que si la variable toma el valor de uno, la medida del rendimiento será la media considerando solo a aquellos alumnos que si están bajo este sistema de enseñanza. ttest api00, by(yr_rnd) anova api00 yr_rnd display 10.7815^2 codebook mealcat regress api00 mealcat 69 UdecomBooks 70 5. Variables Categóricas Pero esta variable mealcat es una variable intervalo, podrı́amos generar tres variables a partir de esta, de tal forma que podamos definir a cada sub variable como un valor cada vez que mealcat pertenezca a cierto intervalo. tabulate mealcat, gen(mealcat) list mealcat mealcat1 mealcat2 mealcat3 in 1/10, nolabel regress api00 mealcat2 mealcat3 La constante es la media para el grupo1. El coeficiente de mealcat2 es la media del grupo 2 menos la media del grupo1, y el coeficiente de mealcat3 es la media del grupo3 menos la media del grupo1. Los resultados nos dicen que los tres grupos difieren de sus medidas de rendimientos. test mealcat2 mealcat3 tabulate mealcat, summarize(api00) 5.2.El Comando Xi Lo mismo podemos hacer con el comando “xi”, xi : regress api00 i.mealcat test _Imealcat_2 _Imealcat_3 Si deseáramos omitir el tercer grupo y no el primero, entonces deberı́amos usar el siguiente comando: char mealcat[omit] 3 xi : regress api00 i.mealcat Nosotros podemos hacer el mismo análisis usando el comando “anova” anova api00 mealcat anova, regress Aquı́ vemos que siempre la ultima categorı́a es borrada y reemplazada con la constante. Los beneficios del comando “anova” es que te da el efecto total de mealcat sin necesitar el uso del comando test como lo hacı́amos con el comando “regress”. Volvamos a nuestras regresiones: regress api00 yr_rnd xi : regress api00 i.mealcat 5.2. El Comando Xi 71 Y ahora vamos a estimar el rendimiento académico usando una variable dicotomica mas: xi : regress api00 i.mealcat yr_rnd test _Imealcat_1 _Imealcat_2 anova api00 yr_rnd mealcat anova, regress Dado que este modelo solo tiene efectos principales, sin interacciones, la interpretación del coeficiente de ”yr rnd”, es la diferencia entre escuelas con sistema year round y escuelas sin ese sistema de enseñanza, el primer coeficiente para la variable “mealcat” es la diferencia entre mealcat=1 y mealcat=3, el segundo es la diferencia entre mealcat=2 y mealcat=3 (siendo mealcat=3 la variable categórica de referencia y la cual es estimada por la variable) Finalmente los resultados indican que las diferencias entre un sistema de enseñanza year-round y un sistema de enseñanza sin year-round es significativo y las diferencias entre los tres grupos mealcat también son significativos. Veamos algunas interacciones con las variables categóricas: xi : regress api00 i.mealcat*yr_rnd Ahora incluiremos la interacción entre mealcat y yr rnd Y testeamos la significancia: test _ImeaXyr_rn_1 _ImeaXyr_rn_2 Si deseamos testear el efecto de yr rnd para mealcat=1: test _b[yr_rnd] +_b[_ImeaXyr_rn_1] ==0 Puedo ver un testeo sobre todos los efectos principales e iteraciones sin la necesidad de recurrir al comando test: anova api00 yr_rnd mealcat yr_rnd*mealcat regress api00 yr_rnd some_col predict yhat scatter yhat some_col UdecomBooks 72 5. Variables Categóricas Para correr un Anova necesitamos indicarle que la variable a evaluar tiene caracterı́sticas de continuidad: anova api00 yr_rnd some_col, cont(some_col) INTERACCIONES regress api00 some_col if yr_rnd==0 predict yhat0 if yr_rnd==0 scatter yhat0 api00 some_col if yr_rnd==0, connect(l i) msymbol(i o) sort regress api00 some_col if yr_rnd==1 predict yhat1 if yr_rnd==1 scatter yhat1 api00 some_col if yr_rnd==1, connect(l i) msymbol(i o) sort 5.3.Pruebas de Hipótesis El GPA (Grade Point Average, o promedio de notas) es una medida de la calidad de su trabajo académico a nivel universitario. Algunos patrones suelen utilizar al GPA como un factor clave cuando les ofrezcan trabajo a egresados de la universidad. Es por eso que resulta de suma importancia mantener un buen GPA durante toda su carrera universitaria. El examen de aptitud SAT (Scholastic Aptitude Test - Examen de aptitudes escolares) es un examen estandarizado para admisión a universidades en EEUU. El rango de este, varia entre los 600 y 2400 puntos, consta de 3 secciones, matemática, lectura critica, y escritura. use GPA.dta, clear desc sum reg colgpa sat verbmath tothrs hsperc hsize, robust reg colgpa sat verbmath tothrs hsperc hsize hsizesq, robust ¿Si el SAT score aumenta 100 puntos, que tan probable es que el GPA aumente 0.25 puntos? Afortunadamente, Stata hace pruebas de hipótesis de manera muy “intuitiva” ¿Qué pasa con la regresión si solo tomamos las primeras 2000 observaciones de la muestra? reg colgpa sat verbmath tothrs hsperc hsize hsizesq /// if _n<2000, robust 5.3. Pruebas de Hipótesis 73 ¿Qué pasa si solo incluimos a las mujeres en la regresión? reg colgpa sat verbmath tothrs hsperc hsize hsizesq /// if female==1, robust ¿Qué pasa si incluimos sólo a las mujeres blancas? reg colgpa sat verbmath tothrs hsperc hsize hsizesq /// if female==1 & white==1, robust ¿Como les va a los hombres y mujeres en el SAT? summ sat summ sat if female ==1 summ sat if female ==1 & white==1 generate lhsize = log(hsize) reg colgpa sat verbmath tothrs hsperc lhsize, robust reg colgpa sat verbmath tothrs hsperc lhsize female /// white black athlete, robust generate mm = female * white * athlete summ mm female white athlete reg colgpa sat verbmath tothrs hsperc lhsize female /// white black athlete mm, robust Un modelo simple con variables interactivas: xi: reg colgpa sat i.female*i.white USEMOS LA BASE DE DATOS Salario2.dta use Salario2.dta, clear describe Esta es una base de datos para explicar los salarios mensuales (wage) summ summ IQ, detail hist IQ hist wage summ wage, detail sktest IQ wage REGRESIONES ROBUSTAS PARA SALARIOS UdecomBooks 74 5. Variables Categóricas reg wage educ exper IQ, robust summ educ exper corr IQ educ exper predict yhat, xb summ yhat wage Introduciendo una variable mas: MARRIED reg wage educ exper IQ married, robust EFECTOS INTERACTIVOS ENTRE VARIABLES CONTINUAS generate edex=educ*exper generate edumarr= educ*married summ educ exper marr edex edumarr Modelo Base: reg wage educ exper IQ married , robust Modelo con EDEX: reg wage educ exper IQ married edex, robust Modelo con EDUC*MARRIED y EDUC*EXPER: reg wage educ exper IQ married edex edumarr, robust corr educ exper edex Modelo sin interacción EDEX y dejando EDUMARR: reg wage educ exper IQ married edumarr, robust xi: reg wage educ exper i.black*i.married IQ, robust reg wage educ exper IQ, robust ¿Que pasa si tienes 10 años de educación y 5 de experiencia? lincom 10*educ + 5*exper reg wage educ exper IQ married , robust lincom 10*educ + 5*exper + married HACIENDO PRUEBAS DE HIPOTESIS PARA UNA O MÁS VARIABLES: Pruebas F test educ test educ = 70 test educ = 80 5.4. Creación de Variables Dummys 75 Una prueba F también prueba la significancia CONJUNTA de un GRUPO de variables reg wage educ exper IQ married tenure urban black meduc feduc, robust test feduc meduc test meduc test tenure meduc test tenure meduc black 5.4.Creación de Variables Dummys Existen tres formas de crear variables dicotomicas: Si partimos de una variable cualitativa de múltiples categorı́as, entonces con la especificación “XI” será posible la creación de variables dicotomicas, reestructurando la variable categórica. Una segunda forma de crear variables dicotomicas, es a través de un comando “if” condicionando a una variable continua, la variable que se obtendrá, será entonces, mi variable latente. La última forma de creación es mediante el comando “input”, donde se especificara el nombre de las variables y la introducción de datos es de manera manual. 5.5.Bucles y Programas El uso de bucles en Stata o Eviews, no es muy usual, dado que estos programas implementan una plataforma orientada al usuario en lugar de a un programador. input famid 1 3281 3413 2 4042 3084 3 6015 6123 end inc1-inc12 3114 2500 2700 3500 3114 3319 3514 1282 2434 2818 3108 3150 3800 3100 1531 2914 3819 4124 4274 4471 6113 6100 6100 6200 6186 6132 3123 4231 6039 6215 Ahora vamos a visualizarlo con un listado. list famid inc1-inc12, clean Si deseamos calcular una cantidad de 10 % en impuestos pagados por cada mes, una manera simple de hacer esto computo a las 12 variables es mediante una multiplicación simple: UdecomBooks 76 5. Variables Categóricas generate generate generate generate generate generate generate generate generate generate generate generate taxinc1 = taxinc2 = taxinc3 = taxinc4 = taxinc5 = taxinc6 = taxinc7 = taxinc8 = taxinc9 = taxinc10= taxinc11= taxinc12= inc1 * .10 inc2 * .10 inc3 * .10 inc4 * .10 inc5 * .10 inc6 * .10 inc7 * .10 inc8 * .10 inc9 * .10 inc10 * .10 inc11 * .10 inc12 * .10 Lo cual resulta algo tedioso, imagı́nense si tuvieran mas de 12 variables dentro del computo. Ahora aplicaremos un criterio de programación simple, estructurando un bucle que nos ayude a implementar el cálculo de manera rápida y ordenada. foreach var of varlist inc1-inc12 { generate tax‘var’ = ‘var’ * .10 } Ahora “var” es el contador, que cambiara de acuerdo al listado de variables, desde inc1 hasta inc12; dentro del looping, se podra acceder a “var” mediante comillas, tales como “ ‘var’ ”. ¿Que sucede si usamos un contador numérico? generate generate generate generate incqtr1 incqtr2 incqtr3 incqtr4 = = = = inc1 + inc4 + inc7 + inc10+ inc2 + inc5 + inc8 + inc11+ inc3 inc6 inc9 inc12 list incqtr1 - incqtr4 En forma más rápida. foreach qtr of numlist 1/4 { local m3 = ‘qtr’*3 local m2 = (‘qtr’*3)-1 local m1 = (‘qtr’*3)-2 generate incqtr‘qtr’ = inc‘m1’ + inc‘m2’ + inc‘m3’ } list incqtr1 - incqtr4 ¿Si comparamos ingresos?, digamos que deseamos generar dummys tales que, indiquen “1” cuando el ingreso del mes actual sea menor que el ingreso 5.5. Bucles y Programas 77 del mes anterior, y “0” cuando el ingreso del mes actual sea mayor o igual que el ingreso del mes anterior. foreach curmon of numlist 2/12 { local lastmon = ‘curmon’ - 1 generate lowinc‘curmon’ = 1 if ( inc‘curmon’ < inc‘lastmon’ ) replace lowinc‘curmon’ = 0 if ( inc‘curmon’ >= inc‘lastmon’ ) } Listamos para observar los resultados list famid inc1-inc12, clean noobs list famid lowinc2-lowinc12, clean noobs Otra manera de hacer lo mismo: forvalues curmon = 2/12 { local lastmon = ‘curmon’ - 1 generate lowinc‘curmon’ = 1 if ( inc‘curmon’ < inc‘lastmon’ ) replace lowinc‘curmon’ = 0 if ( inc‘curmon’ >= inc‘lastmon’ ) } Veamos ahora un comando también útil para programar, el comando WHILE: Ejemplo: local i=1 while ‘i’ <=10 { display ‘i’ local i=‘i’+1 } Stata provee de la especificación de programas que el usuario bien podria crear. Crearemos un programa básico, “HOLA MUNDO” program define Super display "HOLA MUNDO" end UdecomBooks 78 5. Variables Categóricas Si deseamos crear otro programa con el mismo nombre, Stata nos mostrara un mensaje de error diciéndonos que existe un programa con ese nombre por lo que debemos eliminarlo primero: program drop Super y ahora si podemos correr el programa. Bibliografı́a [1] Moya, Rufino - Estadı́stica Descriptiva. [2] Moya, Rufino; Saravia, Gregorio. -Probabilidad e Inferencia Estadı́stica. [3] Wooldridge, Jeffrey M. - Introducción a la Econometrı́a. [4] Gujarati, Damodar - Fundamentos de Econometrı́a 79 UdecomBooks