R

Otra sobre polígrafos, terrorismo y periodistas anuméricos

Dice el diario El País que científicos británicos desarrollan un sistema que permite saber si alguien no está diciendo la verdad analizando su rostro.

El aparato, según el artículo

[…] podría ser utilizado para cuestiones de seguridad, como, por ejemplo, en los aeropuertos para identificar a potenciales criminales o terroristas.

Añade después que

[…] el sistema será capaz de coger al 90 % de los que mienten, porcentaje similar al obtenido por el polígrafo

La ley de Benford

El otro día me preguntó una compañera el motivo por el que un proceso (de transformación de datos) se ejecutaba tan lentamente. De oficio, siempre hago lo mismo —además, lo saben: ¿para qué seguirán preguntando?—: ejecutar el proceso sólo sobre un porcentaje de los datos.

Con los que el id acababa en 123, era inmediato; con 12, también; con 1, se eternizaba. Pero con 2, 3 y 4 volvía a ser muy rápido. ¡Había muchísimos registros con id acabado en 1!

Datos patrimoniales de los senadores

David Cabo, de Pro Bono Público colgó el otro día una hoja de cálculo en Google Docs con referencias a las declaraciones del patrimonio (véase un ejemplo) a las que están ahora obligados los senadores y que cuelgan de la página de su benemérita y utilísima institución. Dado que los datos están en un formato no legible automáticamente, solicitó la colaboración de voluntarios para tabular la información.

Rápidamente logró completarse la tarea. Y ahora me he molestado en extraer una selección de los datos (quitando columnas descriptivas, etc.) para que los aficionados a R se entretengan sacándoles punta.

Visualización de la actualización bayesiana (y unas cuantas funciones de R)

Me ha llegado noticia de una entrada en un blog, Visualizing Bayesian Updating, en el que se muestra visualmente cómo se actualiza la distribución a posteriori conforme aumenta el número de ensayos en un problema bayesiano simple. Explica también los fundamentos estadísticos del asunto.

Yo me limitaré a ofrecer una nueva versión del código —que no funcionaba copiando y pegando sin más— en el que he introducido ciertas modificaciones. Es el siguiente:

Treemaps en R

Hay cierto interés por los treemaps en general y existen paquetes como treemap y la función map.market del paquete portfolio que permiten construirlos y obtener gráficos como este

que representa la capitalización bursátil de las empresas del IBEX-35 y el porcentaje que destinan al dividendo. Pero me produce cierto desasosiego utilizar áreas y colores para representar magnitudes: ¿es fácil comparar el tamaño relativo de TEF y ELE? ¿Cuánto mayor es ITX que BBVA? ¿Y el dividendo de MAP comparado con el de ACS?

Códigos de caracteres en R

R

Esta entrada acompaña y remata para los usuarios de R la que escribí en general sobre los códigos de caracteres. Es un pequeño experimento en el que comparo lo que pasa al leer un fichero de texto codificado de dos maneras distintas en dos plataformas, Linux y Windows, que usan códigos de caracteres distintos.

Primero creo dos ficheros (en Linux) con el mismo contenido pero codificados de dos maneras distintas, utf-8 y latin1:

El paquete reshape de R (I): melt

R

El paquete reshape de R consta esencialmene de dos funciones, melt y cast, muy útiles para determinado tipo de transformaciones de de datos.

La función melt se describe sucintamente con el siguiente gráfico:

Es decir, toma un data.frame y lo funde (¡dejaré de ser amigo de quien pronuncie meltea!) o, visto de otra manera, estira.

He aquí unos ejemplos:

library(reshape)
iris.m <- melt(iris)
iris.m

Nótese cómo melt es inteligente y no necesita (en muchas ocasiones) que se le especifiquen cosas evidentes. De hecho, la expresión anterior es equivalente a las siguientes:

Códigos de caracteres, unicode y UTF-8

R

Unos quebraderos de cabeza en el desarrollo del paquete pxR concernientes a los distintos códigos de caracteres en que hay que transfomar los datos me han obligado a profundizar en este enojoso asunto.

En el principio, todo era felicidad. Existía el código ASCII que establecía una correspondencia entre caracteres, números y su representación binaria. Así, a la letra b le correspondía el número 98 cuya codificación binaria es el byte 01100010.

Un paseo por cloudnumbers

R

Cloudnumbers es una empresa que ofrece servicios de computación de alto rendimiento en la nube con especial énfasis en aplicaciones que corren sobre R. Me ofrecieron una cuenta temporal y gratuita el otro día y en la entrada de hoy voy a describir mis primeros pasos en su plataforma.

Hace dos años hice, y dejé descrita, mi primera incursión en la computación con R en la nube. En dicha ocasión utilicé la plataforma EC2 de Amazon: en resumidas cuentas, Amazon alquila servidores con diversas configuraciones de software por horas a un precio muy competitivo y uno puede acceder a ellos vía ssh, instalar R, los paquetes necesarios, correr el código y descargar los resultados.

"Arte gráfico" con R

R

El otro día dí 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: