jueves, 26 de noviembre de 2015

Usando el paquete "animation". Inflación en Venezuela. 1830-2014

Segundo gráfico

Añadiendo algunos detalles adicionales al código básico que hicimos en la entrada anterior, podemos obtener un gráfico que se adapte mejor a los objetivos pedagógicos que tenemos en mente en un momento dado. Hemos añadido la presidencia y hemos colocado en azul los valores de la inflación por debajo del promedio en el lapso analizado (7,5%), y en rojo los valores iguales o superiores a ese valor promedio:



Obviamente se pueden añadir/eliminar elementos. Queríamos destacar la utilidad del paquete y lo relativamente fácil que es usarla.

Si lo que deseamos es un gráfico de líneas:



Usando el paquete "animation" de R

En la planificación, y en general en cualquier disciplina, es útil ilustrar algún procedimiento paso a paso, para facilitar la comprensión de lo que se expone. En planificación, a menudo es importante simular la posible evolución de un sistema. Existen numerosos softwares propietarios para realizar estos procedimientos. Sin embargo, en los últimos años, los desarrolladores de opciones libres y opensources nos han puesto al alcance de la mano numerosas alternativas para llevar a cabo esta tarea. Este es el caso de R. Existen numerosos paquetes con una variadas de biblioteca de funciones para realizar animaciones. Uno de estos paquetes es animation.
Vamos a ofrecer nuestros primeros pasos usando el paquete. Simplemente animaremos la evolución de la tasa de inflación en Venezuela, calculada a partir del Indice de Precios al Consumidor, desde 1831 hasta 2014.

Obtención de la data

La data para nuestra gráfica la obtuvimos de la página web del economista José Huerta . Nos quedamos sólo con los valores relacionados con el IPC. Los datos están hasta 2013. Tomamos la cifra de la inflación del 2014 ofrecida por el Banco Central. Finalmente subimos la información a la consola de R.

Primera animación

Empezamos con una idea simple:


plot(x, y, main="Venezuela. Inflacion 1831-2013", type='n', xlim=c(1831, 2013), xlabs='Años', ylabs='tasa')
abline(h=c(0, 30), col=c('red', 'darkred')

# crear una serie de imagenes en png para obtener posteriormente la película. # este es el codigo basico al que haremos modificaciones posteriores en algunas lineas


x = head(inflacion$anio)
y = head(inflacion$tasa)
n = length(x)


for(i in 1:n){
        frame = 100 + i
        filename <- paste("prueba", frame, ".png", sep="")
        png(file=filename, width=550, height=550)
        plot(x, y, xlim=c(1831,1836), type='n')
        points(x[i], y[i])
        dev.off()
        
}

im.convert("prueba*.png", output = "p.gif")


El resultado:
El gráfico no es satisfactorio. Sólo me incluye un sólo punto. Me interesa que los valores se mantengan para poder tener un patrón claro de la tendencia en el comportamiento de la inflación, en estos casi 200 años. Ello implica modificar la x[i] e y[i]. Aquí estoy pidiendo que se visualice cada valor, uno a uno. Pero no estoy pidiendo que se mantengan los anteriores. Esto lo puedo remediar de la siguiente forma:


points(x[1:i], y[1:i])



Introduciendo esta modificación al código anterior obtenemos:

El resultado nos gusta más. Sin embargo, sería bueno incluir una suerte de contardor que nos muestre cada año en la medida en que los valores se muestran en el gráfico. Esto lo podemos lograr incluyendo la función title(), después de establecer los puntos (debemos entonces eliminar el título principal en el gráfico base). Podemos eliminar también el eje x:




title(main=as.character(i+1830))



Hemos querido colocar en el subtítulo los valores de la tasa año a año. el procedimiento es similar que para el caso del título principal. No obstante, no parece buena idea. Intentemos mejor llevar al título principal ambos valores:




 title(main=paste(as.character(i+1830),":", y[i]),
                     cex.main = 3, col.main="darkred")



A esta animación le podemos agregar algunas cosas: por ejemplo controles para pausarla o para detenerla. Podemos agregar información sobre los presidentes en los diferentes periodos e incluso podemos enfatizar algunos eventos cercanos a periodos de inflación negativa, o los momentos en los que la inflación, en forma sostenida pasó algunos valores. Finalmente, esos distintos hitos podrían señalarse coloreando los puntos de diversas formas.

Hemos usado un formato gif, pero el paquete animation nos permite generar otros formatos: html, swift, y películas