Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
INTRODUCCION
3 INTRODUCCION
Microeconometría
y MATLAB:
Una introducción
Abi Adams
Damian Clarke
Simon Quinn
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
1
2 MICROECONOMETRIA Y MATLAB
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
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:
𝒚 = 𝑿𝜷 + 𝜺 (1.1)
Donde 𝛽 es un vector de parámetros 3 × 1. Denotamos la estimación MCO de 𝛽
como 𝛽̂ ; podemos encontrar 𝛽̂ ; forma directa en Stata...
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:
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.
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:
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
(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:
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.
También es posible que deseemos pedirle a Matlab que informe sobre una
concatenación horizontal de
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 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:
Por supuesto, nos gustaría visualizar esto en una cuadrícula más fina. Esto es fácil
usando meshgrid:
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
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).)
(𝑖𝑣) 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 . '
(𝑐) ¿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
𝐴. 𝑥 ≤ 𝑏;
min𝑥 𝑓 ′ 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 = { 𝐴𝑒𝑞. 𝑥 = 𝑏𝑒𝑞 (2.1)
𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,
ENTRANDO EN EL ‘LABORATORIO MATRIX’ 21
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:
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
𝐴. 𝑥 ≤ 𝑏;
𝐴𝑒𝑞. 𝑥 = 𝑏𝑒𝑞
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:
Distribución Comando
Uniforme rand ()
Normal randn()
Lognormal lognrnd()
Multivariada Normal mvnrnd()
y mucha otras… random(distrbn,)
𝑝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
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
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:
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.
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.
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
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:
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
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
= Λ( 𝛽0 + 𝛽1 . 𝑥𝑖 ) (4.8)
Dónde Λ es el 𝑐𝑑𝑓 logístico.
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...
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)
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.
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
EJERCICIOS