Sei sulla pagina 1di 72

1

Microeconometría y MATLAB: una introducción

1
INTRODUCCION
3 INTRODUCCION

Microeconometría
y MATLAB:
Una introducción
Abi Adams
Damian Clarke
Simon Quinn
INTRODUCCION

Great Clarendon Street, Oxford, OX2 6DP,


Reino Unido
Oxford University Press es un departamento de la Universidad de Oxford. Promueve
el objetivo de excelencia de la Universidad en investigación, erudición, y educación
publicando en todo el mundo. Oxford es una marca registrada de Oxford University
Press en el Reino Unido y en algunos otros países
© Abigail Adams, Damian Clarke y Simon Quinn 2015
Los derechos morales de los autores han sido afirmados
Primera edición publicada en 2015
Impresión: 1
Todos los derechos reservados. Ninguna parte de esta publicación puede reproducirse,
almacenarse en un sistema de recuperación, o transmitido, en cualquier forma o por
cualquier medio, sin el permiso previo por escrito de Oxford University Press, o según
lo expresamente permitido por ley, por licencia o bajo los términos acordados con la
reprografía apropiada organización de derechos Consultas sobre reproducción fuera
del alcance de la arriba debe enviarse al Departamento de Derechos, Oxford University
Press, al dirección arriba No debe circular este trabajo de ninguna otra forma y debes
imponer esta misma condición a cualquier adquirente
Publicado en los Estados Unidos por Oxford University Press 198 Madison Avenue,
Nueva York, NY 10016, Estados Unidos de América
Catalogación de la Biblioteca Británica en Datos de Publicación
Datos disponibles
Número de control de la Biblioteca del Congreso: 2015939865
ISBN 978-0-19-875449-7 (hbk)
978-0-19-875450-3 (pbk)
Impreso en Gran Bretaña por
Clays Ltd, St Ives plc
Los enlaces a sitios web de terceros son provistos por Oxford de buena fe y solo para
información. Oxford se exime de cualquier responsabilidad por los materiales
contenido en cualquier sitio web de terceros al que se haga referencia en este trabajo.
5 INTRODUCCION

 CONTENIDO
LISTA DE FIGURAS ix
LISTA DE MESAS xi
PRÓLOGO xiii
INTRODUCCIÓN xv

Índice
Parte I Fundamentos ........................................................................................................... 1
1 Ingresando a la 'Matriz Laboratorio' ...................................................................... 2
2 El Agente Optimiza ............................................................................................... 20
3 El Economista Optimiza........................................................................................ 32
INTRODUCCION
7 INTRODUCCION

 PRÓLOGO

Sócrates: Y ahora, dije, permítanme mostrar en una figura cuán lejos está nuestra
naturaleza iluminado o no iluminado: -¡Atención! seres humanos que viven en un
cueva de tierra, que tiene la boca abierta hacia la luz y que alcanza todo el tiempo la
cueva; aquí han estado desde su infancia, y tienen sus piernas y cuellos encadenados
para que no se puedan mover, y solo puedan ver delante de ellos, siendo impidió que
las cadenas giraran alrededor de sus cabezas. Arriba y detrás ellos un fuego está
ardiendo a distancia, y entre el fuego y los prisioneros allí es una forma elevada; y verás,
si miras, una pared baja construida en el camino, como la pantalla que los jugadores de
marionetas tienen delante de ellos, sobre la cual mostrar los títeres.
Glaucon: Ya veo.
Sócrates: Y ves, dije, hombres pasando a lo largo de la pared llevando todo tipos de
embarcaciones y estatuas y figuras de animales hechas de madera y piedra y varios
materiales, que aparecen sobre la pared? Algunos de ellos están hablando, otros en
silencio.
Glaucon: me has mostrado una imagen extraña, y son extraños prisioneros.
Sócrates: Como nosotros, respondí; y ven solo sus propias sombras, o las sombras de
uno al otro, que el fuego arroja en la pared opuesta de la ¿cueva?
Glaucon: Es cierto, dijo; ¿Cómo podrían ver nada más que las sombras si nunca se les
permitió mover la cabeza?
Sócrates: Y de los objetos que se transportan de la misma manera que solo vería las
sombras?
Glaucon: Sí, dijo.
Sócrates: ¿Y si pudieran conversar entre ellos, lo harían? ¿No supongo que estaban
nombrando lo que realmente estaba delante de ellos?
Glaucon: Muy cierto.
Sócrates: Y supongamos además que la prisión tiene un eco que proviene de Por otro
lado, ¿no estarían seguros de imaginarse cuando uno de los transeúntes habló que la
voz que escucharon vino de la sombra que pasa?
Glaucon: Sin dudas, respondió.
Sócrates: A ellos, les dije, la verdad sería literalmente nada más que la sombras de las
imágenes.
Glaucon: Eso es cierto.
INTRODUCCION

Sócrates: Y ahora mira otra vez, y mira lo que naturalmente seguirá si los presos son
liberados y desaprobados de su error. Al principio, cuando cualquiera de ellos es
liberado y obligado de repente a ponerse de pie y girar su cuello y caminar y mirar hacia
la luz, sufrirá dolores agudos; el resplandor será angustioso él, y él será incapaz de ver
las realidades de las cuales en su estado anterior tenía visto las sombras; y luego concibe
a alguien diciéndole que lo que vio antes era una ilusión, pero eso ahora, cuando se
acerca más a ser y su mirada se dirige hacia una existencia más real, él tiene una visión
más clara, lo que será su respuesta? Y puedes imaginar que su instructor está apuntando
a los objetos a medida que pasan y requiriéndole que los nombres, ¿no será él
¿perplejo? ¿No le parecerá que las sombras que antes vio son más ciertas? que los
objetos que ahora se le muestran?
Platón*
* Platón en Rouse WHD (editor), The Republic Book VII, Penguin Group Inc. (1961),
pp. 365-401.
9 INTRODUCCION

 INTRODUCCIÓN

Como economistas, queremos aprender sobre el comportamiento humano, es por eso


que construir modelos, recopilar datos y preocuparse por la econometría. Este es un
libro sobre algunas de las técnicas que utilizan los economistas para crear un diálogo
directo entre teoría económica y estimación econométrica. Estas técnicas están
diseñadas para ayudarnos a pensar sobre las estructuras de incentivos que enfrentan
los agentes y las implicaciones cationes de esas estructuras para la observación
empírica: las "sombras proyectadas" por incentivos sobre las variables que
observamos.
Este libro está diseñado como una guía práctica para análisis empíricos basados en la
teoría en economía. Nos preocupan los datos que se han recopilado de individuos:
hogares individuales, empresas individuales, trabajadores individuales, y pronto. Esto
es lo que a veces se denomina 'micro data'. Específicamente, entonces, esto es un libro
sobre la adaptación de modelos microeconómicos a micro datos, para mejorar nuestra
comprensión del comportamiento humano.
Matlab no es la trama central de esta historia, aunque sin duda es el principal personaje.
Nuestro objetivo en este libro no es proporcionar una introducción completa a Matlab.
Ya hay muchos buenos libros disponibles para hacer eso. Además, nuestro objetivo en
este libro no es enseñarle teoría microeconométrica.
Por el contrario, nuestro objetivo es discutir una serie de problemas estándar aplicadas
a la microeconometría, y muestra cómo puedes usar Matlab para abordar cada uno de
ellos.
Es bastante improbable que alguno de los modelos específicos que estudiamos aquí lo
haga encaja perfectamente con cualquier problema empírico particular que enfrentes
en tu propio trabajo, pero eso, en cierto sentido, es exactamente el punto. Hay muchos
textos excelentes libros que cubren métodos microeconométricos estándar, y varios
excelentes paquetes de software para implementar esos métodos, que a menudo
requieren solo una sola línea de código para cualquier estimador dado. Por supuesto,
todos estos métodos puede implementarse en Matlab, pero este no es el lugar donde
comparó Matlab ventaja miente.
La belleza de Matlab es su extraordinaria flexibilidad. Matlab nos permite fácilmente
para construir y adaptar nuestros propios estimadores. Por lo tanto, abre clases enteras
de nuevos modelos -y, por lo tanto, nuevas ideas- que los paquetes estándar de
econometría
No permitir. Por supuesto, cuando se trata de algoritmos econométricos, habrá
siempre será un papel importante para las variedades pre-embotelladas de la
plataforma. Pero en esto libro, elaboraremos el nuestro.
INTRODUCCION

Estructura del libro


Comenzamos en la Parte I, con temas que forman la base de la
microeconometria. Después de una breve revisión de la sintaxis básica de Matlab en el
Capítulo 1, mostramos cómo Matlab se puede usar para resolver algunos de los
problemas de optimización básicos que encuentro como economistas. En el Capítulo
2, utilizamos Matlab para modelar el comportamiento de agentes optimizadores. Aquí
encontraremos las funciones clave linprog y fmincon por primera vez: funciones que
harán apariciones repetidas a lo largo de este libro. En el Capítulo 3, usamos las
técnicas de optimización de Matlab para un propósito diferente: para encontrar los
parámetros del modelo que mejor se ajustan a los datos. Esta el capítulo introduce la
estimación por Máxima Verosimilitud y por Generalización Método de momentos.
Con estas bases importantes cubiertas, pasamos a una serie de temas aplicados. En la
Parte II, discutimos la elección discreta. El Capítulo 4 es sobre multinomial discreto
elección. Aquí presentamos el concepto de máxima simulación de probabilidad y, con
ello, la noción general de estimar por simulación. En el Capítulo 5, recurrimos a juegos
discretos, es decir, problemas de elección discreta entre múltiples jugadores, en los que
el pago de cada jugador depende de las acciones de los demás. Esto es una forma
importante de problema de elección discreta por derecho propio, pero también
proporciona una base útil para pensar en general sobre la modelización numérica de
interacciones estratégicas.
Parte III es sobre el tiempo. En el Capítulo 6, presentamos decisiones sobre un
horizonte finito Este marco es útil para entender muchas cosas importantes opciones
económicas, como la inversión en capital humano. Sin embargo, algunos eco-opciones
nómicas, como la decisión de inversión óptima de una empresa, no tienen una punto
final conocido. En el Capítulo 7, discutimos cómo resolver estos modelos en un
en horizonte finito Cerramos la sección abordando la estimación de la dinámica
modelos.
A menudo, tenemos poca comprensión de la relación entre las variables de
interesar. En otros momentos, esta relación puede ser demasiado complicada para
modelar fácilmente con modelos paramétricos estándar. La Parte IV introduce no
paramétrico y regresión semiparamétrica En el Capítulo 8, presentamos la regresión
del kernel y otros estimadores de regresión local. En el Capítulo 9, nos movemos
alrededor de la 'Maldición de Dimensionalidad 'mediante la combinación de métodos
paramétricos y no paramétricos.
La Parte V trata de optimizar el código de Matlab para que se ejecute de manera
eficiente. Para complejo los modelos, los pequeños ajustes en su código pueden
generar grandes ganancias en eficiencia. Lo haremos presenta la Caja de herramientas
de computación paralela de Matlab, que te permite ejecutar trabajos en múltiples
procesadores.
11 INTRODUCCION

¿Por qué MATLAB?


No hay escasez de consejos sobre qué idioma debe usar para informática
técnica Pregunta por ahí. Es probable que termines con una extraña lista de letras,
nombres, e incluso un animal: C ++, Fortran, GAUSS, GNU Octave, OxMetrics, Java,
Julia, Perl, Python, R, S, Scilab, Stata... A menudo estos consejos bien intencionados
gestos irán acompañados de argumentos profundamente apasionados sobre por qué
este lenguaje es absolutamente el mejor lenguaje para usar en microeconometría- y que
cualquiera que no use este lenguaje es un luddite.Intentaremos no serlo ¡dogmático!
Este es un libro sobre Matlab, pero esto no significa que deba trabajar solo en este
idioma Por ejemplo, Stata es un paquete excelente para un amplio rango de métodos
econométricos estándar. Sin embargo, para escribir y correr modelos especializados,
Matlab es una gran opción. Con su extraordinaria flexibilidad, Matlab nos permite
construir y adaptar fácilmente nuestros propios estimadores. De este modo abre clases
enteras de nuevos modelos y, por lo tanto, nuevas ideas, que muchos Los paquetes
econométricos no permiten.
En particular, estas son algunas de las razones por las que amamos usar Matlab para
nuestro propio trabajo:
1. Al estar basado en matrices, el código de Matlab toma una estructura similar a las
fórmulas de libros de texto con las que estamos familiarizados. Conversión de
estimadores de la página para la computadora es, por lo tanto, un paso cómodo.
2. Muchas rutinas auxiliares que podrían tardar semanas en configurarse en otros
idiomas están disponibles en Matlab. Estos incluyen paquetes para componer, para la
optimización numérica, y plataformas que permiten la integración con otros
idiomas. En este libro de texto, lo alentaremos a que codifique sus propios
estimadores, pero no hay ninguna razón para codificar las rutinas auxiliares usted
mismo!
3. Es muy simple poner Matlab en funcionamiento. No hay necesidad de instalar
compiladores, editores de textos especiales, diferentes sistemas operativos, etc. De
hecho, Matlab ya estará instalado en las computadoras donde trabajas, y puede
comenzar simplemente señalando y haciendo clic.
4. Existe una gran comunidad de programadores de Matlab, lo que significa que
muchos recursos estupendos están disponibles gratuitamente en línea, y muchos de tus
amigos y colegas usarán este lenguaje. Esto es muy importante consideración al elegir
un idioma! Es muy práctico y divertido ser capaz de resolver problemas con amigos.
Así que deja que el viaje comience. Esperamos que los conceptos y técnicas cubiertos
en este libro abrirá nuevas posibilidades para usted como investigador aplicado.
Abi, Damián y Simón
INTRODUCCION
Parte I Fundamentos

1
2 MICROECONOMETRIA Y MATLAB

1 Ingresando a la 'Matriz Laboratorio'


Los límites de mi lenguaje significan los límites de mi mundo.
Wittgenstein*
Matlab es un lenguaje de computadora para hacer matemáticas. Su nombre es la
abreviatura de ' matriz de laboratorio ', y su propósito es simple: proporcionar una muy
poderosa y muy forma flexible de resolver problemas matemáticos. En este capítulo,
correremos una serie de ejercicios para ilustrar la simplicidad con la que Matlab maneja
matrices, y para discutir buenas técnicas de codificación para hacerlo. Esto pro-ver una
base para los conceptos y estructuras más complicados que Cubriré más tarde. Le
recomendamos que lea este libro con Matlab abierto en frente a ti y ejecuta los
comandos tú mismo cuando los encuentres en el texto. Hemos encontrado que
aprender haciendo es la mejor manera (¡y la más divertida!) de hacer frente a un nuevo
lenguaje de programación y una nueva economía técnicas.
En este libro, suponemos que tiene un conocimiento práctico del Matlab interfaz y
puede navegar entre los diferentes componentes del escritorio Matlab. Si esta es la
primera vez que usa el programa, hay una cantidad de excelentes libros y recursos en
línea para que se ponga al día. Por ejemplo, Hahn y Valentine (2013).
La forma más sencilla de interactuar con Matlab es a través de la 'línea de comando’, y
aquí es donde comenzaremos. La línea de comando funciona como una calculadora.
Podemos ver esto por un cálculo no demasiado complicado:

Podemos usar la línea de comando para crear variables de matriz para almacenar
nuestros resultados.
Comencemos con una variable simple, 𝑦:

Como su nombre lo sugiere, Matlab está diseñado para tratar con matrices de manera
muy simple y efectivamente en Matlab, podemos ingresar cualquier variable como una
matriz, simplemente por usando comas para separar columnas y punto y coma en filas
separadas. Por ejemplo, creemos una matriz 3 × 2 simple (que llamaremos ′𝑥′), y
luego multiplica esa matriz por dos:
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 3

Podemos verificar qué matrices se almacenan en la memoria mediante el uso de los


comandos who (para un breve resumen) y whos (para un resumen más largo):

Matlab informa que tenemos tres matrices en la memoria: ans, 𝑥, y 𝑦. Tú no debería


sorprenderse ver 𝑥e𝑦 en la memoria; acabamos de crear estos matrices, y podemos
verificar sus contenidos simplemente ingresando los nombres de la matriz en la línea
de comando:

La matriz ans puede ser más confusa. Esta matriz almacena la mayoría de Matlab
respuesta reciente que no se ha almacenado en ninguna otra matriz. Si entramos ans
4 MICROECONOMETRIA Y MATLAB
en la línea de comando, le pediremos a Matlab que recuerde su respuesta a nuestra
anterior expresión ′2 ∗ 𝑥′:

Tenga en cuenta que si ingresamos otra expresión que no está asignada a ninguna otra
matriz, Matlab usará ans para almacenar esta nueva expresión:

Matlab tiene una amplia gama de operadores matemáticos. Nuestro objetivo aquí es
no proporcionar una discusión exhaustiva de estos. Matlab proporciona excelente
archivos de ayuda y una amplia gama de recursos en línea, y no queremos use este libro
para describir lo que está disponible en otra parte. Por ejemplo, para aprender sobre
los operadores aritméticos de Matlab, simplemente puede buscar en línea para
encontrar la página de ayuda relevante. Para aprender la sintaxis de un comando en
particular, podemos usar La extensa documentación de ayuda de Matlab desde la línea
de comando:

En lugar de discutir una lista desgarbada de comandos y operaciones en este punto, en


su lugar exploraremos diferentes técnicas a medida que se vuelvan relevantes para
nuestro análisis de varios modelos microeconométricos. Y así comenzamos, con un
Ilustración de la técnica microeconométrica más popular de todos ellos..
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 5

1.1 OLS en MATLAB: '¡Hola, mundo!'


Una forma simple de familiarizarse con el funcionamiento básico de una economía
programa es ejecutar una regresión de Mínimos Cuadrados Ordinarios. De alguna
manera, esto es el 'Hola, mundo!' del investigador aplicado. '¡Hola Mundo!' es el
programa de prueba que muchos programadores de computadoras ejecutan cuando
aprenden un idioma por primera vez descubrir su sintaxis básica y asegurarse de que
se ejecuta correctamente. Tal los programas simplemente imprimen las palabras '¡Hola,
mundo!' y luego terminar. Mientras la regresión MCO requiere un poco más de trabajo
que simplemente imprimir un estado simple- nos brinda una buena oportunidad para
trabajar con el edificio básico bloques de Matlab.
Casi todas las investigaciones aplicadas están familiarizadas con Stata, y casi todos
Quien está familiarizado con Stata, en algún momento u otro, se encuentra con el
auto.dta conjunto de datos. Este es un conjunto de datos incluido por defecto
cuando Stata está instalado, y contiene datos sobre una serie de modelos de
automóviles en 1978. Le pedimos que abra Stata brevemente y, utilizando el conjunto
de datos automático, ejecute una regresión de millaje por galón el peso y el precio del
auto. Denotaremos kilometraje por galón por 𝑁 × 1 vector 𝑦, y usará el 𝑁 × 3
vector 𝑿 de apilar valores del (i) el precio, (ii) el peso, y (iii) el número1. Nuestro
modelo OLS es, por supuesto:

𝒚 = 𝑿𝜷 + 𝜺 (1.1)
Donde 𝛽 es un vector de parámetros 3 × 1. Denotamos la estimación MCO de 𝛽
como 𝛽̂ ; podemos encontrar 𝛽̂ ; forma directa en Stata...

Ahora escribamos estas tres variables en el archivo auto.csv:

Para ejecutar la misma regresión en Matlab, primero tenemos que importar los datos
en auto.csv Antes de poder importar estos datos, debemos asegurarnos de que el
directorio de trabajo actual contiene el archivo automático. Para pasar a este archivo,
usamos los comandos pwd (imprimir directorio de trabajo), cd (cambio de directorio)
6 MICROECONOMETRIA Y MATLAB
y ls (enumere los contenidos del directorio actual). Después de elegir el correcto
directorio de trabajo, podemos importar usando dlmread:

El bloque de código anterior implica varios comandos nuevos. Comprueba que tu


puede ejecutar cada comando sin problemas en su ventana Matlab ahora. Tratar
ejecutar cada comando sin el punto y coma al final de la línea; esta voluntad le permite
ver la salida completa cada vez. El comando más importante es dlmread, que lee en
los datos de auto.csv. Todo el conjunto de datos es almacenado como una matriz
llamada DataIn. Si desea verificar que auto.dta tiene importado correctamente,
puede usar el comando whos ('DataIn') para ver el detalles.
Ahora puede ver cómo Matlab está estructurado alrededor de matrices. En el primero
línea de código, almacenamos los datos como una matriz 74 × 3, que luego
manipulamos en un vector de la variable dependiente y (mpg) y una matriz de
explicativo variables 𝑋 (agregando un vector de unos para la constante). Vale la pena
señalar aquí que la notación DataIn ( ∶, 1) implica que tomamos datos de cada uno
fila ( ′: ′) de la columna 1 en la matriz DataIn.
La sección previa de este capítulo mostró que podemos ingresar matrices mano en la
línea de comando (análisis con comas y punto y coma), pero nosotros raramente
necesitará hacer esto. En general, leeremos los datos directamente como matriz (como
lo hemos hecho aquí), o usará las operaciones basadas en matriz de Matlab simular
datos de modelos económicos.
Ahora que tenemos dos matrices (𝑋 𝑒 𝑦) que contienen los datos relevantes de
Conjunto de datos automático de Stata, podemos ejecutar nuestra regresión. Esto
requiere poco más que econometría introductoria, a saber, la fórmula:

̂ = (𝑿′ 𝑿)−𝟏 − 1 (𝑿′ 𝒚)


𝜷 (1.2)

La sintaxis de Matlab sigue de cerca la Ecuación 1.2. La única función especializada


que necesitamos es inv, lo que nos permite invertir la matriz 𝑿′ 𝑿 :
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 7

Aquí hemos calculado nuestra matriz de coeficientes BetaHat. Notarás que nuestro
resultado es igual a los coeficientes que calculamos anteriormente en Stata. 5 También
podemos estar interesados en garantizar que BetaHat sea correcto para más de cuatro
decimales. Podemos hacer esto cambiando el formato de salida de Matlab a
el formato largo, (»format long) que muestra hasta quince dígitos para variables
'dobles’. Intente cambiar el formato y luego mostrar BetaHat. Para volver al formato
de salida tradicional, simplemente ingrese format una vez de nuevo.

Ahora que ha experimentado la funcionalidad de Matlab usando OLS, puede practica


lo que has aprendido con una extensión en el Ejercicio (i) al final de Este
capítulo. Aquí, le pedimos que calcule los errores estándar de los coeficientes estimado
en la regresión anterior.

1.2 La Belleza de las Funciones

Hasta ahora, nuestro análisis simplemente ha involucrado instrucciones de tipeo en


Matlab línea de comando. Esto es efectivo pero no muy eficiente. Lo que necesitamos
es un método de guardar comandos para que podamos ejecutarlos más tarde y, si es
necesario, ejecutarlos muchas veces, con diferentes datos, diferentes parámetros y
diferentes opciones. En Matlab, podemos hacer esto con un 'M-file'. Creamos M-file
a través de Matlab ventana del editor, a la que podemos acceder escribiendo edit en
la línea de comando. Los M-file son para Matlab lo que los archivos Do son para Stata.
La aplicación más útil de un M-file ‘es definir una función .En Matlab, una
función es un tipo especial de programa. Hay tres elementos principales en un función:
(i) Las funciones aceptan entradas.
(ii) Las funciones devuelven salidas.
(iii) Cada función es autónoma; esto significa que cada función puede acceder
solo aquellas variables que se le pasan como entrada y pueden almacenar variables solo
a través de devolverlos como salidas.
8 MICROECONOMETRIA Y MATLAB
Para familiarizarnos con las funciones, volvamos a la regresión MCO que ejecutamos
lier.Una regresión es un candidato perfecto para una función; cada regresión MCO es
computacionalmente equivalente pero las entradas y salidas para cada regresión varían
según las variables 𝑿 e 𝑦que está analizando. Por lo tanto, es posible que le interese
tener una función permanente disponible que puede llamar para calcular los resultados
de la regresión. Esto es útil para ahorrar tiempo al escribir en comandos en la línea de
comando y para limitar los errores por descuido al tipear en el cálculo de 𝛽 muchas
veces.
Aquí hay un ejemplo de una función que hemos escrito, llamada OLS. Debieras poder
abrir este archivo en el editor de Matlab abriendo el archivo OLS.m. Tú puede abrir
este archivo utilizando los menús desplegables de Matlab o, alternativamente, al
escribir edit OLS.m en la línea de comando.
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 9

Hay una serie de cosas que vale la pena destacar aquí, ya sea porque son requeridos
para que se ejecute el código, o porque son buenas prácticas al escribir funciones.

(i) La primera línea de la función le dice a Matlab (a) el nombre de la función (OLS),
(b) las entradas a la función (𝑦 e 𝑋), y (c) las salidas de la función (Beta y
se). La primera línea muestra la sintaxis correcta para esta; siempre
comenzamos una función por alguna versión de:

Function [output] = function_name (inputs) (1.3)

Críticamente, esto no significa que cuando llamamos a la función OLS nos debe usar
variables llamadas 𝑦 y 𝑋. En cambio, solo significa que, dentro del programa, las variables
que hemos introducido se denominarán localmente como 𝑦 y 𝑋. Esto se hará evidente
cuando ejecutemos la función en breve.

(ii) Hay varias líneas de texto que siguen inmediatamente a la primera línea, cada
una de que viene precedido por el símbolo % .Matlab lee el símbolo % como
diciendo 'omita esta línea', lo que nos permite escribir comentarios en nuestro
código sin interrumpiendo el funcionamiento de nuestro script. De esta
manera, las líneas de comentarios puede pensarse como una explicación (ya sea
para otros usuarios, o para nosotros mismos en el futuro, y recomendamos ser
amable con su futuro ¡sí!) para ayudarnos a comprender nuestro código. Como
beneficio adicional, las líneas de los comentarios que siguen directamente a la
función se utilizan como el archivo de ayuda a la función. Entonces, cuando
escribimos help OLS en la línea de comando, la salida nos recordará lo que
necesitamos ingresar, y lo que deberíamos esperar como salida. Al realizar esto
para nuestra función OLS, se devuelve:
10 MICROECONOMETRIA Y MATLAB

Muy útil! La estructura precisa del archivo de ayuda no es importante: usted no es


necesario que establezca su propio archivo de ayuda como lo hemos descrito
anteriormente. Sin embargo, una declaración clara del propósito de la función, y de la
dimensión y descripción de las entradas y salidas, será de gran ayuda cuando regrese a
su código en los días, meses y años posteriores a su escritura. Créenos-no recordarás a
qué se refiere ese vector X la próxima semana, así que haz ¡Seguro que tu código te
recuerda esto!

(iii) La función asigna valores a las matrices Beta y se. Estos son los nombres de
las salidas en la primera línea. Esto significa que cuando la función termina de
ejecutarse, devolverá como salidas estos valores asignados.
(iv) Tenga en cuenta que la función generalmente "se ve bien".En particular, tenga
en cuenta que hay subtítulos para mostrar las partes principales del cálculo,
ments (después del símbolo ′%′) para explicar el funcionamiento de varias de
las líneas de código, y los signos ′ = ′ están tabulados en la misma alineación.
Usemos nuestra función para repetir la regresión de la Sección 1.1. Asumiendo que
los datos "automáticos" de la Sección 1.1 todavía están en la memoria (que, recuerda,
puede ser comprobado fácilmente usando el comando quién), simplemente
necesitamos pasar esta información a la función utilizando la sintaxis de OLS que
hemos definido. Podemos hacer esto desde la línea de comando:

Como se explicó anteriormente, no necesitamos referirnos a nuestros nombres de


variables como 𝑦 y 𝑋; estos son los nombres que Matlab usará dentro de la función OLS,
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 11
pero esto no restringe la forma en que usamos esa función. Por ejemplo, creemos dos
nuevas variables, tomando los valores de 𝑦 y 𝑋 , y ejecute la regresión de nuevo:

Esto está bien si solo queremos mostrar nuestros resultados de regresión en la pantalla-
pero ¿y si queremos almacenar los resultados en una variable (por ejemplo,
OLS_Beta)? Esto es sencillo: simplemente asignamos la variable como en la Sección
1.1, pero tenemos variable se refiere a un cálculo utilizando nuestra función:

Como se esperaba, la función OLS arroja los mismos resultados de regresión que en
Sección 1.1.

Comparando el resultado de nuestra regresión con la definición de la función


OLS, puede hacer la pregunta: ¿qué pasó con la variable se? Cuando programamos el
archivo OLS.m, especificamos el resultado como '[Beta, se]' pero, hasta ahora,
OLS solo ha informado OLS_Beta. La razón es que, cuando ejecutó OLS, solo
hemos pedido OLS_Beta: si llamamos a una función de la línea de comando, o asignar
el resultado de una función a una sola variable, Matlab solo devolverá la primera variable
de salida. Podemos recuperar OLS_Beta y se asignando ambas variables
conjuntamente:
12 MICROECONOMETRIA Y MATLAB

También es posible que deseemos pedirle a Matlab que informe sobre una
concatenación horizontal de

Con suerte, ahora podemos comenzar a apreciar la belleza y la simplicidad de las


funciones. Sí, es cierto que las funciones pueden evitar que repitamos muchas cosas
innecesarias tipear y, sí , es cierto que las funciones pueden ayudar a evitar el descuido
errores. Pero la verdadera belleza de la programación funcional es que podemos
reemplazar un número con la solución a una expresión matemática, y hazlo con una sintaxis
que es a la vez simple e intuitiva. Por esta razón, las funciones serán fundamental para
todo lo que hacemos en el resto de este libro.
Si estás listo para tomar un respiro leyendo y quieres escribir una función tú mismo,
genial! Una vez más, señalamos su atención a los ejercicios al final del capítulo. El
ejercicio (ii) le pide que escriba un comando posterior a la estimación.

1.3 Una Función de Utilidad Simple


Un bloque de construcción particularmente importante de la teoría microeconómica
es la utilidad función, que asigna la cantidad de bienes que un agente consume a su
saldar. No hace falta decir que tiene todos los ingredientes para ser usados en un
Matlab función: acepta entradas (bienes consumidos), devuelve salidas (utilidad) y es
autónomo, depende enteramente de las entradas y una cantidad de tecnología
parámetros.
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 13
Consideremos la función de utilidad Cobb-Douglas. En este caso, nuestro resultado
será ser útil, 𝑢 , y nuestras entradas serán buenas1, 𝑥1 , y buenas 2, 𝑥2 . Por ahora, lo
haremos tome una forma muy simple de la función Cobb-Douglas:
𝑢(𝑥1 , 𝑥2 ) = 𝑥11/2 𝑥21/2 (1.4)

Echemos un vistazo a la función UtilitySimple para ver cómo sería esto


establecido en Matlab.

Vamos a verificar que esto funcione. Podemos verificar, por ejemplo, que la función
retorna respuestas correctas para algunos paquetes diferentes...
14 MICROECONOMETRIA Y MATLAB

Por supuesto, rara vez queremos usar Matlab simplemente para calcular
un solo número.
Necesitamos una forma elegante de tratar con múltiples combinaciones posibles de 𝑥 1
y 𝑥 2 . Supongamos que, por alguna razón, queremos encontrar utilidad para 𝑥 1 = 5
y 𝑥 2 ∈ {1, . . . , 10}. Crea un vector 𝑥 1 y un escalar 𝑥 2 para representar esto:

x1 = [1:10]' ;
x2 = 5 ;

Ahora tenemos diez combinaciones de (𝑥 1 , 𝑥 2 ) para las cuales necesitamos


encontrar 𝑢(𝑥 1 , 𝑥 2 ).Podríamos tener UtilitySimple operan diez veces
por separado ejemplo, utilizando un bucle. Pero esto es muy ineficiente. En cambio,
deberíamos tener UtilitySimple se ejecuta una vez y opera en toda la matriz x1.
Esto es conocido como vectorización. Habiendo definido 𝑥 1 𝑦 𝑥 2 , deberíamos
poder simplemente entrar:

¡Pero tenemos un problema! Mira nuevamente la función UtilitySimple. Como


está escrito ahora, la función funciona perfectamente bien para los escalares 𝑥 1 𝑦 𝑥 2 ,
pero no funciona para vectores (o, más en general, para matrices). Esto es porque los
operadores usaron allí: el operador de potencia y la multiplicación operador son
entendidos por Matlab para referirse a las matrices. Logramos obtener las respuestas
correctas al ingresar dos escalares (por ejemplo, cuando calculamos latencia
UtilitySimple (1,4)) porque la distinción escalar / matriz no importa en este
simple caso. Pero nuestra función no funciona para más caso general.
Afortunadamente, Matlab tiene una solución elegante: podemos modificar
tanto la potencia operador y el operador de multiplicación para que funcionen
'elemento por elemento'.
Tanto para el operador de potencia como para el operador de multiplicación, podemos
hacer esto introduciendo un líder ′. ′. Volvamos y arreglemos nuestra función (que lo
haremos ahora solo llame a Utility) para permitir esto...
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 15

Ahora tenemos una función de utilidad que está definida correctamente para
matrices. Esto es muy poderoso, entre otras ventajas, ahora podemos visualizar nuestra
función muy eficientemente Supongamos que queremos ver cómo se comporta
nuestra función para (𝑥1, 𝑥2 ) ∈ [0, 3] × [0, 3]. Podemos crear
una malla de malla para cubrir estas dos dimensiones espacio regional (discretizado en
intervalos unitarios):
16 MICROECONOMETRIA Y MATLAB

Con suerte, está claro lo que está sucediendo aquí: hemos definido una matriz 𝑥1 y una
matriz 𝑥2 tal que 𝑥1 y 𝑥2 cubren la cuadrícula {0, 1, 2, 3} × {0, 1, 2, 3}. Con una
operación única, ahora podemos calcular la utilidad para esta grilla completa:

Entonces podemos visualizar esto con el comando surfc:

Por supuesto, nos gustaría visualizar esto en una cuadrícula más fina. Esto es fácil
usando meshgrid:

Figura 1.1 Utilidad Cobb-Douglas

Como verá en las Figuras 1.1𝑎 y 1.1𝑏, la diferencia es bastante marcada, aunque la
complejidad en la codificación de cada ejemplo es prácticamente idéntica una vez que
tenemos configurar nuestra función Esperamos que esto sea algo que se mantenga
gran parte de este libro: aunque algunas cosas pueden parecer inicialmente bastante
simples, los métodos básicos presentados aquí se pueden generalizar para resolver y
visualizar funciones de complejidad arbitraria. Consideraremos una función más
complicada en los ejercicios que siguen, en particular el Ejercicio (iii).
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 17

1.4 Revisión y ejercicios

Tabla 1.1 Capitulo 1 Comandos


Comandos Breve descripción

whos Describe las variables actualmente en la memoria


ans Devuelve el último artículo en la memoria
help Describe una función junto con su sintaxis
lookfor Busca en todos los M-file (incluidos los archivos de ayuda) una palabra clave
ones Crea una matriz de unos
cd Cambia el directorio de trabajo actual
ls Enumera el contenido del directorio de trabajo actual
pwd Imprime la ubicación del directorio de trabajo actual
dlmread Lee en un archivo de valores separados por comas
disp Imprime texto en la ventana de salida
inv Invierte una matriz
size Muestra el tamaño de una matriz
format Establece el formato de salida numérica
mldivide Una forma eficiente de resolver la división de matrices
function Definir una función a la que se pueda llamar desde la línea de comando
diag Crear vector de los elementos diagonales de una matriz
addpath Agrega un directorio a los lugares que MATLAB busca cuando se llama un
comando
meshgrid Replica vectores para formar una matriz rectangular
surfc Dibuja un diagrama de superficie tridimensional

En este capítulo, hemos introducido Matlab, su sintaxis y algunos usos. Ejemplos que
sospechamos que ha encontrado antes (probablemente muchos veces). Por ahora,
evitaremos sugerir cualquier microeconometría lecturas. ¡Esto vendrá en los capítulos
siguientes! Sin embargo, sugerimos que usted experimenta con Matlab al escribir sus
propios scripts y funciones. Si te encuentras con problemas que aún no sabes cómo
resolver, no te preocupes... Habrá muchas oportunidades para una mayor revisión en
las páginas siguientes. Si tienes ejemplos simples de problemas de cursos de economía
o investigación en curso, sentir libre de tratar de escribir códigos simples para hacer
esto en Matlab o, alternativamente, para ejercicios más enfocados, proporcionamos
preguntas a continuación.
18 MICROECONOMETRIA Y MATLAB

EJERCICIOS

(𝑖) Hemos utilizado M ATLAB para recrear las estimaciones puntuales de Stata en una
función de regresión. ¿Ahora puede generar los mismos errores estándar? (Una pista
útil: recuerda que
̂ (𝛽̂ ) = (𝑿′ 𝑿)−1 𝜎̂ 2 , donde 𝜎̂ 2 = (𝑁 − 𝑘)−1 . (𝑦 − 𝑿 𝛽̂ )′ · (𝑦 − 𝑿 𝛽̂ ), y 𝑘 es
𝑽𝒂𝒓
el número de regresores (incluido el término constante).)

(𝑖𝑖) La función OLS presentada en este capítulo devuelve estimaciones de puntos y


errores estándar para nuestros coeficientes de regresión. Intenta escribir una función
que se pueda usar después de OLS para calcule un intervalo de confianza del 95%, y
quizás también t- test y valores p asociados.
(Una sugerencia útil: las funciones de M ATLAB tinv y tcdf pueden ser útiles aquí).

(𝑖𝑖𝑖) Supongamos que queremos generalizar ligeramente nuestra función de utilidad,


de modo que tengamos:
𝑢 (𝑥1 , 𝑥2 , 𝛼) = 𝑥1 𝛼 . 𝑥21−𝛼
Cree una nueva función, Utility2.m, para acomodar esto. Compruebe que
Utility2.m coincide con el comportamiento de Utility.m para el caso
especial 𝛼 = 0.5. Repita el ejercicio visual ¿Cómo la variación en 𝛼 cambia la forma
de 𝑢 ?

(𝑖𝑣) Suponga que un consumidor tiene una función de utilidad del formulario:
𝑢(𝑥) = − 𝑒𝑥𝑝 ( − 𝑟 · 𝑥) .
Además, supongamos que 𝑥 se extrae de una distribución Normal con media 𝜇 y
varianza 𝜎 2 (es decir, 𝜇 ~ 𝑵 (𝜇 , 𝜎 2 )) Una compañía de seguros ofrece al
consumidor un producto con un límite inferior garantizado, 𝑔 . En efecto, la compañía
de seguros dice: ' Si compras nuestro producto y x < g, pagaremos la diferencia, por
lo que obtendrá g. Si compras nuestro producto y x > g, no haremos nada, así que
solo mantendrás x . '

(𝑎) Interpreta el parámetro 𝑟 .


(𝑏) ¿Cuál es la certeza equivalente si no hay un producto de seguro?
Para responder a esta pregunta, puede confiar en el siguiente resultado (que se aplica a
este caso especial 'exponencial-normal'):
1
𝐸(𝑢) = − 𝑒𝑥𝑝 [ · 𝜎 2 . 𝑟 2 − 𝜇 · 𝑟]
2
.
.
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 19

(𝑐) ¿Cuál es la utilidad esperada con el producto de seguro? (Suponga que el seguro
la compañía proporciona el producto gratis).
Para responder a esta pregunta, puede confiar en el siguiente resultado (que, de
nuevo, se aplica solo para este caso especial 'exponencial-normal'):
1 1 −𝜙 (𝑎 + 𝜎 · 𝑟)
𝐸 (𝑢|𝑥 > 𝑔) = − 𝑒𝑥𝑝 [ · 𝜎 2 . 𝑟 2 − 𝜇 · 𝑟] · [ ],
2 1−𝜙 (𝑎)
𝑔–𝜇
donde 𝑎 = y 𝜙 (. ) es el cdf de la Normal.
𝜎
(𝑑) (Para MATLAB...)Supongamos ahora que 𝜇 = 0 y 𝜎 2 = 1; defina 𝑠(𝑔 , 𝑟)como
términos de utilidad excedente del consumidor-de tener el producto de
seguro. Graficar el función 𝑠 (𝑔 , 𝑟) para (𝑔 , 𝑟) ∈ ( − 3, 3 ) × ( 0, 1.5 ) .
20 MICROECONOMETRIA Y MATLAB

2 El Agente Optimiza

Nada puede tener valor sin ser un objeto de utilidad.


Marx*

Ahora la diversión realmente comienza. La optimización restringida es una


herramienta fundamental en ciencias económicas. Básicamente, hay dos formas en que
la optimización importa:
(i) Tratamos a los agentes como optimizadores, por ejemplo, modelamos a los
consumidores como máximos la utilidad de la imitación, las empresas como la
maximización de las ganancias, y así sucesivamente.
(ii) Necesitamos usar la optimización nosotros mismos para encontrar el mejor ajuste
posible para nuestro modelo (donde 'mejor' se define por algún objetivo particular
función).
En muchos aspectos, estos dos conceptos son fundamentalmente diferentes. En el
uno de la mano, tratamos a los agentes como si optimizaran, como una forma
de especificar un modelo. Sobre el Por otro lado, en realidad optimizamos, como una
forma de estimar el modelo. Deberíamos siempre mantenga estos dos conceptos
distintos en nuestras mentes. Sin embargo, cada concepto involucra un problema de
optimización, y los principios y métodos que utilizamos para dos problemas son
notablemente similares.
En este capítulo, consideraremos el primero de estos casos: la optimización
agente. Aquí utilizaremos Matlab para resolver algunos problemas comunes que
encuentro en microeconomía.

2.1 Maximización de los beneficios


Regrese a su primer término estudiando economía. Es muy probable que se le pidió
que resolviera una pregunta similar a la siguiente: producción dada precios, el costo de los
insumos y cualquier restricción de capacidad, qué niveles de insumos deberían la empresa selecciona
para maximizar el beneficio?
Antes de comenzar con nuestro ejemplo, se necesita una breve palabra sobre la
estructura del problema de maximización de ganancias. Muchos de los problemas de
optimización que tenemos el encuentro en economía se llama formalmente 'problemas
de programación lineal': implican la selección de los valores de un conjunto de variables
de elección para optimizar algunos función objetivo lineal sujeta a un conjunto de
restricciones lineales. El general la formulación de un problema de programación lineal
es:

𝐴. 𝑥 ≤ 𝑏;
min𝑥 𝑓 ′ 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 = { 𝐴𝑒𝑞. 𝑥 = 𝑏𝑒𝑞 (2.1)
𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 21

donde 𝒙 representa el vector de variables a ser elegido, 𝒇 , 𝒃 , y 𝒃𝒆𝒒 son vectores,


y 𝑨 y 𝑨𝒆𝒒 son matrices de coeficientes conocidos. 𝒍𝒃 y 𝒖𝒃 denotan el más bajo y
límites superiores en la variable de elección.
Utilizaremos el linprog de la función Matlab para resolver la programación lineal
embistiendo problemas de este tipo La sintaxis básica de linprog es:

Las entradas 𝑓, 𝐴, 𝑏, 𝐴𝑒𝑞, 𝑏𝑒𝑞, 𝑙𝑏, 𝑢𝑏 se definen como en Ecuación 2.1. 𝑥0 es una
suposición de partida opcional para la solución.
Las salidas que recibimos son: 𝑥 (la solución óptima para el pro- problema de
gramática), fval (el valor de la función objetivo en el nivel óptimo x) y exitflag
(una variable que devuelve información sobre la optimización procedimiento, es decir,
si se alcanzó un mínimo o si el problema es no factible o no se resolvió
adecuadamente).
Vamos a ensuciarnos las manos y usaremos un progenitor para resolver un linprog
ejemplo supongamos que un agricultor tiene 75 acres para plantar cultivos. Ella debe
decida cuánto plantar del cultivo 𝑎 , trigo y cuánto sembrar del cultivo 𝑏 , maíz El
agricultor opera en un mercado perfectamente competitivo donde el trigo ordena un
precio más alto que el maíz. La función de ingresos del agricultor toma formar:
𝑅(𝑎, 𝑏) = 143𝑎 + 60𝑏 (2.2)
Si el agricultor no tuviera restricciones, ella dedicaría todo el espacio al crecimiento
cosechar 𝑎 . Sin embargo, las cosas no son tan simples. Recortar una requiere más
espacio de almacenamiento que el cultivo b y la cantidad de unidades de
almacenamiento que el agricultor tiene a su disposición está limitado a 4,000:
110𝑎 + 30𝑏 ≤ 4000 (2.3)
Sin embargo, las semillas de la cosecha 𝑏 son más caras y el agricultor es un crédito
restringido con solo $ 15,000 para gastar en su desembolso inicial de cultivos:
120𝑎 + 21𝑏 ≤ 15000 (2.4)
Usemos Matlab para responder lo siguiente:

(i) ¿Cuánto cultivo 𝑎 debería que plantar?


(ii) ¿Cuánto cultivo 𝑏 debería plantar?
(iii) ¿Cuál es su ingreso óptimo?

El vector de variables de elección, 𝑥, está estructurado como:


𝑎
𝑥=[ ] (2.5)
𝑏

En cuanto a la función objetivo, el agricultor quiere maximizar 𝑅 (𝑎 , 𝑏) . Cómo


alguna vez, linprog trabaja para minimizar la función objetivo. 𝑓, por lo tanto, toma
la forma:
22 MICROECONOMETRIA Y MATLAB

Hay tres restricciones de desigualdad que también deben respetarse: ecuaciones


2.2, 2.3 𝑦 2.4. Estos son capturados por la matriz 𝐴 y el vector 𝑏:

La restricción final es el límite inferior: el agricultor no puede plantar un negativo


superficie cultivada. No hay límite superior. Así,

Ahora tenemos todos los elementos del programa lineal para pasar a linprog como
sigue...

Lo que hemos hecho aquí es llamar a linprog con nuestra función objetivo lineal y las
restricciones de desigualdad, seguidas finalmente por el límite inferior en la superficie
de cada cultivo. Usted se estará preguntando por qué hemos incluido los dos vacíos
matrices [ ] en nuestro código. En este problema, no tenemos ninguna igualdad estricta
restricciones de las que preocuparse, pero queremos definir un límite inferior en el
variables de elección. Por lo tanto, tenemos que declarar las matrices de restricción de
igualdad como vacío.
Habiendo pasado el problema a linprog, devuelve la opción óptima de
cultivo a y b en los cultivos vector resultado, el valor de la función objetivo en obj y el
estado del problema de optimización en exitflag.
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 23

El valor de la función objetivo (obj) necesita relativamente poca explicación, más


allá de señalar que, como se esperaba, es el negativo de 𝑅 (𝑎 , 𝑏) . El valor de
exitflag debe estudiarse cuidadosamente cada vez que optimice en Matlab ya que
nos dice por qué terminó la rutina de optimización. El archivo de ayuda de Matlab para
linprog enumera todas las banderas de salida posibles. Una etiqueta de salida de 1
se devuelve cuando la función ha convergido a una solución. Valores negativos débiles
de la bandera de salida corresponden a problemas no factibles o aquellos que han
terminado antes de la función ha convergido.

2.2 Maximización de la utilidad


Muchos de los problemas de optimización que los economistas quieren resolver no
son lineal. Por ejemplo, el consumidor que maximiza la utilidad que conocimos en el
Capítulo 1 eligió un paquete de productos para maximizar su uso no lineal de Cobb
Douglas función utilidad .Volvamos a este ejemplo para presentar un elemento central
de Rutinas de optimización de Matlab: el comando fmincon. Esto es muy
función poderosa para minimización sujetos a restricciones, que va a utilizar
frecuentemente en su programación de Matlab.

El comando fmincon se usa para resolver problemas de optimización con estructura:

𝐴. 𝑥 ≤ 𝑏;
𝐴𝑒𝑞. 𝑥 = 𝑏𝑒𝑞
min𝑥 𝑓 ′ 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 = 𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏, (2.6)
𝑐𝑒𝑞(𝑥) = 0;
{ 𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏
24 MICROECONOMETRIA Y MATLAB
Esto es más general que un problema de programación lineal: la función objetivo
ción 𝑓( 𝒙 ) no es necesariamente lineal y ahora permitimos el con- las restricciones c
( 𝒙 ) y 𝑐𝑒𝑞 ( 𝒙 ) .
La sintaxis básica de fmincon es:

A diferencia de linprog, fmincon requiere que especifiquemos una conjetura


inicial 𝑥0 de que intenta encontrar el vector de elección de variables 𝑥 que minimiza la
función objetiva fun sujeta a las restricciones especificadas por el usuario. nonlcon
es una función que devuelve el valor de 𝑐 ( 𝒙 ) 𝑦 𝑐𝑒𝑞 ( 𝒙 ) .
Pongamos a fmincon a funcionar volviendo a nuestro examen de maximización de
utilidades por ejemplo. Como en el capítulo anterior, asumiremos que la utilidad del
consumidor la función es 𝑢 (𝑥 1 , 𝑥 2 ) = 𝑥1/21 𝑥1/2 2 , con lo cual el problema de
maximización es:

𝑚𝑎𝑥𝑥1,𝑥2 𝑥 1/21 𝑥 1/2 2 Sujeto a 𝐼 = 𝑝1 𝑥1 + 𝑝2 𝑥2 (2.7)

Ya hemos definido esta función en Utility.m. Antes de continuar, debemos hacer


dos pequeñas enmiendas a Utility.m para que sea fácil usar con fmincon
funciona ajustando un único vector de variables X. Sin embargo, Utility.m
actualmente está diseñado para tomar dos argumentos, el cantidad de cada bien
consumido Modificamos la función para aceptar un solo vector de cantidades que
luego simplemente 'descomprimimos' en sus elementos individuales, como puede ver
en las dos primeras líneas de la nueva función a continuación. En la última línea de la
nueva función tomamos el negativo de la utilidad, dado que, como linprog,
fmincon funciona para minimizar la función objetivo.
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 25

Ahora que tenemos la función de utilidad en la forma correcta, podemos ir sobre la


negocio de construir la restricción presupuestaria y optimizar! Imaginemos eso nuestro
consumidor tiene un ingreso total de $ 100, enfrenta precios de bienes de $ 4 𝑦 $ 7, y
nuestra conjetura inicial es que consumiría 15 𝑦 5 unidades respectivamente.

Aquí presentamos el lado derecho de nuestra restricción presupuestaria (los precios)


como 𝑃, el lado izquierdo como 𝐼, nuestra conjetura inicial como 𝐺, y un límite inferior
para el consumo de cada bien como lb. Todo esto viene junto con el fmincon
comando de la siguiente manera:
26 MICROECONOMETRIA Y MATLAB

Lo que hemos hecho aquí es llamando fmincon con nuestras limitaciones y


conjeturas iniciales como parámetros. Lo único que puede parecer un poco exótico es
el símbolo@, esto le dice a fmincon que CobbDouglas es una función. fmincon
luego devuelve el paquete de consumo óptimo: aproximadamente 12.50 unidades
de 𝑥1 y 7.14 unidades de 𝑥2 .
Entonces, ¿qué significa decir que exitflag = 5? Este mensaje es misterioso ous
pero importante. Como ahora estamos tratando con una función objetivo no lineal (y
en otras aplicaciones, posiblemente restricciones no lineales), fmincon puede solo
garantizamos que se ha encontrado un mínimo local. Una etiqueta de salida de 5 se
devuelve cuando la derivada de la función objetivo con respecto a la las variables de
elección son arbitrariamente pequeñas. Es importante tener en cuenta que nunca
podemos estar completamente seguro de que este punto corresponde a un mínimo
local. Tal vez si nosotros buscaran un conjunto de puntos más fino, fmincon podría
encontrar un menor valor para la función objetivo. Del mismo modo, puede ayudar a
fmincon si fueron para proporcionar una expresión analítica para el jacobiano.
Afortunadamente, Matlab nos permite un gran control sobre cómo en realidad
optimizar, dándonos la oportunidad de verificar la precisión de la solución. Por
ejemplo, podemos pedirle a Matlab que use un algoritmo particular para establecer el
valor que el gradiente debe tomar en el 'óptimo', para controlar el tamaño del paso de
la búsqueda camino, y así sucesivamente. Todo esto es controlado por el comando
optimset. Mecanografía optimset en la línea de comando enumera muchas
opciones y los valores predeterminados Matlab asume cuando usa fmincon.
Para ilustrar, solicitemos que fmincon optimice el uso secuencial algoritmo de
programación cuadrática (SQP), en lugar del interior predeterminado algoritmo de
punto Para hacer esto, definimos opciones que contienen nuestro especificaciones de
optimización. Esto se pasa a fmincon como el décimo argumento, dejando otra matriz
vacía en la novena posición porque no tenemos ninguna restricción no lineal.
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 27
Este cambio en el algoritmo de optimización da como resultado un pequeño cambio
en nuestro con valores de consumo, y fmincon ahora devuelve un indicador de salida
de 1, que indica que se ha encontrado con éxito un mínimo local. Por lo general,
'exitflag = 1' (o 'exitflag = 2') es un signo razonable de éxito, sin embargo,
como el anterior La discusión indica que la decisión sobre los criterios de convergencia
suele ser más una cuestión de arte que ciencia

2.3 Simulación de modelos económicos

En esencia, la microeconometría se trata de la heterogeneidad. Si todos enfrentaran el


el mismo conjunto de opciones, con las mismas limitaciones, y tenía las mismas
preferencias, entonces todos nos comportaríamos de la misma manera, y habría poca
ventaja para recopilar cualquier conjunto de datos mayor que 𝑁 = 1. En muchos
econométricos estándar modelos, permitimos que la heterogeneidad entre a través de
un 'error' aditivamente separable término. Por supuesto, no hay nada inherentemente
incorrecto con este enfoque, pero podemos querer explorar las consecuencias de
introducir variaciones aleatorias en otras partes de un modelo. Terminamos este
capítulo con una simple ilustración de cómo podríamos hacer esto en Matlab. Matlab
nos ofrece una amplia gama de herramientas para dibujar números aleatorios de las
distribuciones específicas que es probable que subyacen a nuestra Simulación Monte
Carlo. La Tabla 2.1 enumera una cantidad de estas distribuciones, y las asocia a sus
comandos en Matlab.

Tabla 2.1 Generadores de Números Aleatorios

Distribución Comando
Uniforme rand ()
Normal randn()
Lognormal lognrnd()
Multivariada Normal mvnrnd()
y mucha otras… random(distrbn,)

A veces se argumenta que los diferentes actores económicos enfrentan precios


diferentes, basado en sus características individuales (Por ejemplo, información
asimétrica los intentos pueden llevar a diferentes empresas a enfrentar diferentes
costos de factores.) Supongamos, entonces, que mantenemos nuestro modelo anterior
de consumidor con la utilidad Cobb-Douglas.
Sin embargo, ahora imagina que, en toda la población, los consumidores enfrentan
uniforme variación en el precio del bien 1:
28 MICROECONOMETRIA Y MATLAB

𝑝1 ~𝑈(50,100). (2.8)
Supongamos que queremos simular la distribución de consumo resultante
manojos. Dadas las herramientas que hemos discutido, esto es fácil.
El siguiente script proporciona una ilustración simple de cómo se puede hacer esto:
simular las elecciones de 100 individuos que tienen preferencias idénticas pero
enfrentan precios diferentes En la línea 9, generamos 100 descargas a 𝑝1 al extraer
errores de la distribución uniforme al azar y multiplicar por 50. Una vez que estos
errores son agregado a 𝑃, tendremos 𝑝1 ~𝑈(50,100). , según sea necesario. En la
parte 2 del código, el valor inicial, las opciones y el límite inferior en el procedimiento
de optimización son conjunto. 'Pre asignamos' un vector de resultados c que primero
está compuesto por elementos de 'no una número ', NaN. Usaremos este vector para
almacenar el consumo optimizado para cada individual.
En la línea 21, comenzamos un bucle for. Este comando nos permite recorrer el
enteros de 1 a 100 (como reps = 100) configurando i a cada valor por turno. Para
cada valor ofi, se ejecutan las líneas del código 20-23. Primero, el precio para el
individuo i es calculado y, dado esto, se establece el límite superior del consumo. En la
línea 22, esto se pasa a fmincon y CobbDouglas se maximiza sujeto a la
restricción presupuestaria específica individual. Finalmente, usamos el function
cdfplot dibuje el CDF empírico del consumo del bien 1 como se muestra en la
Figura 2.1.
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 29

Figura 2.1 Incorporación de la heterogeneidad en la maximización de la utilidad


Cobb-Douglas
30 MICROECONOMETRIA Y MATLAB

2.4 Revisión y ejercicios


Tabla 2.2 Capitulo 2 Comandos
Comandos Breve descripción
axis Establecer mínimo y máximo para ejes de gráfico
cdfplot Dibuja el CDF empírico de un vector
disp Imprimir contenidos de una matriz
fmincon Rutina para minimizar una función objetiva sujeta a restricciones
lineales o no lineales
for Repite un comando o serie de comandos un número específico de
veces
hold on Mantenga la gráfica actual en la ventana gráfica y agregue otra gráfica
a la salida
if Evalúa una expresión y ejecuta un grupo de declaraciones si es
verdadera
inf Crear una matriz de valores infinitos
linprog Rutina para minimizar una función objetivo lineal sujeta a
restricciones lineales
num2str Convertir número a cadena
optimset Proporciona control sobre el proceso de optimización en MATLAB
plot Dibuja un gráfico bidimensional
rand Permite un sorteo (pseudo) al azar de una distribución uniforme (0,1)
randn Permite un sorteo (pseudo) al azar de una distribución normal
rng Establece el generador de números pseudoaleatorios de MATLAB en
un punto replicable
subplot Permite múltiples gráficos en la misma ventana de trazado
scatter Gráfico de dispersión bivariado
title Agregue un título a la ventana del diagrama
xlabel Rotule el eje x en la ventana de trazado (permite el análisis del estilo
LATEX)
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 31

EJERCICIOS
(i) Una pescadora debe decidir cuántos salmones y cuántas truchas pescar. Ella puede
vender un salmón por $ 12, pero solo puede vender una trucha por $ 7. Sin embargo,
el salmón requiere dos veces tanto espacio de almacenamiento como la trucha y solo
tiene espacio para 1,000 truchas en su bote. Además, hay una cuota que limita el
número de peces que puede atrapar. Ella solo puede atrapar 1,600 fichas de pescado,
donde cada salmón vale 3 fichas y una trucha solo 2 tokens. Usa programación lineal
para determinar cuántos salmones y cuántas truchas la pescadora debería
atrapar. ¿Cómo varía la solución con el precio de la trucha?
(ii) Usando la función CobbDouglas, simula la variación en el ingreso. Usa el
simulado resultados para trazar las curvas de Engel para 𝑥1 y 𝑥2 .
(iii) Usando la función CobbDouglas, supongamos que los consumidores con mayores
ingresos también tienden a enfrentar costos más bajos para el bien 𝑥1 . Mostrar cómo
un método de simulación podría ser utilizado para pensar en los paquetes de consumo
en este caso. (Sugerencia: mvnrnd puede ser útil...)
32 MICROECONOMETRIA Y MATLAB

3 El Economista Optimiza

Balanceamos las probabilidades y elegimos las más probables. Es el uso científico


de la imaginación
Sherlock Holmes, El sabueso de los Baskerville
Los economistas son seres humanos también. En el capítulo anterior, consideramos
los consumidores optimizan sus elecciones para maximizar la utilidad. En este capítulo,
discutir formas en que nosotros, como economistas, podemos elegir parámetros para
optimizar el ajuste de nuestros modelos. Específicamente, usaremos la optimización
restringida de Matlab técnicas para estimar los parámetros del modelo por Máxima
Verosimilitud y por el Método generalizado de momentos.

3.1 Máxima verosimilitud

En el Capítulo 1, ejecutamos una regresión MCO invirtiendo una matriz. En este


capítulo, presentamos Máxima verosimilitud en la misma configuración
simple. Famoso, el log-verosimilitud asociado con el modelo de regresión clásico
(Ecuación 1.1) se ve como esto:
𝑁 𝑁 1
ℓ(𝛽, 𝜎 2 ; 𝑦 | 𝑥) = − ( ) ln 2𝜋 − ( ) 𝑙𝑛𝜎 2 − ( 2 ) (𝑦 − 𝛽𝑥)′ (𝑦 − 𝛽𝑥) (3.1)
2 2 2𝜎

El conjunto de parámetros de Máxima Verosimilitud es entonces el (𝛽 ′ , 𝜎 2 )′ vector


que maximiza la función de log-verosimilitud. Siguiendo el Capítulo 2, recordarás que
podemos combinar las rutinas de optimización de Matlab con nuestra propia
funciones. Podemos usar fmincon para maximizar ℓ buscando en combinaciones de
los parámetros 𝛽 y 𝜎 2 .
Como siempre, el proceso de maximización comienza convirtiendo nuestro objetivo
función en una función de Matlab. Como hemos mencionado anteriormente, es
necesario Optimice sobre un solo vector en lugar de sobre dos objetos separados
cuando use fmincon-entonces definimos 𝜽 = (𝛽 ′ , 𝜎 2 )′ y optimiza más de 𝜽 . La
función
NormalML define la probabilidad de registro de esta manera (multiplicado por -1
para ser adecuado para minimización por fmincon).
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 33

Nuevamente podemos usar fmincon para maximizar la probabilidad de registro. Este


es un problema de optimización forzada: 𝜎 2 > 0 . Para ver esto en la práctica,
volvamos al ejemplo de confianza auto.csv del Capítulo 1. Para hacer esto,
volveremos a nuestras estimaciones de parámetros de la Sección 1.1. Allí habíamos
definido una matriz 𝑿 y una vector y que vino del conjunto de datos automático. Le
pediremos que vuelva a ingresar o recuerde estas matrices (quizás todavía estén en la
memoria de trabajo de Matlab, en cuyo caso no necesita hacer nada), y usaremos esta
información para ver si nuestro la función de verosimilitud nos permite recuperar las
estimaciones de regresión que calculamos en el Capítulo 1.

En el caso de este problema, no hay un límite superior e inferior claro que


necesariamente queremos imponer nuestros parámetros, pero vamos a definir algunos
valores para limitar el dominio sobre el que busca Matlab. Aquí estimamos cuatro
34 MICROECONOMETRIA Y MATLAB

parámetros que corresponden a los tres 𝛽̂ ′𝑠 , junto con 𝜎̂ 2 . Primero, establezcamos


hasta los siguientes límites inferior y superior para cada uno de estos parámetros:

También definiremos un rango inicial de valores a partir del cual Matlab debería
comenzar su búsqueda. Aunque tenemos una muy buena idea de lo que estos
parámetros deberían parece de nuestra regresión en el Capítulo 1, fingiremos que este
no es el caso, y ser razonablemente agnóstico con nuestra elección inicial:

Finalmente, queremos definir una cantidad de opciones de optimización. Hasta ahora


tenemos solo arañé la superficie de las opciones de configuración optimizada para
fmincon. Anteriormente habíamos decidido usar el algoritmo de sqp y luego dejar
que Matlab decidir en todos los otros valores. A continuación, definimos algunas de
estas opciones (como recordatorio, la lista completa de opciones se puede ver
escribiendo optimset en su Ventana de Matlab).

Aquí hemos permitido que Matlab siga funcionando hasta cambios posteriores en la
función objetivo y los optimandos son muy pequeños (10 −20 ) y al mismo tiempo le
permitió evaluar la función objetivo un número suficiente de veces para encontrar
una respuesta. En conjunto, estas opciones deberían permitir una solución muy
precisa para los valores 𝜽 .
Tenemos todos nuestros ingredientes: hemos definido una función objetivo, las
restricciones, el punto de partida y las opciones de optimización. Con todo esto,
ahora solo es cuestión de dejar que Matlab se ponga a trabajar...

En el último capítulo, usamos el símbolo @ para mostrar que CobbDouglas era una
función. Aquí lo usamos de una manera un poco más complicada para declarar de las
entradas de función es nuestra variable de elección. En el lenguaje de Matlab, esto es
conocido como la 'función manejar'. La parte NormalML (theta, y, X) del
argumento le dice a fmincon que minimice la función NormalML dados los
datos 𝒚 y 𝑿 (que definimos en el Capítulo 1), mientras que @ (theta) le dice a
fmincon que la variable de elección es theta.
Deberías jugar con este código hasta que te sientas cómodo con los varios partes
móviles. Por ejemplo, intente variar la configuración de optimización, el límite
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 35
inferior y superior, y el punto de partida. Dependiendo de la configuración que
utiliza, la salida se verá algo como lo siguiente:
Local minimum possible. Constraints satisfied.

fmincon stopped because the predicted change in the


objective function is less than the selected value of
the function tolerance and constraints are satisfied to
within the default value of the constraint tolerance.

Es importante destacar que vemos que con estas configuraciones nuestro estimador
de ML encuentra correctamente la misma estimación MCO que en el Capítulo 1. Por
supuesto, era mucho más fácil de obtener estos valores simplemente invirtiendo una
matriz, como hicimos en el Capítulo 1. Para esto razón, nunca usaríamos Máxima
verosimilitud para ejecutar OLS-pero OLS es una gran manera de ilustrar los desafíos
prácticos de ML en un simple contexto.
Antes de pasar de esta sección, vale la pena señalar que optimset proporciona una
amplia gama de opciones útiles. Si, por ejemplo, estamos interesados en produciendo
un gráfico de convergencia de la función objetivo a su mínimo valor entonces
podríamos aprovechar: 'PlotFcns','optimplotfval', mientras que si
estamos interesados en ver un rango más grande de salida incluyendo el procedimiento
y el valor de la función objetivo, podríamos especificar 'Display', 'iter' como
parte de nuestro comando optimset. En la figura 3.1 vemos el resultado de la
opción PlotFcns. Hemos tomado el valor absoluto de la función de verosimilitud
por lo que parece estar convergiendo en un valor positivo de más arriba, aunque en
realidad convergerá en un valor negativo desde abajo.

3.2 Método generalizado de momentos


Máxima verosimilitud es un caballo de batalla de la microeconometría, pero sin duda
no es la única queja en el establo. Una de las formas más flexibles de estimar
36 MICROECONOMETRIA Y MATLAB

Figura 3.1 Convergencia de −ℓ(𝛽, 𝜎 2 ; 𝑦 | 𝑥)

es por el Método Generalizado de Momentos (GMM). Cuando usamos GMM, defina


una cantidad de momentos de población que son verdaderos en nuestro modelo.
Entonces Estimar los parámetros de nuestro modelo utilizando el principio de
analogía. Esta implica establecer los momentos de muestra idénticos a cero.
Al igual que ML, GMM requiere que optimicemos una función objetivo, y nuevamente
(para la última vez, ¡lo prometemos!) el ejemplo más simple proviene de la estimación
parámetros en un modelo de regresión lineal. Recordarás desde temprano clase
econométrica que las suposiciones básicas de Gauss-Markov implican que la los
siguientes momentos se mantendrán en la población para el modelo de regresión lineal:
𝐸[ 𝜀|𝑋] = 0 (3.2)
De esto, se deduce que:
𝐸[𝑋𝜀] = 𝐸[ 𝑋(𝑦 − 𝑋𝛽)] = 0 (3.3)

Podemos usar la Ecuación 3.3 para formar las condiciones del momento de
muestra. Estas muestras los momentos son de la siguiente forma:
1
𝑚= [∑𝑁
𝑖=1 𝑋𝑖 (𝑦𝑖 − 𝑋𝑖 𝛽 )] = 0 (3.4)
𝑁
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 37

Este es el vector de momento y será de dimensión 1 × 𝐾 , donde 𝐾 es el número de


variables explicativas en nuestro modelo. La idea fundamental de GMM es que
nuestras estimaciones 𝛽̂ deben ser aquellos valores que impulsan la distancia cuadrática
ponderada 𝑚 𝑊 𝑚′ a cero (o tan cerca) a cero como sea posible si tenemos más
momentos que coeficientes). Para consistente estimación, simplemente necesitamos
asegurarnos de que nuestra matriz de peso 𝑊 sea positiva definido (como una matriz
de identidad). Sin embargo, por razones de eficiencia, podemos estar interesado en
usar otras matrices de peso como las discutidas por Hansen (mil novecientos ochenta
y dos). Volvemos exactamente a este punto en el Ejercicio (iii) al final de este capítulo.
Veamos la función GMMObjective, que calcula el valor de las ecuaciones de
momento. Esta función acepta como argumentos nuestro observado 𝑦 y 𝑋 de datos,
y un valor propuesto para el vector de parámetro estima 𝛽̂ .
38 MICROECONOMETRIA Y MATLAB

Para calcular las estimaciones, todo lo que tenemos que hacer ahora es minimizar la
función GMMObjective. En este caso, usaremos fminsearch en lugar de
fmincon porque nuestro problema de optimización no tiene restricciones. Volvamos
regrese al archivo auto.csv con el que trabajamos en el Capítulo 1. En el código
siguiente, descargando esto en Matlab, y la estimación de 𝛽̂ por GMM:

Al minimizar esta función objetivo, Matlab se acerca mucho a 𝑄 = 0, y recupera las


estimaciones idénticas que encontramos previamente. Tú lo notarás que aquí hemos
especificado algunas configuraciones de optimización diferentes en nuestra
convocatoria a fminsearch. En este ejemplo, tenemos exactamente tantos
momentos como incógnitas. Esto se llama 'solo identificación'. Siempre que se
identifique GMM, deberíamos obtener 𝑄 = 0, o algo muy cercano a esto. En
cualquier situación donde su modelo está recién identificado y Q no está
extremadamente cerca de cero, su las configuraciones de optimización probablemente
necesiten un ajuste fino.
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 39

3.3 Revisión y Ejercicios


Tabla 3.1 Capítulo 3 Comandos
Comandos Breve descripción
length Determina el número de filas en una matriz
pi La constante matemática 𝜋
log Devuelve el logaritmo natural de una serie de matrices
fminunc Rutina para minimizar una función objetivo sin restricciones
fminsearch Rutina para minimizar una función objetivo sin restricciones
optimset Proporciona control sobre el proceso de optimización en
M ATLAB
eye Crea una matriz identificativa

En este capítulo, nuestro segundo en optimización, hemos pasado por algunos


ejemplos métodos de estimación típica que se convertirán en la base de la integración
de nuestras teorías con nuestros datos en capítulos posteriores. Si desea leer más sobre
la economía teoría métrica detrás de estos métodos de estimación, le sugerimos que
recurra a su libro de texto de econometría o estadísticas favorito, por ejemplo,
Cameron y Trivedi (2005), Wooldridge (2010), o Casella y Berger (2002).

EJERCICIOS
(i) Escriba un estimador alternativo de Máxima Verosimilitud. En lugar de un
estimador de MCO, intente escribir el código M ATLAB para estimar un modelo
probit. Recuerde que, en este caso, la función log-likelihood se ve así:
𝑁
ℓ( 𝛽 ; 𝒚 | 𝒙 ) = 𝛴𝑖=1 { 𝑦 𝑖 · 𝑙𝑛 𝜙( 𝛽𝑥𝑖 ) + (1 − 𝑦𝑖 ) · 𝑙𝑛[1 − 𝜙( 𝛽𝑥𝑖 )]}. Pruebe
este código usando el conjunto de datos automático como antes. Estimar 'probit
foreign length weight 'en Stata. Asegúrese de que su código replique estos
resultados en MATLAB.
(ii) Considere nuevamente los estimadores GMM y ML discutidos en este
capítulo. Cómo pudiste calcular los errores estándar de los estimadores anteriores en
MATLAB? ¿Están de acuerdo con esto? aquellos que calculamos en el Capítulo
1? Econométricamente, ¿es esto lo que esperarías?
(iii) Cuando estimamos nuestra regresión lineal mediante GMM, utilizamos la matriz
de identidad (eye ()) para 𝑊 en nuestra función de pérdida cuadrática. Sin embargo,
por razones de eficiencia, podemos preferir matrices de ponderación alternativas.
40 MICROECONOMETRIA Y MATLAB
Quizás la opción más popular es GMM de dos pasos, donde el primer paso es como
en nuestro código, y en el segundo paso usamos un peso óptimo matriz 𝑾 ̂que se basa
en las estimaciones de la primera etapa 𝛽̂ (1) . ¿Puedes escribir tu propio M ATLAB?
código para este estimador? Como recordatorio, la matriz de peso óptima se puede
escribir como
𝑁 ′ −1
1
̂ = [ (∑ 𝑥𝑖 ( 𝑦𝑖 − 𝑥𝑖 𝛽̂ (1) )( 𝑦𝑖 − 𝑥𝑖 𝛽̂ (1) )) ]
𝑾
𝑁
𝑖=1

.
(iv) Cierto código en este capítulo ha estimado 𝛽 utilizando un MMG recién
identificado. Sin embargo, en este caso, también podríamos considerar estimar a través
del Método de Momentos tradicional, que simplemente implica establecer cada
momento exactamente igual a cero (en lugar de minimizar la cuadrática
distancia). ¿Cómo codificaría un estimador del Método de Momentos para β en
MATLAB? (Sugerencia: La función fsolve puede ser útil en este caso).
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 41

Parte II
Elección discreta
42 MICROECONOMETRIA Y MATLAB

4 Elección Multinomial Discreta

Pero debe comprender, señor, que una persona está en este


tribunal o él debe ser contado en contra de esto; no habrá
camino entre.
Arthur Miller, The Crucible
En este capítulo, consideramos varios modelos de elección discreta. Esto será útil. Por
al menos dos razones Primero, a menudo tratamos a los tomadores de decisiones como
elegir entre un conjunto finito de opciones. En algunos casos, esto refleja la economía
subyacente realidad: ¿elegirá viajar en automóvil, autobús o tren? En otros casos, es
porque los investigadores a veces encuentran útil discretizar variables continuas.

En segundo lugar, los modelos de elección discreta son una forma útil de introducir la
idea de optimización anidada. En el Capítulo 2, discutimos la optimización por
economía agentes, mientras que en el Capítulo 3 discutimos la optimización para los
propósitos de Estimación. La investigación aplicada a menudo anida al primero dentro
de este último. Es decir, especificamos un modelo en el cual los agentes optimizan, y
luego elegimos el estructural parámetro que mejor se ajustan a los datos.
En este capítulo, nos centraremos en un problema simple: la demanda de diversos
modos de transporte. Supondremos que a lo largo de eso tenemos datos sobre 𝑁 =
1,000 individuos (indexados por 𝑖 ), y eso, para cada individuo, observamos una sola
covariable, ingreso (que denotaremos 𝑥 𝑖 ). Esta es una aplicación simple de un
problema famoso estudiado por Daniel McFadden y otros, que desarrollaron nuevos
métodos en teoría de elección discreta para estimar la demanda del consumidor para
el Sistema de tránsito rápido del área de la bahía de San Francisco ('BART').
Consideraremos tres modelos diferentes para este problema, con el aumento grados
de sofisticación Primero, presentamos un modelo logit (binario). Segundo,
consideramos un modelo de resultado multinomial, que hace una distribución fuerte
suposición sobre los términos de error (el logit multinomial). Finalmente, discutimos
un modelo multinomial con una suposición de distribución más flexible (los múltiples
probit nominal). El capítulo sigue de cerca la excelente discusión en el Tren (2009,
Capítulos 3 y 4).
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 43

4.1 Logit binario


Comencemos con un problema simple de decisión: un viajero (i) debe conducir a
trabajo, o (ii) tomar otros modos de transporte? 1 Podemos capturar esta elección
usando una variable de resultado binaria 𝑦𝑖 , con 𝑦𝑖 = 1 si el conmutador conduce al
trabajo.
Podemos modelar este problema como un logit binario. Supongamos que,
si el individuo 𝑖 elige 𝑦𝑖 = 1, él o ella reciben la utilidad 𝑈 𝑖1 , con 𝑈 𝑖0 definido
análogamente. Nosotros especifiquen 𝑈 𝑖𝑗 como la suma de (𝑖) una función
determinista de los datos ( 𝑉𝑖𝑗 (𝑥𝑖 ) ) y (𝑖𝑖) una variable de ruido aleatorio ( 𝜀𝑖𝑗 )2 :
𝑈 𝑖0 = 𝑉𝑖0 (𝑥𝑖 ) + 𝜀𝑖0 (4.1)
𝑈 𝑖1 = 𝑉𝑖1(𝑥𝑖 ) + 𝜀𝑖1 (4.2)
La solución a este modelo es directa:
1 𝑠𝑖 𝑉𝑖1 (𝑥𝑖 ) + 𝜀𝑖1 ≥ 𝑉𝑖0 (𝑥𝑖 ) + 𝜀𝑖0
𝑦𝑖 = { (4.3)
0 𝑑𝑒 𝑜𝑡𝑟𝑎 𝑚𝑎𝑛𝑒𝑟𝑎
𝑉𝑖0(𝑥𝑖 ) y 𝑉𝑖1 (𝑥𝑖 )podrían especificarse de manera muy flexible, por ejemplo,
podríamos tener un modelo estructural sofisticado que relacione el ingreso y la
representativa utilidad de conducir al trabajo. Sin embargo, para mantener las cosas
simples, asumiremos que 𝑉𝑖𝑗 (𝑥𝑖 ) es lineal en 𝑥𝑖 : 𝑉𝑖𝑗 (𝑥𝑖 ) = 𝛼0𝑗 + 𝛼1𝑗 . 𝑥𝑖 . Habiendo
asumido un lineal formulario para 𝑉𝑖𝑗 (𝑥𝑖 ), la solución se puede expresar como:
1 𝑠𝑖 𝛽0 + 𝛽1. 𝑥𝑖 + 𝑢𝑖 ≥ 0
𝑦𝑖 = { (4.4)
0 𝑑𝑒 𝑜𝑡𝑟𝑎 𝑚𝑎𝑛𝑒𝑟𝑎
donde 𝛽0 ≡ 𝛼01 − 𝛼00 , 𝛽1 ≡ 𝛼11 − 𝛼10 y 𝑢0 ≡ 𝜀𝑖1 − 𝜀𝑖0 .
Para cerrar el modelo, debemos hacer algunas suposiciones sobre la distribución
de 𝜀𝑖𝑗 . Críticamente, suponemos que 𝜀𝑖𝑗 se distribuye de forma independiente e
idéntica según una distribución de Valor Extremo Tipo I:
Pr(𝜀𝑖𝑗 ≤ 𝑧|𝑥𝑖 ) = exp(− 𝑒𝑥𝑝(−𝑧)) (4.5)
Es decir, suponemos que 𝜀𝑖𝑗 es independiente entre individuos ( 𝑖 ) y opciones que
enfrenta un individuo dado ( 𝑗 ). Se deduce de esta suposición que 𝑢𝑖 tiene una
distribución logística:
exp(𝑧)
Pr(𝑢𝑖 ≤ 𝑧 | 𝑥𝑖 ) = ≡ Λ(𝑧). (4.6)
1+exp(𝑧)

Esto nos permite escribir la probabilidad condicional de elegir conducir a trabajar


como:

Pr(𝑦𝑖 = 1|𝑥𝑖 ) = Pr(𝛽0 + 𝛽1. 𝑥𝑖 + 𝑢𝑖 ≥ 0) (4.7)


44 MICROECONOMETRIA Y MATLAB

= Λ( 𝛽0 + 𝛽1 . 𝑥𝑖 ) (4.8)
Dónde Λ es el 𝑐𝑑𝑓 logístico.

4.1.1 SIMULACIÓN DEL MODELO

Al codificar su propio estimador, no importa cuán simple, siempre debe Comience por
simular su modelo. Es decir, debe generar un conjunto de datos falso y compruebe
que puede recuperar estimaciones razonables de los parámetros verdaderos. Si tú no
se puede estimar con éxito utilizando esta información falsa, nunca se sentirá seguro con
datos reales.
Comencemos, entonces, simulando nuestro modelo para el caso simple (𝛽0 , 𝛽1) =
( 0.5, 0.5 ) . Primero, sembremos el generador de números aleatorios (usando rng),
creemos un vector Beta, y genera un 𝑥𝑖 distribuido normalmente...

La función SimulateBinaryLogit genera acordes de resultados binarios a la


especificación de logit; produce la variable de resultado (𝑦), y la utilidad simulada
(utility). Presta especial atención al comando epsilon=-log (-log
(rand (N, J))) en la línea 17: ¿cómo funciona esto? de una distribución de valor
extremo tipo 1?
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 45

4.1.2 ESTIMACIÓN DEL MODELO


Ahora que tenemos algunos datos simulados para jugar, podemos pasar a estimar. La
log-verosimilitud asociada con el modelo logit binario se da como:
ℓ𝑖 ( 𝛽0 +𝛽1 𝑦𝑖 |𝑥𝑖 = 𝑦𝑖 . 𝑙𝑛 ⋀(𝛽0 + 𝛽1 . 𝑥𝑖 ) + (1 − 𝑦𝑖 ). 𝑙𝑛[1 − ⋀(𝛽0 + 𝛽1. 𝑥𝑖 )] (4.9)
La función BinaryLogitLL evalúa −1𝑥ℓ𝑖 ( 𝛽0, 𝛽1 𝑦𝑖 |𝑥𝑖 )para la ecuación 4.9.
46 MICROECONOMETRIA Y MATLAB

Podemos usar BinaryLogitLL y fmincon para encontrar el Máximo Parámetros


de verosimilitud para el modelo logit binario...
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 47

Con suerte, logrará recuperar estimaciones razonablemente buenas de (𝛽 0 , 𝛽 1 ) =


( 0.5, 0.5 ) . Deberías ir y venir entre la simulación y la estimación, verificar el
rendimiento del estimador. Cómo funciona el estimador para diferentes valores
de (𝛽 0 , 𝛽 1 ) ? ¿Cómo funciona para diferentes muestras de tamaños?

4.1.3 ESTIMACIÓN POR SIMULACIÓN


El logit binario es muy sencillo porque podemos escribir una expresión analítica para
la log-verosimilitud. A partir de ahí, necesitamos simplemente codificar la log
verosimilitud y optimiza. Sin embargo, ahora supongamos-puramente por el bien de
exposición-que por alguna razón no podemos escribir la Ecuación 4.9. Ese es,
supongamos que no podemos encontrar una expresión analítica para el logaritmo-
verosimilitud. Sería una pena si esto impidiera que estimáramos nuestro modelo. Si se
si lo hiciéramos, nos veríamos obligados a cambiar nuestro modelo solo por la
conveniencia de nuestro código, que nunca es una opción atractiva.
Afortunadamente, no todo estaría perdido. Hasta ahora, hemos simulado nuestro
modelo, y nosotros hemos estimado Pero podemos hacer más; podemos combinar los
dos métodos, para estimar por simulación. Por ahora, este es un ejercicio puramente
pedagógico, pero esta idea es fundamental cuando necesitamos estimar modelos más
flexibles más adelante en este capítulo.
La idea es simple Tenemos un modelo que predice cómo el comportamiento
observable (en este caso, la elección de 𝑦 𝑖 ) depende de una covariable observable
(ingreso, 𝑥1 ) y un vector de parámetros ( 𝜷 = (𝛽0 , 𝛽1 ) ). Somos capaces de simular
este modelo para diferentes valores de 𝛽 . También tenemos algunos datos reales. Para
algunos valores de 𝛽 , nuestros datos simulados se verán muy diferentes a nuestros
48 MICROECONOMETRIA Y MATLAB

datos reales, por ejemplo, si elija 𝛽1 = 0 , simularemos los datos en los que 𝑦𝑖 no varía
con 𝑥1 , que es poco probable que sea cierto en nuestros datos reales. Para otros valores
de 𝛽, nuestros datos simulados se verá bastante similar a nuestros datos
reales. Podemos estimar eligiendo 𝛽 para que nuestros datos simulados 'se parecen' a
nuestros datos reales.
Hay muchas maneras de hacer esto. Nuestro modelo se basa en una suposición sobre
la distribución completa de lo inobservable (es decir, tenemos un modelo paramétrico)
-así que podemos estimar por máxima verosimilitud simulada ('MSL'). La idea básica
de MSL es simple: en lugar de calcular probabilidades usando una expresión analítica,
debemos simular nuestro modelo varias veces, y use las probabilidades de muestra que
se generan a partir de los datos simulados.
Formalmente, supongamos que tenemos 𝑅 repeticiones de un algoritmo de
simulación. Luego, para cada encuestado 𝑖 , tendremos una serie simulada de
resultados binarios, {𝑦̃𝑖1 , . . . , 𝑦̃𝑖𝑅 }. Para cada encuestado 𝑦0 , todos sus resultados
simulados son gen- usando el mismo valor de 𝑥𝑖 -este es el sentido en el que estamos
simulando condicional en los valores de 𝑥𝑖 en los datos. Entonces, para el individuo 𝑖 ,
el simulado la probabilidad condicional de elegir 𝑦𝑖 =1 es simplemente:
1
𝑃̃ (𝑥1; 𝛽0 , 𝛽1) ≡ 𝑅 . ∑𝑅𝑟=1 𝑦̃𝑖𝑟 (4.10)

Para el individuo 𝑖 , el logaritmo-verosimilitud simulado es por lo tanto:


ℓ̃𝑖 ( 𝛽0, 𝛽1 ; 𝑦𝑖 |𝑥𝑖 ) = 𝑦𝑖 . 𝑙𝑛 𝑃̃ (𝑥𝑖 ; 𝛽1, 𝛽0) + (1 − 𝑦𝑖 ). 𝑙𝑛[1 − 𝑃̃ (𝑥𝑖 ; 𝛽1 , 𝛽0 )] (4.11)

Para valores de parámetro dados 𝛽0 , 𝛽1 ,


lim ℓ̃𝑖 ( 𝛽0, 𝛽1 ; 𝑦𝑖 |𝑥𝑖 ) = ℓ𝑖 (𝛽0, 𝛽1; 𝑦𝑖 |𝑥𝑖 ) (4.12)
𝑅→∞

Esta es la idea básica detrás de Máxima Simulación de Probabilidad.


La función BinaryLogitSimulatedLL (Beta, y, x, R) calculada
−1𝑥ℓ̃𝑖 ( 𝛽0 , 𝛽1 ; 𝑦𝑖 |𝑥𝑖 ) . Observe cómo este código anida la función
SimulateBinaryLogit: la misma función que utilizamos anteriormente para
generar nuestra variable de resultado.
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 49

Ahora podemos usar BinaryLogitSimulatedLL (Beta, y, x, R) para


estimar 𝜷 :
50 MICROECONOMETRIA Y MATLAB

Hay varios misterios potenciales que vale la pena explorar. Primero, en la línea 19,
creamos una matriz Simulated_y, que está llena de elementos que 'no son un
número '(NaN). Haremos esto a lo largo del libro cada vez que estemos a punto de
poblar una matriz usando un bucle. Discutimos la justificación para hacer en el
Capítulo 10. En segundo lugar, observe que arreglamos el número de repeticiones
como R = 1000. Deberías jugar con este parámetro: ¿cómo funciona el rendimiento?
del cambio del estimador cuando R varía? En tercer lugar, observe que aumentamos el
valor de DiffMinChange de su valor predeterminado (cero). Esto es necesario
porque-como discutiremos más detalladamente pronto: la probabilidad logarítmica
simulada es local plano. Finalmente, tenga en cuenta que
BinaryLogitSimulatedLL comienza sembrando el generador de números
aleatorios-rng (1). Si tuviéramos que omitir esto, el la logaritmo-verosimilitud
simulada generaría valores ligeramente diferentes cada vez se llama, incluso para los
mismos datos y los mismos parámetros. Esto sería innecesariamente confuso y
probable que produzca problemas de convergencia cuando usando fmincon.

4.2 Logit multinomial


La discusión anterior es una ilustración útil de los principios de discreto elección
binaria Pero, en muchos contextos, queremos modelar a los responsables de la toma
de decisiones que enfrentar más de dos alternativas. Genéricamente, podemos
describir esto como un modelo de 'elección multinomial'. Por ejemplo, supongamos
que ahora queremos tratar el Tomador de decisiones como elegir entre un conjunto de
diferentes opciones de transporte. Nosotros ahora tiene una variable de resultado con
tres valores:
1 𝑠𝑖 𝑒𝑙 𝑖𝑡ℎ 𝑐𝑜𝑛𝑑𝑢𝑐𝑒 𝑎𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜
𝑦𝑖 = { 2 𝑠𝑖 𝑒𝑙 𝑖𝑡ℎ 𝑐𝑎𝑚𝑖𝑛𝑎 𝑎𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜 (4.13)
3 𝑠𝑖 𝑒𝑙 𝑖𝑡ℎ 𝑣𝑖𝑎𝑗𝑎 𝑒𝑛 𝑏𝑖𝑐𝑖𝑐𝑙𝑒𝑡𝑎 𝑎𝑙 𝑡𝑟𝑎𝑏𝑎𝑗𝑜
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 51
Hay varias formas en que podemos modelar este problema. Por ejemplo, podríamos
estar dispuesto a asumir que las elecciones están de alguna manera ordenadas, es decir,
que el resultado varía monótonamente en alguna variable latente. Alternativamente,
podemos supongamos que la decisión está anidada, por ejemplo, podríamos tratar a los
viajeros como decidir si conducir o no y, si decide no conducir, entonces decidir ya sea
para caminar o andar en bicicleta.
En este capítulo, evitaremos estas dos suposiciones. En cambio, lo haremos tratar cada
resultado como generador de utilidad con su propio azar inobservable
componente. Para simplificar, mantendremos la 'Aditivo Utilidad Aleatoria estructural’
del modelo:
𝑈𝑖𝑗 (𝑥𝑖 ) = 𝛼0𝑗 + 𝛼1𝑗 𝑥𝑖 + 𝜀𝑖𝑗 (4.14)
Para las opciones 𝑗 ∈ {1, 2, 3}, el individuo obtiene las siguientes utilidades:
𝑈𝑖1 (𝑥𝑖 ) = 𝛼01 + 𝛼11 𝑥𝑖 + 𝜀𝑖1 (4.15)
𝑈𝑖2 (𝑥𝑖 ) = 𝛼02 + 𝛼12 𝑥𝑖 + 𝜀𝑖2 (4.16)
𝑈𝑖3 (𝑥𝑖 ) = 𝛼03 + 𝛼13 𝑥𝑖 + 𝜀𝑖3 (4.17)
Juntas, estas tres utilidades determinan la elección de un agente optimizador. La figura
4.1 ilustra las preferencias entre las tres opciones en dos dimensiones espacio; en cada
cuadro, el resultado en negrita representa la elección del agente. Podemos expresar la
probabilidad condicional de la 𝑖𝑡ℎ elección individual, por ejemplo, la opción 1 como:
Pr(𝑦𝑖 = 1| 𝑥𝑖 ) = 𝑃𝑟[𝑈𝑖1 (𝑥𝑖 ) > 𝑈𝑖2(𝑥𝑖 ) 𝑦 𝑈𝑖1(𝑥𝑖 ) > 𝑈𝑖3(𝑥𝑖 )| 𝑥𝑖 ] (4.18)
= 𝑃𝑟[𝛼01 + 𝛼11 𝑥𝑖 + 𝜀𝑖1 > 𝛼02 + 𝛼12 𝑥𝑖 + 𝜀𝑖2 𝑦 𝛼01 + 𝛼11 𝑥𝑖 + 𝜀𝑖1 > 𝛼03 +
𝛼13 𝑥𝑖 + 𝜀𝑖3| 𝑥𝑖 ] (4.19)
En términos más generales, si el 𝑖𝑡ℎ individuo eligiera 𝑦 𝑖 = 𝑗 de las opciones 𝐽 ,
nosotros podrían escribir:

Pr(𝑦𝑖 = 𝑗|𝑥𝑖 ) = 𝑃𝑟 [𝑈𝑖𝑗 (𝑥𝑖 ) > max 𝑈𝑖𝑘 (𝑥𝑖 ) | 𝑥𝑖 ] (4.20)


𝑘 ≠𝑗

= 𝑃𝑟 [𝛼0𝑗 + 𝛼1𝑗 𝑥𝑖 + 𝜀𝑖𝑗 > max 𝛼0𝑗 + 𝛼1𝑗 𝑥𝑖 + 𝜀𝑖𝑗 | 𝑥𝑖 ] (4.21)


𝑘 ≠𝑗
52 MICROECONOMETRIA Y MATLAB

Figura 4.1 Elección multinomial entre tres opciones


Para estimar usando la ecuación 4.21, asumiremos de nuevo que 𝜀 𝑖𝑗 es iid con una
distribución de Valor Extremo Tipo I, y es independiente de 𝑥𝑖 . Con esta dis-
suposición tributaria, podemos encontrar una expresión para el condicional
probabilidad de que el i ésimo individuo elija el resultado 𝑗 de 𝐽 elecciones.
Específicamente, podemos escribir:
𝑒𝑥𝑝[𝛼0𝑗 +𝛼1𝑗 𝑥𝑖 ]
Pr( 𝑦𝑖 = 𝑗 | 𝑥𝑖 ) = ∑ (4.22)
𝑘 𝑒𝑥𝑝[𝛼0𝑘 +𝛼1𝑘 𝑥𝑖 ]

Sería tentador tomar esta expresión e inmediatamente escribir el registro


probabilidad. Para nuestros tres resultados, por ejemplo, podríamos tratar de
maximizar el log-likelihood a través de seis parámetros
desconocidos: 𝛼01 , 𝛼02 , 𝛼03 , 𝛼11 , 𝛼12 y 𝛼13 . Sin embargo, esto sería un error. No
podríamos encontrar un conjunto único de valores que maximizan la función. Es decir,
el modelo sería bajo identificado '.La razón de esto es, por supuesto, que la utilidad
solo tiene un significado relativo condiciones. Por lo tanto, necesitamos elegir una
'categoría base' y estimar relativa a la utilidad de esa categoría. Elijamos la opción 1
como la categoría base y definamos 𝛽 0𝑗 ≡ 𝛼0𝑗 − 𝛼 01 y 𝛽 0𝑗 ≡ 𝛼1𝑗 − 𝛼 11 . (Por
supuesto, la elección de la categoría base es arbitrario: nuestras probabilidades
predichas serían idénticas si tuviéramos que elegir una diferente categoría base.) Con
esta suposición, ahora multiplicamos el numerador y el denominador de nuestra
probabilidad condicional por 𝑒𝑥𝑝(−𝛼01 − 𝛼11 𝑥𝑖 )para obtener:
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 53
1
1+∑𝑘>1 exp[𝛽0𝑘 +𝛽1𝑥1 ]
𝑝𝑎𝑟𝑎 𝑗 =1
Pr(𝑦𝑖 = 𝑗|𝑥𝑖 ) = { exp[ 𝛽 +𝛽 𝑥 ] (4.23)
0𝑘 1 1
𝑝𝑎𝑟𝑎 𝑗 >1
1+∑𝑘>1 exp[ 𝛽0𝑘 +𝛽1 𝑥1 ]

Al apilar los parámetros en un solo vector 𝛽 , ahora podemos escribir el log-


probabilidad para el i ésimo individuo:
ℓ𝑖 (𝛽; 𝑦𝑖 | 𝑥𝑖 ) (4.24)
donde usamos 1 ( · ) para denotar la función del indicador. Esta función de logaritmo
de verosimilitud ción define el famoso modelo de 'Logit multinomial'. Tenga en
cuenta que, si J = 2, el
El Logit multinomial colapsa al modelo logit que consideramos anteriormente. En el
ejercicio (iii), se le solicita extender SimulateBinaryLogit a simular el Logit
multinomial. Llame a esta función SimulateMNLogit (x, Betavec)); como
SimulateBinaryLogit, debería generar un vector de opciones (y) y una matriz de
utilidades simuladas (utilidad). 4 (De nuevo, tú puede encontrar nuestro intento en el
sitio web complementario). Podemos ilustrar el simu- algoritmo de alojamiento
mediante gráficos; acepta como entradas las dos matrices generadas como salidas por
SimulateMNLogit. La figura 4.2 muestra la nube resultante de puntos simulados y las
elecciones simuladas resultantes; este gráfico está dibujado en
[ U 2 (x) - U 1 (x) , U 3 (x) - U 1 (x) ] espacio, y es directamente análoga a la
Figura4.1.
54 MICROECONOMETRIA Y MATLAB
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 55
56 MICROECONOMETRIA Y MATLAB
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 57
58 MICROECONOMETRIA Y MATLAB

y Ejercicios
Tabla 4.1 Capitulo 4 Comandos
Comando Breve descripción
cla Borra los ejes del gráfico actual
end Cierra una declaración para, si o similar (También representa la última
ubicación en un vector)
mvnrnd Dibuja números aleatorios de la distribución normal multivariable
NaN Llena previamente una matriz con valores 'vacíos'
reshape Mueve elementos en sentido de columna desde una matriz inicial a
una nueva matriz con especificada dimensiones
[~, ...] La tilde actúa como marcador de posición para un artículo que no
debe devolverse
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 59

4.4.1 OTRAS LECTURAS

McFadden (2000) proporciona una descripción fascinante de la historia de la discreta


modelado de opciones, que incluye una discusión sobre el famoso tránsito rápido del
área de la bahía análisis (inicialmente reportado en McFadden (1974)). Train (2009)
proporciona una excelente discusión de modelos de elección discreta; este libro debería
ser requerido leyendo para cualquier persona que tenga un interés pasajero en el tema.
Entre muchos otros temas, Train analiza en detalle el simulador Geweke-Hajivassiliou-
Keane, que es una mejora adicional en el método de aceptación y rechazo suavizado.
Este simulador está más allá del alcance de nuestras discusiones aquí, pero alentamos
usted puede leer la discusión de Train sobre este método, o más detalles en Geweke et
al. (1994) si está interesado en estimar modelos Probit Multinomiales.

Maximum Simulated Likelihood es una clase muy importante de simulación basada


estimación, pero ciertamente no la única. Gourieroux y Monfort (1997)
discuten los estimadores basados en la simulación en detalle, incluido el Método de
momentos simulados y, de manera más general, de inferencia indirecta.

EJERCICIOS

(i) Retroceda y vuelva a mirar la función SimulateBinaryLogit. ¿Cómo hacer la elección?


las probabilidades se comportan a medida que aumenta el tamaño de muestra N? ¿Cómo varía la
varianza y la media?
de las simulaciones cambian (numéricamente), a medida que N crece? ¿Están estos resultados en
línea con lo que
¿esperarías del Teorema del Límite Central y la Ley de los Grandes Números?

(ii) En nuestras estimaciones, β difiere de β por dos razones: tanto nuestro


conjunto de datos como nuestra simulación el tamaño es finito (es decir, N <∞, R
<∞). ¿Cuál es numéricamente más importante? ¿Cómo funciona? responder
como N → ∞para una R fija? Y como R → ∞para un N fijo?
(iii) Extienda SimulateBinaryLogit para generar una función para simular el
Multinomial Logit. Llame a esta función SimulateMNLogit (x, Betavec), donde x
es un escalar variable explicativa y betavec es un vector de parámetros apilados.
La función debería generar tanto un vector de opciones (y) como una matriz de
utilidades simuladas (utilidad).
(iv) Extienda BinaryLogitLL para generar una función que devuelva -1 × i 1. β; yi |
xi 1. Para el Logit multinomial. Use fmincon para maximizar la log-verosimilitud y
recuperar valores razonables estimaciones de los parámetros originales (es
decir, los parámetros utilizados como entrada Betavec a la función
SimulateMNLogit).
60 MICROECONOMETRIA Y MATLAB
(v) Extienda BinaryLogitSimulatedLL para producir una función que devuelva el simulado
log-likelihood para el Logit Multinomial (llamado MNLogitSimulatedLL). Usa fmincon
maximizar la logaritmo-verosimilitud simulada y recuperar estimaciones razonables del
parámetros originales (es decir, los parámetros utilizados como entrada Betavec a la función
SimulateMNLogit).
(vi) Tanto BinaryLogitLL como BinaryLogitSimulatedLL devuelven el vector de i como
su segundo argumento. Use esta salida para producir un diagrama de dispersión de i debajo de la
analítica
expresión y bajo la función simulada. ¿Cómo cambia este diagrama de dispersión como
R cambia?
(vii) Use MNProbitSimulatedLL y fmincon para recuperar los parámetros de un conjunto de datos
simulado usando SimulateMNProbit.
(viii) Experimente con diferentes valores de phi en SimulateMNProbitSmoothed. Puedes
encontrar un valor de phi que tenga un rendimiento mejor que φ = 0.01?

Potrebbero piacerti anche