Gráficos

Guarjolización de fotos con R

Inspirado en esto aunque con la intención de mejorar el horrible código adjunto, escribí el otro día esto:

library("biOps")
library("cluster")

# leo una foto usando readJpeg de biOps
# el objeto devuelto es un array mxnx3 dimensional
# la última dimensión es el rgb de cada pixel

tmp <- tempfile()
download.file("http://blog.guiasenior.com/images/Retrato_Garber.jpg", tmp)
x <- readJpeg(tmp)

# si quieres mostrar la foto como un gráfico...
#plot(x)

# convertimos el array 3D nxmx3 en uno 2D (nm)x3
# luego buscamos 5 clústers
# esencialmente, buscamos 7 "píxels representativos"
d <- dim(x)
clarax <- clara(array(x, dim = c(d[1] * d[2], d[3])), 7)

# reemplazamos cada rgb de cada cluster por su
# "píxel representativo" (medioide) correspondiente
rgb.clusters <- clarax$medoids[clarax$cluster,]

# convertimos la matriz resultante en un array 3D
# (invirtiendo la transformación anterior)
# y representamos gráficamente
plot(imagedata(array(rgb.clusters, dim = d)))

Obviamente, podéis cambiar la foto y hacer variar el número de clústers. Pero conviene recordar que:

Selección de enlaces: redes sociales, gráficos con R, ofertas de trabajo y p-valores

Acá va otra selección de cuatro enlaces relevantes –que no necesariamente nuevos— de la semana. El primero, Using Metadata to find Paul Revere recoge a modo de historia, que algunos encontrarán amena, una aplicación de rudimentos del álgebra lineal al análisis de redes sociales. Dada una matriz de incidencia A (personas que pertenecen a clubes) es posible calcular índices de proximidad entre personas (o entre clubes) calculando no más AA'. El resto hasta ganar el premio de Netflix es pura heurística.

Diagramas de caja, 44 años después

Efectivamente, 44 años después de que Tukey describiese su schematic plot, los diagramas de caja no han calado en el gran público. Dado que dichos diagramas son la representación más simple que se me ocurre de una distribución de probabilidad, me temo que es síntoma de un mal mayor: que no estamos preparados para aceptar que los fenómenos no están perfectamente parametrizados y sino sujetos a errores, oscilaciones, perturbaciones, errores e imprevistos.

Tres artículos curiosos sobre gráficos

El primero es How to display data badly, de H. Wainer. Es un poco viejo, de 1984; pero, desgraciadamente, tan vigente si no más. Trata, como puede preverse, del mismo y ya algo manido tema: cómo crear gráficos que representen datos clara y eficazmente. Se agradece que el autor, no sin ironía, lo haya planteado a modo de recetario para conseguir justo lo contrario.

El segundo, Visualizing the Law: Using Charts, Diagrams, and Other Images to Improve Legal Briefs, de A. Rosman, es una lectura de evasión para quien comparta mis obsesiones y frustraciones: la vida me ha llevado a tener que leer —y peor aún, necesitar entender— párrafos de los que redactan leguleyos de toda índole y condición. ¿Es necesario que esa gente se explique así? ¿Habría otra manera? Pues la hay: el artículo en cuestión muestra mediante ejemplos cómo determinados pasajes del género legal pueden desenmarañarse trascendiendo la unidimensionalidad del texto corrido y mal empleado si se usan o, al menos, se acompañan de, los gráficos adecuados.

¿Te queda lejos el aeropuerto?

He construido el mapa

porque, a pesar de sus innegables deméritos gráficos, como la profusión de topos rojigualdas, pudiera resultar de interés. No tanto por lo que representa, la distancia de los puntos de la península Ibérica a una lista obsoleta de aeropuertos (en la que no consta, p.e., el de Logroño), sino por el procedimiento que tal vez alguien pueda en su día reaprovechar para un mejor fin.

Óscar Perpiñán sobre gráficos base vs. lattice vs ggplot2

Óscar Perpiñán es alguien a quien tenéis que conocer necesariamente si os interesan, entre otras cosas, temas como la visualización de datos espaciotemporales. Y tiene un blog muy recomendable.

Recientemente me ha dado permiso para reproducir aquí una respuesta suya en un hilo planteado en r-help-es sobre los distintos mecanismos existentes en R para generar gráficos. Lo hago a continuación con mínimos retoques tipográficos:

La ventaja esencial de los gráficos grid (lattice y ggplot2) frente a los gráficos base es su mayor flexibilidad para añadir o modificar el contenido. Un gráfico grid es un objeto más en R y, como tal, puede ser manipulado con los métodos que cada paquete define. Existen dos librerías fundamentales en el mundo grid, lattice y ggplot2.

¿Dónde van los ejes?

Buscando una versión pirata del libro Show Me the Numbers de Stephen Few di con un curso homónimo del mismo del que rescato y aprovecho para divulgar la respuesta a una pregunta que no me había planteado antes: ¿dónde van los ejes?

Y la respuesta, sin palabras:

Curso de mapas en línea para principiantes

Cuando me preguntan por Vizzuality siempre digo lo mismo: juegan en otra liga. Y no, no me han pagado jamás una cena. Solo los he seguido por las redes sociales, me los he tropezado en charlas, etc. Y se nota.

Aparte de servicios, han creado productos. Y uno de los más conocidos (y útiles) es CartoDB para la creación de mapas en línea. Tiene como motor PostGIS y Vizzuality le ha añadido capas adicionales para la representación de mapas e información sobre ellos. Hay que probarlo.

Importancia de variables en árboles

Los árboles (o árboles de inferencia condicional) valen fundamentalmente para hacerse una idea de cómo y en qué grado opera una variable en un modelo controlando por el efecto del resto. Su valor reside fundamentalmente en la interpretabilidad.

No obstante lo cual, no es infrecuente construir árboles muy grandes. Y el tamaño dificulta censar qué variables y en qué manera aparecen. Por eso me vi obligado recientemente a crear un pequeño prototipo para extraer el peso de las variables de un árbol.

Contando hexágonos en paralelo

Dicen que para realizar gráficos de dispersión con muchos datos no es desaconsejable usar celosías hexagonales. Por motivos que no vienen al caso, me interesa poder realizarlas en paralelo.

El código disponible en R (hexBinning de fMultivar o el de geom_hex de ggplot2) es feo, ininteligible y, en particular, no es paralelizable (o mapreducible). No lo es porque cada hilo, por diseño del algoritmo, crea hexágonos excéntricos.

Así que he desarrollado un algoritmo para crear celosías hexagonales paralelizable. Además, creo que es algo más inteligible que los dos mencionados y, me temo, igual de feo. Pero vectorizado, eso sí (es decir, sin un maldito bucle). Es así:

¿Dónde deberían comenzar los ejes?

Protesta eldiario.es esta imagen capturada de un informativo de TVE:

El motivo es el habitual debate sobre los ejes truncados (que, todoy hay que decirlo, usan tirios para escándalo de troyanos y, luego, troyanos para escándalo de tirios).

Propone eldiario.es y dibuja Belén Picazo este artefacto alternativo:

Y uno se pregunta: ¿así deberían hacerse las cosas? Por ejemplo, el mismo día en que TVE publicó eso (y el anterior, y el suguiente), en otro medio aparecía este otro gráfico:

Una revisita a "El arte funcional"

Hace casi precisamente un año escribí sobre El Arte Funcional, un libro muy recomendable de Alberto Cairo.

Hice una crítica sobre una de las secciones del libro:

La sección dedicada a la cognición transita desde la morfología y fisiología del ojo (y del cerebro) hasta cuestiones sicológicas relativas a la percepción. Al final, las formas y colores de los gráficos son alimento estos órganos que, aunque de una asombrosa capacidad, incurren en ocasiones en errores de bulto. El que cierto tipo de representaciones gráficas (como estas) engañen al ojo no se debe a que los datos subyacentes mientan ladinamente. Se debe a que la combinación de formas y colores confunde al cerebro por causas que solo cabe buscar dentro de él.