"Arte gráfico" con R

El otro día di con un blog dedicado al arte matemático y en particular con esta entrada sobre cómo crear figuras mediante rotación de segmentos: El código (en matlab) estaba disponible y lo traduje a R: graphic.art <- function( foo, n = 200, init = -1, end = 1, breaks = 20 ){ x <- seq( init, end, by = 1 / breaks ) base <- matrix( c( x, foo( x ) ), ncol = 2 ) rotate <- function(a,m) m %*% matrix(c(cos(a), -sin(a), sin(a), cos(a)), 2) my.lines <- sapply( 2 * pi * ( 1:n ) / n, rotate, base, simplify = F ) limits <- data.frame(do.call(rbind, my.lines)) limits <- data.frame(lapply(limits, range)) plot(limits, type = "n") lapply(my.lines, function(x) lines(x, col = sample(colours(), 1))) } Unos querrán probar diversas opciones: graphic.art(sin) graphic.art(exp) graphic.art(tan) A otros tal vez les interese comparar el código en R con el original en matlab para evaluar pros y contras.

29 de agosto de 2011 · Carlos J. Gil Bellosta

Comparación de variables aleatorias de Poisson

El otro día apareció publicado en Significance una comparación entre el número de tarjetas recibidas por las selecciones inglesas de fútbol masculina y femenina. Los hombres habían recibido 196 tarjetas en los 48 partidos disputados en el periodo de referencia y las mujeres, 40 en 24 partidos. El promedio de tarjetas, por lo tanto, de 4.1 y 1.7 respectivamente. Y la pregunta es: ¿hay motivos razonables para pensar que las mujeres juegan menos sucio? ...

21 de agosto de 2011 · Carlos J. Gil Bellosta

Una feliz conjunción estadístico-algebraica (y II)

Abandonamos el otro día nuestra discusión sobre la feliz conjunción estadístico-algebraica que subyace a esa técnica conocida como análisis de correspondencias en el punto en que habíamos descompuesto la matriz $B$ de la forma $B = PDQ^\prime$, donde $P$ y $Q$ son matrices cuyas columnas son vectores ortonormales $p_i$ y $q_j$ y $D$ es una matriz diagonal (aunque no necesariamente cuadrada) cuyos elementos de la diagonal (en orden decreciente) son $\lambda_k$. ...

16 de agosto de 2011 · Carlos J. Gil Bellosta

Una feliz conjunción estadístico-algebraica

Tomemos una tabla de contingencia, p.e., library(MASS) a <- as.matrix(caith) # fair red medium dark black # blue 326 38 241 110 3 # light 688 116 584 188 4 # medium 343 84 909 412 26 # dark 98 48 403 681 85 que se refiere a los habitantes de una población de Escocia clasificados según el color de los ojos y el pelo. ¿Habrá una relación entre ambas variables? ...

12 de agosto de 2011 · Carlos J. Gil Bellosta

Don't be loopy!

Don’t be loopy! es el título de una presentación realizada en el SAS Global Forum de 2007. Tiene que ver con el motivo que me hizo en mi día abandonar SAS y buscar —entonces aún no lo conocía— el cobijo de R: sus limitaciones para todo lo que tiene que ver con simulaciones, remuestreos, jackknifes, _bootstraps _y similares. El artículo muestra lo que debería ser el estado del arte para realizar este tipo de programas con SAS. En el primero de los problemas que estudia, que denomina bootstrap simple, muestrea 1.000 veces un conjunto de datos de 50.000 observaciones y calcula el valor de la curtosis para cada una de ellas. Finalmente, proporciona un intervalo de confianza para dicho valor. ...

11 de agosto de 2011 · Carlos J. Gil Bellosta

SVD de matrices enormes con R

Supongo que mis lectores habrán leído acerca del Netflix Prize. En el vídeo de este viernes se ilustra cómo se puede usar R para implementar la parte más intensiva computacionalmente de la solución ganadora utilizando el paquete irlba, la descomposición de la matriz de datos en sus componentes singulares (más propiamente, obtener algunas de ellas).

5 de agosto de 2011 · Carlos J. Gil Bellosta

Desarrollo de paquetes con R (IV): funciones genéricas

La función plot es genérica. Uno puede aplicársela a un data.frame o a un objeto de la clase lm. Y en el fondo, plotsolo elige cuál de sus métodos, es decir, las funciones que realizan el trabajo verdaderamente, aplicar. Para ver cuáles son los métodos asociados a plot basta con ejecutar en R methods(plot) La salida es autoexplicativa. Podemos hacer un pequeño experimento creando una función genérica, foo, bastante tonta: foo <- function( x ) UseMethod( "foo", x ) foo.data.frame <- function( x ) plot( x ) foo.integer <- function( x ) sum( x ) foo.default <- function( x ) print( "Bu!" ) foo( iris ) foo( 1:7 ) foo( "hola" ) También es posible crear nuevos métodos para funciones genéricas existentes. Por ejemplo, ...

4 de agosto de 2011 · Carlos J. Gil Bellosta

Los siete pecados capitales de la minería de datos

Por ser viernes, traigo a estas páginas un vídeo tan pedagógico como ameno. Es la conferencia de Dick De Veaux dentro la M2010 Data Mining Conference auspiciada por SAS. El autor repasa los siete pecados capitales de la minería de datos, a saber No realizar las preguntas adecuadas No entender el problema correctamente No prestar suficiente atención a la preparación de los datos Ignorar lo que no está ahí Enamorarse de los modelos Trabajar en solitario Usar datos malos Frente a ellas, propone las siguientes virtudes: ...

29 de julio de 2011 · Carlos J. Gil Bellosta

El paquete pxR, en CRAN

El 1 de junio escribí en la lista de ayuda de R en español para ver si alguien se animaba a colaborar en la creación de un paquete de R para importar datos en formato PC-Axis. Este formato es usado por gran número de institutos estadísticos, entre ellos el INE español, para difundir y publicar datos en formato electrónico. Existe una herramienta gratuita pero cerrada para analizar este tipo de datos, pero clamaba al cielo que los usuarios de R no contásemos con una manera de importarlos directamente. Además, lo necesitaba para un pequeño proyecto (del que hablaré próximamente). ...

28 de julio de 2011 · Carlos J. Gil Bellosta

Diagramas de puntos (dotplots)

Aunque los diagramas de puntos fueron introducidos por Cleveland en los años ochenta, a pesar de sus ventajas, no gozan de la popularidad de otros métodos de representación gráfica. Leí hace poco un artículo de Naomi Robbins en el que se proponían los gráficos de puntos como alternativa a los de barras. Encuentra en aquellos tres ventajas: Una representación más limpia y con menos tinta inútil. Permite resolver el problema de la representación de varias observaciones por sujeto más elegantemente que yuxtaponiendo barras, como ilustra el gráfico que aparece debajo. Y una tercera que encuentro más dudosa: que resuelven el problema de los diagramas de barras truncados: el no representar el trazo que une el origen con los valores representados —dice la autora—, el efecto perceptualmente distorsionador de truncar la gráfica no es tan acusado. Aunque yo mantengo mis reservas al respecto. ...

27 de julio de 2011 · Carlos J. Gil Bellosta