Análisis estadístico de formas y perfiles

Siempre me intrigó cómo podía realizarse el análisis estadístico de cosas que no son tablas. Por ejemplo, formas. Nótese que tales medidas deberían presentar invariancias frente a rotaciones, dilataciones, simetrías, etc. Quien alimente también semejantes dudas podrá saciarlas (parcialmente, claro) aquí y aquí, donde, entre otras cosas, se enseña cómo extraer variables de toda la vida que resumen ese tipo de perfiles a través de, por ejemplo, aplicaciones muy particulares de la transformada de Fourier. ...

14 de julio de 2016 · Carlos J. Gil Bellosta

Rápido y frugal: una digresión en la dirección inhabitual

Siempre (aténganse los puristas al contexto) recomiendo comenzar con un árbol de decisión para, sobre esa base, ensayar métodos más potentes. Sobre todo si la precisión conviene más que la interpretabilidad. En la dirección opuesta se sitúan los árboles rápidos y frugales. Un árbol rápido y frugal es un tipo de árbol de decisión tal como La restricción que satisface (a diferencia de los árboles de decisión más habituales) es que: ...

13 de julio de 2016 · Carlos J. Gil Bellosta

Dos nuevos tutoriales sobre data.table y dplyr

Los productos de Apple, aun admitiendo su calidad, resuelven problemas que yo hace años que no tenía. Tanto data.table como dplyr vinieron a resolver problemas a los que muchos nos enfrentábamos con sudor y lágrimas. Ha aparecido recientemente una serie de tutoriales sobre ambos paquetes que recomiendo: El de data.table El de dplyr (parte I, parte II) Y mis comentarios: Para el 99% de mis problemas de manipulación de datos, me sobra con, además de R base, reshape2 y plyr. Para datos más grandes, me decanto por data.table. En gran medida, porque es previo a dplyr. No obstante, tengo la sensación de que dplyr acabará llevándose el gato al agua: tengo suficientes años como para haber presenciado sin que me las cuenten batallas anteriores: Beta vs VHS, WordPerfect vs Word, etc.

12 de julio de 2016 · Carlos J. Gil Bellosta

k-medias es como las elecciones; k-vecinos, como los cumpleaños

El otro día asistí a la enésima confusión sobre k-medias y k-vecinos. Que lo es, más en general, sobre el clústering contra modelos locales de la clase que sean, desde k-vecinos hasta el filtrado colaborativo. Veamos si esta comparación que traigo hoy a mis páginas contribuye a erradicar dicha confusión. k-medias es como las elecciones. Hace poco tuvimos unas en España. Alguien decidió (aproximadamente) que k = 4 y nos pidió, a nosotros, punticos del espacio, identificar el centroide más próximo a nosotros para que lo votásemos. Pues eso, la misma frustración que muchos dizque sintieron teniendo que elegir entre partidos/centroides subjetivamente igual de alejados de los intereses de uno es la que sienten nuestros punticos cuando los procrusteamos para asociarlos al totum revolutum de los clientes estrella, etc. ...

11 de julio de 2016 · Carlos J. Gil Bellosta

Una estupenda introducción intermedia a data.table

Jan Gorecki ha resumido las soluciones a las cincuenta preguntas más populares sobre el paquete data.table de R en Stack Overflow y las ha resumido en forma de tutorial aquí. Muy recomendable. Muy recomendable también data.table. Aunque me temo que el hadleyverse, y por razones que nada tienen que ver con la calidad de la cosa, no van a dejar de él, a medio plazo, ni las raspas.

8 de julio de 2016 · Carlos J. Gil Bellosta

R I/O (o rio)

rio es otro de esos desasosegantes paquetes de R. rio contiene esencialmente tres funciones, import, que lo lee todo export, que lo escribe todo y convert, que transforma un fichero de un formato a otro. Según su documentación, uno puede hacer cosas como export(mtcars, "mtcars.csv") export(mtcars, "mtcars.rds") export(mtcars, "mtcars.sav") para guardar mtcars en cualquiera de los formatos indicados por la extensión y luego x <- import("mtcars.csv") y <- import("mtcars.rds") z <- import("mtcars.sav") para importarlos sin complicaciones de separadores, encabezamientos, etc. Además, ya puestos, ...

7 de julio de 2016 · Carlos J. Gil Bellosta

GLMs con prioris (casi) a voluntad

Esto que cuento hoy puede ser muy útil: cómo mejorar los GLMs mediante la introducción de prioris (casi) a voluntad sobre los coeficientes. Usando el paquete arm de R, claro. De momento y porque aún tengo sucios los datos sobre los que me gustaría aplicar el modelo, extraeré un ejemplo de la ayuda de la función principal del paquete, bayesglm. Primero, preparo unos datos: n <- 100 x1 <- rnorm (n) x2 <- rbinom (n, 1, .5) b0 <- 1 b1 <- 1.5 b2 <- 2 y <- rbinom (n, 1, invlogit(b0+b1*x1+b2*x2)) Comenzamos con un glm de toda la vida. ...

6 de julio de 2016 · Carlos J. Gil Bellosta

Este NO es el mapa de la violencia de género en España

A pesar de que el titular bajo el que aparece dice lo contrario, no es el mapa de la conocida como violencia de género en España. Tasas del 10-20% significarían que en mi entorno tendrían que existir bastantes casos cuando, al contrario, no me consta ninguno. En el cuerpo de la noticia se lee que las tasas no son por cien sino por diez mil (si es que no son por cien mil: puestos a hacer bailar los ceros, ¿quién sabe?). ...

5 de julio de 2016 · Carlos J. Gil Bellosta

Gestión de la mendacidad encuestoelectoral: los números

Continuando con la entrada anterior, ahora, números. Primero, el planteamiento (cuatro partidos, etc.): probs <- c(4, 3, 2, 1) probs <- probs / sum(probs) partidos <- letters[1:length(probs)] Nos hará falta más adelante library(plyr) library(rstan) library(ggplot2) library(reshape2) Sigo con el proceso de muestreo. Reitero: cada encuestador enseña al encuestado una tarjeta al azar donde aparece el nombre de dos partidos y le pregunta si ha votado (o piensa votar) a alguno de ellos. n <- 3000 resultados <- data.frame( tarjeta = sample(1:nrow(tarjetas), n, replace = T), partido = sample(partidos, n, prob = probs, replace = T)) resultados <- data.frame( tarjetas[resultados$tarjeta,], partido = resultados$partido) resultados$coincide <- resultados$partido == resultados$partido1 | resultados$partido == resultados$partido2 # proporciones reales en la muestra props.muestra <- table(resultados$partido) / nrow(resultados) # resultados agregados (por tarjeta) resultados.agg <- ddply( resultados, .(partido1, partido2), summarize, total = length(partido1), coincidencias = sum(coincide)) Y ...

4 de julio de 2016 · Carlos J. Gil Bellosta

Gestión de la mendacidad encuestoelectoral

Lo de que la gente que miente al ser encuestada se ha esgrimido frecuentemente en los últimos días. Inspirado en esto, se me ha ocurrido (posiblemente reocurrido: es fácil que la idea sea conocida, sobre todo si resulta ser buena) el siguiente procedimiento para la realización de encuestas electorales. El encuestador va provisto de una colección de cartulinas en las que aparecen parejas de nombres de partidos políticos. El encuestador muestra al encuestado una cartulina al azar dentro de su colección. El encuestador pregunta al encuestado si ha votado (o piensa votar) a alguno de ellos. Se registran los partidos mostrados y la respuesta, positiva o negativa, del encuestado. Con una versión del procedimiento que describo en la entrada que enlazo más arriba, se podrían redescubrir las opciones de la población subyacente, aun ignorando el de cada uno de los encuestados. No sé cuál sería (si no se me adelanta nadie, igual la hago yo) el procedimiento, pero seguro que no es tan complicado como para que Stan no pueda con ello. ...

30 de junio de 2016 · Carlos J. Gil Bellosta