Transcription of Python para economistas - secmca.org
1 Python para economistasRandall muchos de los trabajos que realizamos los economistas se hace cada vez m snecesario el uso de lenguajes de programaci n, sea porque los modelos te ricos que desa-rrollamos carecen de soluciones anal ticas, porque el nuevo estimador econom trico quedeseamos emplear no se encuentra a n disponible en un programa con interface gr fica(donde podamos interactuar con el clic de un rat n), o bien porque no es eficiente anali-zar grandes vol menes de datos con hojas de c desean explotar las ventajas de la programaci n para realizar estas tareasprimero deben decidir cu l de los muchos lenguajes de programaci n aprender. Por ejem-plo, los lenguajes R, Python , Julia, Fortran, Gauss, y MATLAB son utilizados en mayoro menor medida por economistas . MATLAB ha sido especialmente popular en este cam-po, y muchas herramientas se han desarrollado para ejecutarse en este programa, entreellasDYNAREeIRIS(para resolver y estimar modelos de equilibrio general estoc sticos,DSGE),CompEcon(para econom a computacional), yEconometrics(para econometr aespacial).
2 A pesar de que Python a n no es tan popular comoMATLAB entre economistas ,ciertamente en a os recientes su popularidad ha crecido enormemente. Por ejemplo, lossiguientes libros usan Python para realizar labores t picas de los economistas : QuantEconde Thomas Sargent y John Stachurski. Economic Dynamics: Theory and Computation, de Stachurski. Python for Econometrics, de Kevin es un lenguaje vers til y f cil de aprender de hechoes muy utilizadoen lasmejores universidades de Estados Unidos para ense ar cursos introductorios de inform -tica. Su sintaxis es muy clara, lo que facilita el desarrollo y mantenimiento del c digo. Debido a que es uno de los lenguajes m s populares entre programadores inform ticos,1 Economista Consultor de la Secretar a Ejecutiva del Consejo Monetario Centroamericano (SECM-CA) y profesor de econom a en la Universidad de Costa Rica (UCR). Doctor en Econom a por la OhioState University (OSU) y Master en Econometr a por la London School of Economics (LSE).
3 Las opi-niones expresadas son las del autor y no necesariamente representan la posici n de la SECMCA, ni delos miembros del m ltiples facilidades para aprenderlo (libros, p ginas de Internet). Es una ex-celente herramienta para ejecutar tareas de c lculos cient ficos (gracias a paquetes comoNumpyyScipy), manejo de datos (pandas), visualizaci n (Matplotlib) y modelaci n eco-nom trica (Statsmodels).Otra ventaja de utilizar Python es que, a diferencia de programas propietarios, Pythony muchos de estos paquetes complementarios son completamente gratuitos. La mejorforma de conseguir Python es a trav s deAnaconda, una distribuci n gratuita que incluyem s de 300 paquetes de gran utilidad en ciencias, matem tica, ingenier a, y an lisis dedatos. Adem s de Python , Anaconda incluye herramientas como IPython (para ejecutarPython de manera interactiva),Jupyter(un editor que permite integrar texto, c digo yresultados en un s lo archivo, excelente para documentar trabajos), Spyder (una interfazgr fica para editar c digo, similar a la interfaz de MATLAB) y Conda (permite instalary actualizar paquetes).
4 Quienes deseen empezar a trabajar en Python deben tener en cuenta dos , actualmente existen dos versiones de Python que no son enteramente compati-bles entre s , la 2 (cuya ltima actualizaci n es la ) y la 3 (actualmente actualizadaa ). En lo personal, recomiendo trabajar con la versi n porque tiene mejoras im-portantes con respecto a la versi n , y adem s la mayor a de los paquetes necesariospara trabajar en aplicaciones t picas de un economista ya han sido portadas a la , aunque Spyder facilita la edici n de c digo, usuarios m s avanzados podr anpreferirPyCharm, un excelente editor de Python cuya versi n Community puede uti-lizarse gratuitamente. Este editor facilita mucho la edici n de programas, ya que cuentacon funciones como autocompletado (especialmente til cuando a n no hemos memori-zado las funciones de Python ), resaltado de sintaxis (muestra palabras claves de colordistinto, para que sea m s f cil entender la l gica del programa escrito), y depurador(para ejecutar parcialmente un programa cuando es necesario encontrar un error).
5 El objetivo de esta nota es ilustrar algunas de las tareas comunes que los economistaspueden ejecutar utilizando Python . Primero, se replican dos modelos de competencia deCournot presentados por Miranda y Fackler (2002) que se resuelven con t cnicas nu-m ricas utilizando el paquete CompEcon- Python 2, el cual est disponible librementeenGithub3. Segundo, se ilustra c mo automatizar la obtenci n de datos de Internet ysu presentaci n en tablas y gr ficos. Tercero, se muestran algunos ejemplos de modeloseconom tricos estimados en paquete fue desarrollado por el autor y est basado precisamente en eltoolbox CompEcon para MATLAB de Miranda y Fackler (2002).3 Los lectores interesados en el tema de econom a computacional encontrar n m s de estos ejemplosen Romero-Aguilar (2016).2 Para cada uno de los problemas que se presentan, se incluye el c digo de Python quelo resuelve, as como breves explicaciones de c mo trabaja este c digo. No obstante, estanota no pretende ense ar a programar en Python , porque como se mencion anterior-mente, existen ya muchos recursos did cticos de gran calidad para este fin, entre ellos elsitio dedesarrolladores de Google, el sitiolearnpython, y varios cursos en l nea igual manera, en los dos primeros ejemplos se presentan concisamente los m todosnum ricos que se implementan en Python , pero se recomienda a los lectores interesadosen este tema consultar los libros de texto de Miranda y Fackler (2002), Judd (1998), yPress, Teukolsky y Brian P.
6 Flannery (2007) (todos ellos disponibles en ingl s).3 Ejemplo 1: Un modelo de Cournot con 2 empresasSuponga que el mercado de un producto est dominado por dos empresas que com-piten entre s . Para este duopolio, la inversa de la funci n de demanda est dada porP(q) =q y ambas empresas tienen costos cuadr ticosC1=12 1q21C2=12 2q22 Las ganancias de las empresas son 1(q1; q2) =P(q1+q2)q1 C1(q1) 2(q1; q2) =P(q1+q2)q2 C2(q2)En un equilibrio de Cournot, cada empresa maximiza sus ganancias tomando comodadas la producci n de la otra empresa. As , debe cumplirse que@ 1(q1; q2)@q1=P(q1+q2) +P (q1+q2)q1 C 1(q1) = 0@ 2(q1; q2)@q2=P(q1+q2) +P (q1+q2)q2 C 2(q2) = 0De tal manera que los niveles de producci n de equilibrio de este mercado viene dadopor la soluci n a este sistema de ecuaciones no linealesf(q1; q2) =[(q1+q2) q1(q1+q2) 1 1q1(q1+q2) q2(q1+q2) 1 2q2]=[00](1)El m todo de NewtonPara encontrar la ra z de la funci n definida en (1) utilizaremos el m todo de general, este m todo se aplica a la funci nf: n!
7 Npara encontrar alg n4valorx tal quef(x ) = 0. Para ello, partimos de un valorx02 ny formamos la recursi nxi+1=xi J 1(xi)f(xi)(2)dondeJ(xi)corresponde al jacobiano defevaluado enx0. En teor a, siguiendo estarecursi nxiconverge ax siempre y cuando la funci nfsea continuamente diferenciabley el valor inicialx0est suficientemente cercano a la ra zx .4N tese que, dependiendo de la funci n, podr a haber m s de una soluci n, o ninguna soluci n el modelo con PythonPrimero, iniciamos una sesi n de Python e , resolver este modelo computacionalmente, es necesario asignar valores a lospar metros, por lo que fijamos los valores = 0:625, 1= 0:6y 2= 0 ([ , ])Las inc gnitas de nuestro problema son los niveles de producci n de cada empresa,q1yq2. Definimos la funci nmarketque nos dice la cantidad total de producci n y elprecio resultante del bien, dado los niveles deq1yq2. N tese que ambas cantidades sonpasadas a esta funci n en el vectorqdefmarket(q):quantity= ()price=quantity**(-alpha)returnprice, quantityLuego, definimos la funci ncournot, la cual retorna una tupla con dos elementos:la funci n objetivo y su jacobiano, ambos evaluados en un par de cantidades contenidasen el vectorq.
8 Para facilitar el c digo, n tese que la funci n (1) puede escribirse m ssucintamente comof(q1; q2) =[P+ (P c1)q1P+ (P c2)q2]=[00]y su jacobiano esJ(q1; q2) =[2P +P q1 c1P +P q1P P q22P +P q2 c2]Si definimos la producci n total comoQ=q1+q2, note adem s queP = PQy queP = ( + 1)P Q5defcournot(q):P, Q=market(q)P1=-alpha*P/QP2=(-alpha-1)*P1 /Qfval=P+(P1-beta)*qfjac= (2*P1+P2*q-beta)+ ( (P1+P2*q))returnfval, fjacA continuaci n, calculamos el equilibrio usando el m todo de Newton (ecuaci n (2))para encontrar la ra z de la funci ncournot. Partimos deq0=[0:2 0:2] como nuestrovalor inicial e iteramos hasta que la norma del cambio entre dos valores sucesivos de larecursi n sea menor que10 ([ , ])foritinrange(40):f, J=cournot(q)step= (J, f)q+= (step)< :breakprice, quantity=market(q)print(f'\nCompany 1 produces {q[0]:.4f} units, while'+f'company 2 produces {q[1]:.4f} units.')print(f'Total production is {quantity:.4f} and price is {price:.4f}')Luego de solo 5 iteraciones, el m todo de Newton converge a la respuesta, la cualPython muestra en pantalla:Company 1 produces units, while company 2 produces units.
9 Totalproduction is and price is que el programa ha encontrado el equilibrio de este librer acompeconprovee la claseNLP(non-linear problem), con la cual podemosresolver el problema anterior sin necesidad de programar el algoritmo de Newton. Parautilizarla, creamos una instancia delNLPa partir de la funci ncournot, y simplementeejecutamos el m todonewton, usandoq0como punto de ([ , ])cournot_problem=NLP(cournot)q= (q0)6price, quantity=market(q)print(f'\nCompany 1 produces {q[0]:.4f} units, while'+f'company 2 produces {q[1]:.4f} units.')print(f'Total production is {quantity:.4f} and price is {price:.4f}')Al completar este bloque, Python muestra lo siguiente en pantalla:Company 1 produces units, while company 2 produces units. Totalproduction is and price is es de esperar, hemos obtenido el mismo problema que hemos resuelto se ilustra en la figura1, cuyos ejes representan losniveles de producci n de cada empresa. La l nea blanca cuasi-vertical representa el nivelque maximiza las ganancias de la empresa 1, tomando como dada la producci n dela empresa 2.
10 De manera similar, la l nea blanca cuasi-horizontal representa el nivelque maximiza las ganancias de la empresa 2, dada la producci n de la empresa 1. Lasoluci n del problema corresponde a la intersecci n de estas dos l neas. Observe adem sla trayectoria de convergencia (l nea azul) desde el punto inicialq0=[0:2 0:2] hasta lasoluci ( , , n)q2= ( , , n)z= ([cournot(q)[0]forqingridmake(q1, q2).T]).Tsteps_options={'marker':'o','co lor': ( , ,.81),'linewidth' ,'markersize':9,'markerfacecolor':'white ','markeredgecolor':'red'}contour_option s={'levels': [ ],'colors':'white','linewidths' }Q1, Q2= (q1, q2)Z0= (z[0], (n,n), order='F')Z1= (z[1], (n,n), order='F')7methods=['newton','broyden'] ['maxit','maxsteps','all_x']=10,0,Trueqm in, qmax= , (method='newton') ("Convergence of Newton's method",'$q_1$','$q_2$',[qmin, qmax], [qmin, qmax]) (Q1, Q2, Z0,**contour_options) (Q1, Q2, Z1,**contour_options) (* ,**steps_options) ( , qmax,'$\pi_1 = 0$','left','top') (qmax, ,'$\pi_2 = 0$','right','center') 02= 0 Convergence of Newton's methodFigura 1:Convergencia hacia la ra z del sistema8 Ejemplo 2: Resolviendo un oligopolio de Cournot v acolocaci nPara ilustrar la implementaci n del m todo de colocaci n para problemas de funci nimpl cita, considere el caso del oligopolio de Cournot.