Las dos preguntas fundamentales de la teoría de los valores extremos

En muchos ocasiones es necesario realizar estimaciones sobre el máximo de una serie de valores aleatorios.

Uno de los casos más conocidos que me vienen a la mente es el llamado problema de los tanques alemanes. Durante la II Guerra Mundial, los aliados, para estimar el ritmo de producción de tanques del enemigo, recogían el número de serie de los que destruían o capturaban. Gracias a esta muestra potencialmente aleatoria, podían realizar estimaciones del máximo de la serie y, de ahí, del número de unidades construidas durante cierto intervalo de tiempo. Pero este es un problema trivial comparado con el de estimar el máximo nivel que puede alcanzar una riada o la carga que puede llegar a soportar un puente en los próximos cien o mil años.

¿Cómo votan los diputados?

Tras leer el otro día Visualizando la matriz de acuerdo legislativo, pensé que esta bitácora no podía quedarse atrás. Casi desisto. Pero cerrando ya casi el navegador vi que en la página de las votaciones del Congreso de los Diputados había dos enlaces aprovechables: en uno ponía XML y en el otro, “histórico”.

He aquí pues el código concomitante que fue apareciendo en mi sesión de RStudio:

library(XML)
library(reshape)
library(corrgram)
library(psych)

# descarga y manipulación de datos

dia.votacion <- function( n.votacion ){
    dir.create("tmp")
    url <- paste( "http://www.congreso.es/votaciones/OpenData?sesion=",
            n.votacion, "&completa=1&legislatura=10", sep = "" )
    download.file(url, destfile = "./tmp/votos.zip")
    try(unzip("./tmp/votos.zip", exdir = "./tmp"), TRUE)

    ficheros <- dir("./tmp", pattern = ".*xml", full.names = T )

    if ( length(ficheros ) == 0)
        return(NULL)

    res <- sapply(ficheros, function(fichero){
        datos <- xmlTreeParse(fichero)
        datos <- xmlToList(datos)$Votaciones

        if( is.null(datos) )
            return(NULL)

        datos <- as.data.frame(t(datos))
        datos <- as.data.frame(lapply( datos, unlist))
        },
        simplify = F
    )

    unlink( "./tmp", recursive = T)      # borra el directorio temporal

    res
}

res <- list()
for ( i in  1:54 ) res <- c( res, dia.votacion(i) )
# la 32, 33 está trucha
for ( i in 34:54 ) res <- c( res, dia.votacion(i) )

Con él se pueden bajar unas docenas de ficheros XML correspondientes a ciertos plenos de la X Legislatura, procesarlos mínimamente y guardarlos en la lista res. No estoy seguro de la profundidad histórica de los datos (aparentemente,solo están disponibles los del 2012, aunque la X Legislatura arrancó, creo, antes). Además, falla la descarga de los ficheros correspondientes a las sesiones 32 y 33. Ese es el motivo por el que he tenido que recurrir a for, como los gañanes, en lugar de utiliza sapply, como era mi natural inclinación.

PER y EV/EBITDA

Muchos portales financieros incluyen información sobre uno de los llamados múltiplos (asociados a empresas que cotizan en bolsa), el PER. Es fácil de calcular a partir de información pública más o menos fiable y se usa en la práctica para estimar muy grosso modo si determinadas empresas (o mercados) están o no sobrepreciadas.

El PER es el cociente entre la capitalización bursátil de una empresa (que es público y se actualiza segundo a segundo) y su beneficio, que se conoce con cierta regularidad. Tiene sus ventajas —como la señalada más arriba— y desventajas —por ejemplo, que está influido por el desempeño pasado, los beneficios de ejercicios anteriores, cuando a un inversor le interesa más el desempeño futuro—.

RDataMining, un paquete para minería de datos con R

Comparto con mis lectores la noticia que he recibido del paquete (aún en ciernes) RDataMining. El objetivo de sus promotores es construirlo colaborativamente (¡se buscan programadores!) e incluir en él algoritmos publicados que no tengan todavía implementación en R.

Existen en R muchos paquetes útiles para la minería de datos. De todos ellos, me atrevería a recomendar el paquete [caret](http://cran.r-project.org/web/packages/caret/index.html) que, más allá de integrar diversos algoritmos, incluye funciones auxiliares útiles para seleccionar modelos, comparar la importancia de funciones, realizar validaciones cruzadas, etc. utilizando una sintaxis coherente y homogénea. Que es algo a lo que los autores de las APIs de los distintos paquetes prestan poca atención, desafortunadamente.

El algoritmo PSLQ e identificación de números

El algoritmo PSLQ se usa para resolver aproximadamente ecuaciones con coeficientes enteros $a_i$ de la forma

$$ \sum_i a_i x_i = 0$$

donde, obviamente, no todos los $a_i$ son cero. Aproximadamente significa que la solución se busca dentro de un cierto nivel de tolerancia.

No existe, que yo sepa, una implementación en R. Pero sí en Python, usando librerías que permiten utilizar números de precisión arbitraria, como [mpmath](https://code.google.com/p/mpmath/). Veamos un ejemplo:

Gosset, el remuestreador de la infinita paciencia

He estado buscando estos días material relacionado con algo que se ha dado en llamar estadística moderna, que enfatiza el cálculo (asistido por ordenador) y la simulación a la hora de afrontar problemas estadísticos. La estadística clásica, por el contrario, tiende a hacer uso de hipótesis acerca de la distribución de los datos y a utilizar mecanismos más analíticos. La estadística moderna es moderna porque los ordenadores que la hicieron posible llegaron antes que la teoría subyacente a la teoría clásica.

El arte funcional: una revisión personal

Leí El arte funcional de Alberto Cairo y he aquí finalmente mi visión, muy personal, sobre el libro.

Confiesa su autor ser un curioso, excesivamente curioso en ocasiones, en las primeras páginas del libro. Yo también lo soy. Y todos los que compartan con nosotros este vicio encontrarán en el libro una pequeña joya: historia, sicología, fisiología, cartografía y muchas otras disciplinas aparentemente dispares que informan el campo de la visualización de datos se dan cita en sus 250 páginas.

"Gráficos estadísticos y mapas con R", un análisis

Me dispongo hoy a analizar el libro Gráficos estadísticos y mapas con R que anuncié hace unos días, aun sin haber tenido oportunidad de hojearlo.

Es un libro relativamente extenso, de casi cuatrocientas páginas a todo color. Y es poco perdonable que una editorial técnica como Díaz de Santos haya permitido que el código que aparece en el libro esté en Times New Roman. Pero bueno.

La estructura general del libro tiene forma de recetario: cómo hacer para construir un determinado tipo de gráfico. Se echa en falta una discusión más profunda sobre qué tipo de gráficos son más convenientes para representar ciertos tipos de datos, qué combinaciones de colores son las más adecuadas y, más en general, una serie de buenas prácticas para la representación cuantitativa de datos. Sobran por otra parte detalles demasiado prolijos sobre las distintas opciones, paletas, tipos de línea, etc. para los que el papel no es el soporte más adecuado. Un libro, que es un documento con vocación de permanencia, debería versar sobre los aspectos diacrónicos de su materia y dejar los sincrónicos a la documentación.

Periodismo, metaperiodismo y bienes públicos

El metaperiodismo es lo que hacen los periodistas cuando escriben sobre su propio trabajo. Actualmente es un género de moda. En el metaperiodismo español abundan los lamentos: que si hay EREs aquí, que si han cerrado un periódico allá, que si no queremos trabajar gratis. Los metaperiodistas anglosajones no paran de hablar de paywalls y cómo monetizar contenidos en un mundo plagado de cacharrillos electrónicos y wifis. Además, suelen escribir artículos larguísimos, con un índice de complejidad de Kolmogorov de, prácticamente, uno (es decir, un tostón).

Limpieza de cartera: tres artículos

Estoy limpiando mi cartera y antes de mandar unos cuantos legajos al archivador (o al contenedor de reciclaje) quiero dejar nota de sus contenidos para referencia mía y, quién sabe, si inspiración de otros.

El primer artículo es Tackling the Poor Assumptions of Naive Bayes Text Classifiers. Tiene esencialmente dos partes. La primera analiza críticamente el método de clasificación bayesiano ingenuo (naive Bayes) en el contexto de la minería de textos identificando una serie de deficiencias. En la segunda parte, los autores proponen una serie de modificaciones ad hoc para crear un algoritmo de clasificación mejorado.