viernes, 20 de julio de 2012

LyX y R para Windows en un disco extraíble

Una vez creado el conjunto de programas para escribir documentos LaTeX y documentos dinámicos con LaTeX y R para Windows en un disco extraíble, el siguiente paso ha sido sencillo.

El archivo LyX_y_R-2.15.1.zip (20 de julio de 2012) contiene los siguientes programas:

  • USBTeX-1.7
    • MikTeX 2.9
    • Texmaker 3.4 (actualizado)
    • SumatraPDF 2.1.1 (actualizado)
  •  LyX 2.0.4
  •  R-2.15.1
  • RStudio 0.96.316
¡Atención! Si alguno de estos programas está ya instalado en el propio ordenador, pueden haber conflictos.

En primer lugar hay que bajar dicho archivo y descomprimirlo, conservando todas las carpetas por defecto, en una unidad extraíble, ya sea USB o disco.

Después hay que leer atentamente el archivo LeemePrimero.txt que advierte sobre algunas configuraciones de inicio.
En esencia las advertencias son las mismas que en el caso de la instalación de LaTeX y R para Windows.

LyX

Para ejecutar LyX hay que hacerlo con el archivo "LyX.bat".
En principio no hay que ajustar ningún parámetro, pero si fuera necesario lo haremos en

Herramientas > Preferencias > Rutas (por ejemplo)

Si modificamos alguna ruta (path) debemos reconfigurar LyX con

Herramientas > Reconfigurar

y salir y volver a entrar en LyX.

Con LyX podemos tratar documentos noweb (Sweave o knitr).
Simplemente hay que cargar el módulo apropiado:

Documento > Configuración > Módulos

¡Atención! La clase de documento debe ser article o book o...
En ningún caso "article (noweb)" que es obsoleta.


Si nos falta algún paquete, se instalará automáticamente.
Si por algún motivo fallara la instalación, siempre podemos hacerlo nosotros:
  1. Ejecutar "X:\LyX_y_R-2.15.1\MiKTeX.bat" (cambiar X por la letra de la unidad)
  2. Click con el botón derecho sobre el icono de MiKTeX que aparece en la barra de Windows a la derecha y seleccionar "MikTeX Package Manager".
  3. Ponemos el nombre en la celda "Name" y apretamos el botón "+" de instalación.


Enlaces

LyX y Sweave
USBTeX: un entorno LaTeX portátil
Texmaker
Sumatra PDF
RStudio portable
Sweave manual
knitr


viernes, 22 de junio de 2012

Instalación de knitr, ggplot2 y tikzDevice

Estos días estoy instalando el paquete knitr en algunos ordenadores con Ubuntu 12.04 y con Windows. Voy a explicar los pequeños problemas que he tenido para que la próxima instalación sea más rápida.

Instalación de knitr en Ubuntu 12.04

En una instalación desde cero de Ubuntu es preciso (!!!) instalar algunos paquetes antes de que nos lo exija R.

sudo apt-get install libcurl4-openssl-dev libxml2-dev

Con esto no tendremos problemas para instalar los paquetes XML y RCurl de R.

Seguramente nos gustará también instalar, entre otros, el paquete gráfico ggplot2 que, a su vez, requiere otros paquetes como quantreg. Pues bien, éste último se resiste a la instalación a no ser que tengamos los siguientes paquetes de Ubuntu:

sudo apt-get install liblapack-dev libblas-dev


Bueno, pero aquí no acaba la cosa. Resulta que si el objetivo es instalar knitr en Ubuntu, veremos con algo de indignación que knitr tiene unas dependencias que no se descargan directamente del CRAN. En concreto los paquetes parser y highlight. Pues bien, si este es tu caso habrá que ir a buscarlos directamente:

http://cran.r-project.org/web/packages/parser/index.html
http://cran.r-project.org/web/packages/highlight/index.html

e instalarlos en una terminal con R CMD INSTALL ...


Instalación de tikz en MikTeX para Windows

Si queremos utilizar los gráficos tikz con el paquete tikzDevice de R, necesitaremos algunos paquetes de LaTeX. En concreto son pgf y preview. Sin embargo, esos paquetes no vienen en la instalación de MikTeX para Windows por defecto y hay que instalarlos manualmente con el MikTeX Package Manager.

domingo, 10 de junio de 2012

LaTeX y R para Windows en un disco extraíble

Con motivo de las III Jornadas de Enseñanza y Aprendizaje de la Estadística y la Investigación Operativa que organiza el GENAEIO (Grupo de trabajo de la SEIO) los días 28 y 29 de junio en Pamplona, me han invitado a impartir un taller de R que se titula:

La interacción entre LaTeX y R: utilización de Sweave y knitr

Como se trata de un taller y no una aséptica conferencia, necesitamos algún manual, material de ejemplos y, en especial, los programas y paquetes mencionados.
El aula de informática donde se impartirá el taller consta de ordenadores con sistema operativo Windows, aunque es posible que los participantes traigan su propio portátil. Parece que la instalación en el aula de los programas y, sobre todo, que funcionen conjuntamente es un problema importante en tiempos de exámenes, de forma que hemos decidido crear una instalación que funcione desde un disco extraíble.

El archivo LaTeX_y_R-2.15.1.zip (20 de julio de 2012) contiene los siguientes programas:

  • USBTeX-1.7
    • MikTeX 2.9
    • Texmaker 3.4 (actualizado)
    • SumatraPDF 2.1.1 (actualizado)
  •  R-2.15.1
  • RStudio 0.96.316
¡Atención! Si alguno de estos programas está ya instalado en el propio ordenador, pueden haber conflictos.

En primer lugar hay que bajar dicho archivo y descomprimirlo, conservando todas las carpetas por defecto, en una unidad extraíble, ya sea USB o disco.

Después hay que leer atentamente el archivo LeemePrimero.txt que advierte sobre algunas configuraciones de inicio.
En esencia las advertencias son las siguientes:

RStudio

Para ejecutar RStudio hay que hacerlo con el archivo "RStudio.bat".
Es posible que en la primera ejecución nos pida, mediante una ventana emergente, dónde se encuentra el camino al programa R. Elegiremos

Choose a specific version of R:

y buscaremos o escribiremos

X:\LaTeX_y_R-2.15.1\R-2.15.1

donde X es la letra de la unidad extraíble.

Si falta algún paquete de R se puede instalar desde RStudio.


Texmaker

Para ejecutar Texmaker también hay que hacerlo con su correspondiente "Texmaker.bat".
Para que funcione la instrucción "R Sweave" primero hay que configurarla. En el menú Opciones -> Configurar Texmaker -> Comandos hay que buscar la última instrucción y escribir

X:/LaTeX_y_R-2.15.1/R-2.15.1/bin/R.exe CMD Sweave %.Rnw

donde X es la letra de la unidad extraible. ¡Ojo con las barras!



Sweave.sty

Si al compilar un documento aparece el error:

LaTeX Error: File "Sweave.sty" not found.

haremos lo siguiente:
  1. Ejecutar "X:\LaTeX_y_R-2.15.1\MiKTeX.bat" (cambiar X por la letra de la unidad)
  2. Click con el botón derecho sobre el icono de MiKTeX que aparece en la barra de Windows a la derecha y seleccionar "MikTeX Options".
  3. Ir a la pestaña "Roots" y modificar el path. Normalmente es suficiente cambiar la letra de la unidad.

Paquetes de TeX

Si nos falta algún paquete, se instalará automáticamente.
Si por algún motivo fallara la instalación, siempre podemos hacerlo nosotros:
  1. Ejecutar "X:\LaTeX_y_R-2.15.1\MiKTeX.bat" (cambiar X por la letra de la unidad)
  2. Click con el botón derecho sobre el icono de MiKTeX que aparece en la barra de Windows a la derecha y seleccionar "MikTeX Package Manager".
  3. Ponemos el nombre en la celda "Name" y apretamos el botón "+" de instalación.


Enlaces

USBTeX: un entorno LaTeX portátil
Texmaker
Sumatra PDF
RStudio portable
Sweave manual
knitr

martes, 8 de mayo de 2012

knitr: Un paquete avanzado para la edición de informes dinámicos

El paquete knitr de Yihui Xie se ha diseñado para superar algunos problemas de Sweave y avanzar en la edición de informes dinámicos con R.

Una fórmula del propio autor resume el conjunto de aplicaciones incluidas en el paquete:

knitr ≈ Sweave + cacheSweave + pgfSweave + weaver + R2HTML::RweaveHTML + highlight::HighlightWeaveLatex + 0.2 * brew + 0.1 * SweaveListingUtils + more

Las ventajas sobre Sweave son múltiples. En primer lugar y lo más evidente es el coloreado del código, pero también la habilidad para formatear el código automáticamente.
Este paquete incluye el soporte para varios dispositivos gráficos, entre ellos el tikzDevice que traduce el gráfico a código LaTeX y, por lo tanto, escribir fórmulas en LaTeX dentro del gráfico en la misma fuente que el texto.
Entre otras opciones, se permite controlar el tamaño de los gráficos o incluir dos gráficos de diversos tipos (normal y ggplot2, por ejemplo) en la misma figura.
El paquete knitr recoge lo mejor de otros paquetes que ya utilizaban el almacenamiento en caché para los objectos, de forma que se evitan cálculos repetidos innecesarios con el consiguiente ahorro de tiempo, incluso con los gráficos.

Además, los viejos archivos .Rnw de Sweave se pueden reciclar fácilmente.
Lo mejor es ver los ejemplos que incluye el propio manual y juzgar entonces sus muchas ventajas.

Para los que no saben LaTeX o no necesitan documentos que incluyan muchas fórmulas, el paquete knitr y la nueva versión 0.96 de RStudio (hoy todavía en desarrollo) incluyen la edición de documentos Markdown.
Un documento Markdown no es más que un documento de texto plano que incluye algunas marcas para darle formato y convertirlo fácilmente a otro formato como HTML.
En esta nueva versión de RStudio ya podremos crear archivos con formato Markdown y extensión .Rmd. Un botón MD en la barra de herramientas mostrará una guía rápida para aprender a escribir en este formato en 3 minutos.
El formato Markdown permite escribir títulos con # y listas con el guión -, de manera que es fácil de escribir y de recordar, al mismo tiempo que es legible.
Con el paquete knitr podemos intercalar código R y cuando pulsemos el botón Knit HTML obtendremos un documento HTML con el texto y los resultados. ¿No es fantástico? Una forma sencilla de redactar informes dinámicos.



Enlaces:

knitr: http://yihui.name/knitr/

Markdown + knitr + RStudio

Uso del formato Markdown para escribir páginas web

jueves, 8 de marzo de 2012

El mapa de Barcelona

Hace ya días que tenía ganas de publicar este mapa. En realidad desde que vi el mapa de Berlín o esta infografía del New York Times o los mapas de Oscar Perpiñán Lamigueiro.

Bueno, pues sin intentar ser tan espectacular, ya que no tengo los conocimientos suficientes, vamos a explicar de forma sencilla cómo se puede utilizar el mapa de Barcelona o de cualquier otra ciudad, región o estado.

En primer lugar debemos obtener el mapa propiamente dicho. En el caso de Barcelona nos vamos al Geoportalbcn del Ayuntamiento de Barcelona y concretamente a la pestaña de descargas. Allí nos podemos descargar varios archivos en diferentes formatos. A nosotros nos interesan los archivos de las Divisiones administrativas en formato SHP (ESRI shapefile). Estas divisiones administrativas son de diversos tipos: distritos, barrios, secciones censales,... Para trabajar con pocos datos tomaremos como unidades los 10 distritos. De modo que descomprimimos el archivo y nos preparamos para su lectura en R con la carga de algunos paquetes.

library(sp)
library(rgdal)
library(classInt)
library(RColorBrewer)

setwd("~/R/DIVADM_SHP")
ogrInfo(".", "BCN_Districte_SHP")

Para utilizar el paquete rgdal es preciso disponer de los programas adecuados que en linux se instalan con la siguiente instrucción:

$ sudo apt-get install libgdal1-dev libproj-dev

Las siguientes instrucciones leen el mapa y nos informan de su contenido:

ogrInfo(".", "BCN_Districte_SHP")
map.bcn <- readOGR(".",layer="BCN_Districte_SHP")
names(map.bcn)

En particular, los nombres de los distritos no son correctos seguramente por problemas de codificación, luego hay que arreglarlo:

map.bcn$NDistric <- c("Ciutat Vella","Eixample",
"Sants-Montjuïc",

"Les Corts", "Sarrià-Sant Gervasi", "Gràcia",
"Horta-Guinardó", "Nou Barris", "Sant Andreu",
"Sant Martí")

Ahora necesitamos una variable con los datos que queremos representar: demográficos, políticos,...
En este caso vamos a utilizar la proporción de mujeres en cada distrito ya que son datos incluidos en el propio archivo que hemos leído, pero que conste que podemos utilizar cualquier vector de datos, tantos como unidades territoriales.

plot_var <-
map.bcn@data[, "Dones"]/(map.bcn@data[,"Dones"]+map.bcn@data[,"Homes"])


A continuación preparamos los intervalos y los colores:

cuts <- 8
plot_pal <- brewer.pal(cuts, "Purples")
plot_intvl <- classIntervals(plot_var, cuts, style="pretty")
plot_colors <- findColours(plot_intvl, plot_pal)

y ya podemos dibujar el mapa:

plot(map.bcn, col=plot_colors, border="black")
title("Percentatge de dones a Barcelona")
text(map.bcn$Coord_X,map.bcn$Coord_Y,map.bcn$NDistric)

Finalmente podemos añadir la leyenda:

plot_lbls <- paste(round(100*plot_intvl$brks, 0), "%", sep="")[seq(2, length(plot_intvl$brks)-1)]
plot_lbls <- c(
paste("menys del", head(plot_lbls[1],1)),
paste(head(plot_lbls,-1), "-", tail(plot_lbls,-1)),
paste("més del", tail(plot_lbls,1))
)
legend("bottomright",
legend=plot_lbls, fill=attr(plot_colors, "palette"),
bty="n", border=attr(plot_colors, "palette"), cex=0.9
)


Referencias

http://www.nceas.ucsb.edu/scicomp/usecases/ReadWriteESRIShapeFiles


Maps with R de Oscar Perpiñán

domingo, 12 de febrero de 2012

Una animación con R



La idea es sencilla. Se trata de componer un vídeo mediante la unión de imágenes como en una película de dibujos animados.
En este ejemplo, vamos a utilizar el parámetro de amplitud h de una función coseno

f(t) = h*cos(omega(t-rho))

con omega=1 y rho=0 fijos.

En primer lugar fijamos los parámetros y hacemos un gráfico preliminar:

h <- 1
rho <- 0
omega <- 1

x <- seq(-1.5*pi+0.5, 2*pi+0.5, length=250)
y <- h*cos(omega*(x-rho))
plot(x, y, type="l", ylim=c(-1.5,1.5))
abline(h=0, v=0, col="grey75")



Ahora vamos a crear una secuencia de imágenes variando el parámetro h entre los valores 1 y 1.5 primero, después bajándolo hasta 0.5 y luego subiéndolo otra vez hasta 1.
Para un vídeo de 8 segundos necesitamos al menos 8*25=200 imágenes.

hnew <- c(seq(1, 1.5, by=0.01),
seq(1.48, 0.5, by=-0.01),
seq(0.52, 1, by=0.01))

También debemos crear una carpeta donde guardaremos todas las imágenes separadas del resto de documentos. La carpeta debe existir realmente para que la podamos utilizar.

# imagesDir <- "C:/Mis documentos/R/video"
imagesDir <- "/home/francesc/R/video"

A continuación abrimos el dispositivo para crear múltiples imágenes en formato PNG, dentro de la carpeta escogida y con una numeración de tres dígitos correlativa.

png(file.path(imagesDir, "Rplot%03d.png"))

Ahora ya podemos generar las imágenes con un for.

for (i in 1:length(hnew)){
plot(x, y, type="l", ylim=c(-1.5,1.5),
main=expression(f(t)==h*cos(omega*t-omega*rho)), lwd=2)
abline(h=0, v=0, col="grey75")
h <- hnew[i]
lines(x, h*cos(omega*(x-rho)), col=2)
lines(c(0,0),c(0,h), col=2, lwd=2)
lines(c(-0.05,0.05),c(h,h), col=2, lwd=2)
lines(c(-0.05,0.05),c(0,0), col=2, lwd=2)
lines(c(0,1.8), c(h/2,0.85), col=2, lwd=2)
text(1.9,0.87, paste("h=", round(h,2), sep=""), adj=0, col=2)
text(1.9,1.1, "Changing the amplitude:", font=2, adj=0, col=2)
}
dev.off()

La última instrucción cierra el dispositivo png.
El último paso es crear el vídeo con algún programa específico. Una opción es ImageMagick que se puede ejecutar desde la consola con la instrucción:

convert /home/francesc/R/video/*.png video.mpeg

En este caso no ha funcionado (otras veces sí) y he utilizado el programa OpenShot que permite crear vídeos con la importación de una secuencia de imágenes con el mismo nombre que nosotros le hemos dado: Rplot%03d.png.

¿Os animáis a crear vuestros vídeos?

miércoles, 8 de febrero de 2012

Sweave desde un editor de texto


En algún otro artículo ya he resaltado la importancia de utilizar Sweave para mezclar código de R con texto y producir informes automáticos con resultados estadísticos y gráficos dinámicos. Sweave se puede utilizar desde LibreOffice, no sin ciertas dificultades, con el paquete odfWeave, pero sin duda los mejores resultados se obtienen con el texto en formato LaTeX.

Supongamos que tenemos una buena instalación de R y de algún programa de LaTeX para nuestro sistema operativo. Entonces se puede ejecutar Sweave desde la consola de R o incluso desde una GUI como RStudio, pero es mucho mejor ejecutarlo desde el propio editor de LaTeX que seguramente es donde hemos escrito el documento .Rnw que queremos compilar. Este es el objetivo: ejecutar Sweave sobre el documento que estamos editando sin salir del editor.

Sweave en un sistema Windows

Supongamos que utilizamos Texmaker con la distribución MikTeX de LaTeX, aunque el procedimiento es similar si utilizamos otro editor y otra distribución de LaTeX.
Sweave viene con la distribución estándar de R y se puede ejecutar desde su consola, pero yo prefiero compilar el documento directamente desde el editor. Para ello necesitamos un archivo llamado Sweave.bat que se puede obtener en el CRAN dentro del archivo batchfiles_x.x-x.zip. Para instalar el archivo Sweave.bat debemos dejarlo en alguna carpeta que sea accesible en nuestro PATH o añadir dicha carpeta al PATH.
Ahora ya deberíamos ser capaces de ejecutar este .bat desde la consola, sólo necesitamos indicarle al editor donde encontrarlo.
Abrimos Texmaker y seleccionamos Opciones -> Configurar Texmaker e incluir la orden:

Sweave.bat --pdf %.Rnw

en alguna de las categorías, por ejemplo como Montaje rápido.

Un detalle importante: en Windows hay una dificultad añadida ya que necesitamos que LaTeX sea capaz de hallar el archivo Sweave.sty. Para ello debemos añadir el siguiente path

C:\Archivos de programa\R\R-x.x.x\share\texmf

en las MikTeX Options: Roots como se indica en esa página.

Sweave en un sistema Mac OS X

Los pasos para poner a punto un ordenador Mac OS X son incluso más sencillos que los explicados para un ordenador con Windows. Necesitamos el script Sweave.sh que hallaremos en el CRAN.
Para instalarlo, debemos copiarlo en

/usr/local/bin

y, dentro del programa Terminal, escribimos

sudo chmod +x /usr/local/bin/Sweave.sh

para hacerlo ejecutable.

Ahora ya podemos ejecutar este script desde la consola. Sin embargo, para que podamos ejecutarlo desde TEXshop, sólo hay que indicarle a TEXShop donde hallar dicho Sweave.sh.
Abrimos TEXShop y buscamos TEXShop→Preferences. Hacemos click en la pestaña Misc y escribimos

/usr/local/bin/Sweave.sh −ld

en el campo LaTeX Progam Personal Script.

Sweave en un sistema Linux

Para poner a punto un ordenador con Linux, el procedimiento es también muy sencillo, aunque los detalles pueden variar ligeramente dependiendo de la distribución y el editor utilizados. El ejemplo que explicaré se basa en Kubuntu Linux y el editor es Kile.
Para ejecutar Sweave desde el editor necesitamos el script Sweave.sh que podemos hallar en el CRAN. Luego instalaremos ese script en

/usr/local/bin

entonces abrimos la Konsole y escribimos

sudo chmod +x /usr/local/bin/Sweave.sh

para hacerlo ejecutable.
El siguiente paso es indicarle a Kile donde hallar este script. Abrimos Kile y hacemos click en Settings→Configure Kile. Nos vamos a Tools→Build y añadiremos una nueva herramienta que podemos llamar Sweave. En la ventana superior escribiremos la orden Sweave.sh y

−ld '%source'

en la de abajo.
Recordemos que el archivo Sweave.sty debe ser accesible.

Más información en el artículo:
http://www.scribd.com/doc/6451985/Learning-to-Sweave-in-APA-Style