Modelos, mascotas y rebaños en el DataBeers de Madrid

El próximo día 18 de septiembre hablaré de modelos, mascotas y rebaños en el DataBeers de Madrid. Los detalles (incluido el enlace para registrarse) están disponibles aquí. Haréis mal en faltar porque, con la excepción de un servidor, el resto del cartel es de primera: Pedro Concejero: Decide Fran Castillo: Big data needs artist explorers Carlos Herrera: La Geografía de las Redes Sociales Urbanas

10 de septiembre de 2014 · Carlos J. Gil Bellosta

Factorización de enteros con grid

Vi esto y me dije: yo también quiero. Así que dicho y hecho: Por si acaso, cada diagrama representa la descomposición en números primos de un número del 1 al 100. El código (que no he adecentado lo que suelo) es un pequeño ejercicio con el paquete grid y unos elementos de recursividad (como en Grid, Scala y arbolitos fractales): library(grid) library(gmp) plot.factors <- function(n, new.plot = TRUE){ if(new.plot) grid.newpage() divisors <- sort(as.integer(factorize(n)), decreasing = T) foo <- function(divs){ if(length(divs) == 0){ grid.circle(x = 0.5, y = 0.5, r = 0.5, gp=gpar(fill="black")) return() } n <- divs[1] x <- (Re(exp( 2 * pi *(1:n) * 1i /n))) / 4 + 0.5 y <- (Im(exp( 2 * pi *(1:n) * 1i /n))) / 4 + 0.5 for(i in 1:n){ tmp <- viewport(x = x[i], y = y[i], w = 2/(3 + n), h = 2/(3 + n)) pushViewport(tmp) #grid.rect(gp = gpar(col = "grey")) foo(divs[-1]) popViewport() } } foo(divisors) } plot.factors(25) grid.newpage() nrow <- 10 ncol <- 10 for(y in 1:nrow){ for(x in 1:ncol){ tmp <- viewport(x = x / (1 + ncol), y = 1 - y / (1 + nrow), w = 1/(1 + ncol), h = 1/(1+ncol)) pushViewport(tmp) #grid.rect(gp = gpar(col = "grey")) plot.factors(x + y * ncol - ncol, new.plot = FALSE) popViewport() } }

9 de septiembre de 2014 · Carlos J. Gil Bellosta

Tres citas para los amantes del análisis de datos públicos

En estos días van a celebrarse tres eventos (de los que tengo noticia) relacionados con el análisis de datos. El primero es la Segunda Edición del Taller de Periodismo de Datos, en Madrid. Extraigo de su convocatoria lo siguiente: Durante dos fines de semana largos (octubre 24-26 y diciembre 12-14) desarrollaremos proyectos para seguir la traza del dinero público con la ayuda de expertos tales como Ben Welsh (Los Angeles Times), Mariano Zafra (El País), Juan Elosúa (España en Llamas) y el equipo de periodismo de datos de El Confidencial. ...

8 de septiembre de 2014 · Carlos J. Gil Bellosta

Mascotas y rebaños

Muchos cuidamos de nuestro ordenador casi como una mascota: le ponemos un nombre (a menudo escribo desde tiramisu), le hacemos algo de mantenimiento, etc. Hay quienes, incluso, decoran sus máquinas con pegatinas. Pero llega un momento en que hay que comenzar a tratar a las máquinas no tanto como mascotas sino como rebaños. Desde una pantalla aneja a esta en la que escribo estoy manejando un clúster de más de 200 GB y 50 núcleos distribuido en varias máquinas que ni sé dónde están. Además, solo espero que crezca. Ya no cuido de una mascota; cuido de un rebaño. ...

15 de agosto de 2014 · Carlos J. Gil Bellosta

(Mis) procesos puntuales con glm

Lo que escribí hace un par de días sobre procesos puntuales, ahora me doy cuenta, podía haberse resuelto con nuestro viejo amigo glm. Ejecuto el código del otro día y obtengo (para un caso nuevo) mu alfa verosimilitud delta 1 0.4493158 0.50000000 340.6141 1 2 0.2675349 0.40457418 307.3939 2 3 0.1894562 0.28917407 293.4696 3 4 0.1495654 0.22237707 287.0784 4 5 0.1243791 0.18079703 281.3900 5 6 0.1142837 0.14913172 284.9227 6 7 0.1217504 0.12150745 288.5448 7 8 0.1214365 0.10424818 289.3282 8 9 0.1204605 0.09148817 290.9081 9 10 0.1315896 0.07857330 295.3935 10</code> que significa que el parámetro óptimo es delta = 5, mu = 0.124 y alfa = 0.18. Ahora hago cuantos.previos <- function(i, muestra, delta){ indices <- Filter(function(x) x < i & x > i - delta, 1:n) cuantos <- sum(muestra[indices]) } fit.glm <- function(delta){ prev <- sapply(1:length(muestra), cuantos.previos, muestra, delta) dat <- data.frame(muestra = muestra, prev = prev) res.glm <- glm(muestra ~ prev, data = dat, family = poisson(link = "identity")) c(delta, res.glm$coefficients, summary(res.glm)$aic) } res.glm <- sapply(1:10, fit.glm) res.glm <- as.data.frame(t(res.glm)) colnames(res.glm) <- c("delta", "mu", "alfa", "aic") y obtengo ...

13 de agosto de 2014 · Carlos J. Gil Bellosta

¿Tienen sentido las tasas municipales de desempleo?

Sigo los artículos de periodismo de datos de El Confidencial. Los recomiendo, de hecho. Es bueno que alguien se encargue de divulgar noticias que tienen que ver con números. Y ahora llega el pero. Una parte —y sus autores la consideran importante porque la elevan al titular— de lo que se discute en Nueve de cada diez municipios tienen más paro ahora que antes de comenzar la crisis es amarillismo numérico. Que quiero pensar que involuntario. El nivel municipal, y más habida cuenta del micromunicipalismo español, es demasiado fino para capturar algo que no sea ruido. ...

12 de agosto de 2014 · Carlos J. Gil Bellosta

Procesos puntuales: una primera aproximación

Tengo una serie de datos que se parecen a lo que cierta gente llama procesos puntuales y que se parecen a los que se introducen (muuuuy prolijamente) aquí. Gráficamente, tienen este aspecto: Sobre un determinado periodo de tiempo (eje horizontal) suceden eventos y los cuento por fecha. Pero no suceden independientemente (como si generados por un proceso de Poisson) sino que tienden a agruparse: el que suceda un evento tiende a incrementar la probabilidad de que suceda otro poco después. El proceso, en una mala traducción, se autoexcita. ...

11 de agosto de 2014 · Carlos J. Gil Bellosta

Procesos de Poisson no homogéneos: la historia de un fracaso

Partamos el tiempo en, p.e., días y contemos una serie de eventos que suceden en ellos. Es posible que esos recuentos se distribuyan según un proceso de Poisson de parámetro $\lambda$, que es un valor que regula la intensidad. Si los días son homogéneos, i.e., no hay variaciones de intensidad diaria, estimar $\lambda$ (por máxima verosimilitud), es tan fácil como calcular la media de los sucesos por día. Pero puede suceder que la intensidad varíe en el tiempo (p.e., se reduzca los fines de semana). O que fluctúe de cualquier manera. O que haya periodos de gran intensidad y otros de calma. Es decir, que el proceso no sea homogéneo y que $\lambda$ varíe en el tiempo. ...

8 de agosto de 2014 · Carlos J. Gil Bellosta

La historia de la estadística comienza...

[…] con algo llamado aritmética política en el siglo XVII […] El resto (son apenas ocho hojas), tenéis que leerlo (porque os intriga, ¿verdad?) aquí.

7 de agosto de 2014 · Carlos J. Gil Bellosta

Naive Bayes como red bayesiana

Una red bayesiana es algo de lo que ya hablé (y que me está volviendo a interesar mucho últimamente). En esencia, es un modelo probabilístico construido sobre un grafo dirigido acíclico. Que, a su vez, es algo parecido a que es un grafo (obviamente), dirigido (tiene flechas) y acíclico porque siguiéndolas no se llega nunca al punto de partida. Se puede construir modelos probabilísticos sobre ellos. Basta con definir para cada nodo $x$ la probabilidad condicional $P(x|A(x))$, donde $A(x)$ son sus padres directos. Con estas probabilidades condicionales (y un poco de esfuerzo) se puede construir la función de probabilidad completa, $P(x_1, \dots, x_n)$. ...

6 de agosto de 2014 · Carlos J. Gil Bellosta