Sobre la normalización de las direcciones postales

Lo de las direcciones postales es un caos. Trabajar con ellas, una tortura. Y cualquier proyecto de ciencia de datos que las emplee se convierte en la n-ésima reinvención de la rueda: normalización y tal. Cuando todo debería ser más sencillo. Cada portal en España tiene asociado un número de policía, un identificador numérico único. Independientemente de que quienes lo habiten se refieran a él de formas variopintas, vernaculares y, en definitiva, desnormalizadas y desestandarizadas hasta pedir basta. ...

10 de febrero de 2020 · Carlos J. Gil Bellosta

model4you

Un grupo de estudiantes se examina en horas distintas con exámenes parecidos pero no iguales. Se pretende estudiar si el examen tiene algún efecto sobre la nota final y para eso se hace algo así como bmod_math <- lm(pcorrect ~ group, data = MathExam) para obtener una distribución de la nota media por grupo descrita bien cbind(estimate = coef(bmod_math), confint(bmod_math)) ## estimate 2.5% 97.5% ## (Intercept) 57.600184 55.122708 60.07766 ## group2 -2.332414 -5.698108 1.03328 o bien, gráficamente, así: ...

6 de febrero de 2020 · Carlos J. Gil Bellosta

x[] <- lapply(...)

Estos días he aprendido una expresión muy compacta para operar sobre las columnas de una tabla en R: x <- iris # por ejemplo x[] <- lapply(x, function(x) factor(x)) # o cualquier otra función Aunque lapply debería devolver (y, de hecho, devuelve) una lista, esos corchetes de x fuerzan de una manera contraintuitiva que la salida final sea una tabla. La magia es consecuencia de que [<- es una función en sí misma (puedes consultar help("[<-") si quieres) con un comportamiento que es el que es (porque sí, a veces las cosas son simplemente como son). ...

29 de enero de 2020 · Carlos J. Gil Bellosta

Siete llaves al sepulcro del método delta

El desafortunado tuit Recordatorio: el método delta (para estimar el error de funciones de variables aleatorias) https://t.co/lkfnE3I5MU — Carlos Gil Bellosta (@gilbellosta) January 20, 2020 es de lo más parecido a que me repitan unos chorizos que me ha ocurrido últimamente. Salvo que en lugar de chorizos, me repetían los años estudiando matemáticas y, por extensión, las partes más analíticas de la estadística. Con inmerecida delicadeza, se me respondió: Puff. Ya no me acordaba de esto. Últimamente siempre que quiero estimar una varianza de algo tiro por bootstrap. https://t.co/UAT4c5ZYR6 ...

22 de enero de 2020 · Carlos J. Gil Bellosta

De texto a función

Problema: convertir una expresión definida por un usuario (p.e., algo como "a+b") en una función (i.e., function(a, b) a + b). Solución: gen_foo <- function(expr){ my_args <- all.vars(parse(text = expr)) expr <- paste0("function(", paste(my_args, collapse = ","), ") ", expr) eval(parse(text = expr)) } Demostración: multiplica <- gen_foo("a * b") multiplica(5, 31)

21 de enero de 2020 · Carlos J. Gil Bellosta

Charla en el CodingClub de la UC3M este martes

Este martes 17 de diciembre hablaré durante una hora sobre (cierto tipo de) big data y modelos adecuados para modelarlos en el CodingClub de la Universidad Carlos III. El contenido de la charla, entiendo, se publicará también después en el blog del CodingClub. Los detalles (sitio, hora, etc.) están en el enlace indicado más arriba. Obviamente, agradezco a los organizadores del CodingClub por haberme invitado. Es, además, el ciclo de charlas sobre cosas relacionadas con datos más serio y mejor organizado que conozco. Y con eso, prácticamente, cierro el 2019 para casi todos los efectos. En 2020, más.

16 de diciembre de 2019 · Carlos J. Gil Bellosta

P-valores y decisiones

Los números de esta entrada son reales aunque disfrazados: proceden de un proyecto real. Para medir la efectividad de una serie de modelos que hemos creado en Circiter, hemos pedido al cliente lo de siempre: que parta la lista de sujetos en dos al azar para después poder medir los éxitos y fracasos usando dos procedimientos distintos. Pero como tenemos dudas acerca del proceso de partición —que no controlamos nosotros— hemos medido el número de éxitos y fracasos en cada uno de los grupos en una prueba previa. Esperábamos que las proporciones fuesen similares en ambos grupos y hemos obtenido esto: ...

4 de diciembre de 2019 · Carlos J. Gil Bellosta

La población envejece pero, ¿envejecen también los grupos de edad?

La pregunta es relevante porque en demografía, epidemiología y otras disciplinas entre las que no se suele contar la economía, se suele agrupar la población en grupos de edad (y/u otras variables relevantes). Son habituales los grupos de edad quinquenales y la pregunta es: ¿son homogéneos dichos grupos de edad a lo largo del tiempo? No es una pregunta baladí: ha dado lugar a noticias como Why So Many White American Men Are Dying que no, no se explican por la desesperación o por la epidemia de opioides sino por el envejecimiento relativo de los grupos de edad en cuestión. En EE.UU., claro, no en España. ...

3 de diciembre de 2019 · Carlos J. Gil Bellosta

bamlss promete regresión bayesiana flexible

Un paquete relativamente nuevo de R (las primeras versiones son de 2017) que llevo un tiempo siguiendo de reojo es bamlss. bamlss es un paquete que permite especificar y ajustar varios tipos de modelos usando en principio métodos bayesianos, aunque tampoco necesariamente. No puedo decir mucho más de él de momento. Habrá que ver cómo se comporta más allá de los ejemplos discutidos en la documentación. Muchos paquetes tienden a hacer trivial lo que antes era sencillo e imposible lo que antes difícil. Espero que no sea el caso y que acabe facilitando la divulgación de herramientas estadísticas avanzadas más allá del consabido $y \sim x_1 + x_2 + \dots$ envuelto sea en lm o en XGBoost.

19 de noviembre de 2019 · Carlos J. Gil Bellosta

tfprobability debería llamarse tfeoprobability

Porque, aunque la intención sea buena, el DSL (que ni siquiera llega a serlo) es muy, muy feo. Que en este contexto, además, quiere decir antinatural. La demostración, aquí, aquí o aquí.

12 de noviembre de 2019 · Carlos J. Gil Bellosta