Interacciones y selección de modelos

Desafortunadamente, el concepto de interacción, muy habitual en modelización estadística, no ha penetrado la literatura del llamado ML. Esencialmente, el concepto de interacción recoge el hecho de que un fenómeno puede tener un efecto distinto en subpoblaciones distintas que se identifican por un nivel en una variable categórica. El modelo lineal clásico, $$ y \sim x_1 + x_2 + \dots$$ no tiene en cuenta las interacciones (aunque extensiones suyas, sí, por supuesto). ...

16 de marzo de 2020 · Carlos J. Gil Bellosta

Seguimiento de los nuevos casos diarios de coronavirus en «tiempo real» con R

El código usado en Coronavirus: los nuevos casos diarios se estabilizan en muchos países menos en... pic.twitter.com/XOwxyccsZG — Carlos Gil Bellosta (@gilbellosta) March 10, 2020 es library(reshape2) library(ggplot2) library(plyr) url <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv" cvirus <- read.table(url, sep = ",", header = T) cvirus$Lat <- cvirus$Long <- NULL cvirus$Province.State <- NULL cvirus <- melt(cvirus, id.vars = "Country.Region") colnames(cvirus) <- c("país", "fecha", "casos") cvirus$fecha <- as.Date(as.character(cvirus$fecha), format = "X%m.%d.%y") tmp <- cvirus[cvirus$país %in% c("Italy", "Spain", "France", "Germany", "South Korea", "UK"),] foo <- function(x){ x <- x[order(x$fecha),] data.frame(fecha = x$fecha[-1], casos = diff(x$casos)) } res <- ddply(tmp, .(país), foo) res$país <- reorder(res$país, res$casos, function(x) -max(x)) res <- res[res$fecha > as.Date("2020-02-15"),] ggplot(res, aes(x = fecha, y = casos)) + geom_point(size = 0.5) + geom_line(alpha = 0.3) + facet_wrap(~país, scales = "free_y") + ggtitle("Coronavirus: new daily cases") + theme_bw() ggsave("/tmp/new_daily_cases.png", width = 12, height = 8, units = "cm")

10 de marzo de 2020 · Carlos J. Gil Bellosta

Seguimiento del coronavirus en "tiempo real" con R

Mi código (guarrongo) para seguir la evolución del coronavirus por país en cuasi-tiempo real: library(reshape2) library(ggplot2) url <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv" cvirus <- read.table(url, sep = ",", header = T) cvirus$Lat <- cvirus$Long <- NULL cvirus$Province.State <- NULL cvirus <- melt(cvirus, id.vars = "Country.Region") colnames(cvirus) <- c("país", "fecha", "casos") cvirus <- cvirus[cvirus$país %in% c("Italy", "Spain"),] cvirus$fecha <- as.Date(as.character(cvirus$fecha), format = "X%m.%d.%y") ggplot(cvirus, aes(x = fecha, y = casos, col = país)) + geom_line() tmp <- cvirus tmp$fecha[tmp$país == "Spain"] <- tmp$fecha[tmp$país == "Spain"] - 9 ggplot(tmp, aes(x = fecha, y = casos, col = país)) + geom_line() tmp <- tmp[tmp$fecha > as.Date("2020-02-14"),] ggplot(tmp, aes(x = fecha, y = log10(casos), col = país)) + geom_line() Los datos están extraídos de aquí, por si alguien quiere reemplazar casos por defunciones o recuperados.

9 de marzo de 2020 · Carlos J. Gil Bellosta

Una R-referencia con referencias para epidemiólogos circunstanciales

Lo del coronavirus nos ha convertido a todos en epidemiólogos circunstanciales. Casi ninguno de vosotros tenéis acceso a los datos necesarios para hacer cosas por vuestra cuenta, pero sí, tal vez gracias a esta entrada, las herramientas necesarias para ello. Podéis empezar por el paquete survellance de R, que implementa muchos de los métodos más modernos para la monitorización de brotes epidémicos. En particular, puede que os interese la función bodaDelay, intitulada Bayesian Outbreak Detection in the Presence of Reporting Delays, y que implementa una serie de métodos para estimar el número real de casos cuando las notificaciones de los positivos llegan tarde. O, en plata, si dizque hay 613 confirmados oficiales, ¿cuántos podría llegar a haber realmente? ...

9 de marzo de 2020 · Carlos J. Gil Bellosta

Intervalos de confianza, intervalos de predicción

Contexto: modelo <- lm(dist ~ speed, data = cars) Intervalos de confianza: head(predict(modelo, interval = "confidence")) # fit lwr upr #1 -1.849460 -12.329543 8.630624 #2 -1.849460 -12.329543 8.630624 #3 9.947766 1.678977 18.216556 #4 9.947766 1.678977 18.216556 #5 13.880175 6.307527 21.452823 #6 17.812584 10.905120 24.720047 Intervalos de predicción: head(predict(modelo, interval = "prediction")) # fit lwr upr #1 -1.849460 -34.49984 30.80092 #2 -1.849460 -34.49984 30.80092 #3 9.947766 -22.06142 41.95696 #4 9.947766 -22.06142 41.95696 #5 13.880175 -17.95629 45.71664 #6 17.812584 -13.87225 49.49741 Creo que la diferencia (y el significado) es claro. Para todos los demás, esto.

4 de marzo de 2020 · Carlos J. Gil Bellosta

satRday... ¡en Santiago de Compostela!

Los (o ciertos) usuarios de R de Galicia están organizando una conferencia alrededor del mundo R de la mano de satRdays. Serán el sábado 12 de septiembre (de 2020) y los interesados en saber más al respecto, harán bien en visitar esta página. De todos modos, si quieres presentar una charla o taller, el plazo límite parece ser el día 15 de abril.

28 de febrero de 2020 · Carlos J. Gil Bellosta

"Algoritmos" y acatarrantes definiciones de "justicia"

Lee Justicia: los límites de la inteligencia artificial… y humana y cuando acabes, te propongo un pequeño experimento probabilístico. Por referencia, reproduzco aquí los criterios de justicia del artículo que glosa el que enlazo: Centrémonos en (B), sabiendo que, por simetría, lo que cuento se aplica también a (C). Supongamos que tenemos dos grupos, cada uno de ellos de n <- 1000000 personas para estar en las asíntotas que aman los frecuentistas. Estos grupos tienen distribuciones distintas de un factor de riesgo, ...

26 de febrero de 2020 · Carlos J. Gil Bellosta

To IRLS or not to IRLS

A veces tomas un artículo de vaya uno a saber qué disciplina, sismología, p.e., y no dejas de pensar: los métodos estadísticos que usa esta gente son de hace 50 años. Luego cabe preguntarse: ¿pasará lo mismo en estadística con respecto a otras disciplinas? Por razones que no vienen al caso, me he visto en la tesitura de tener que encontrar mínimos de funciones que podrían cuasicatalogarse como de mínimos cuadrados no lineales. Y por algún motivo, pareciere que no hubiese en el mundo un algoritmo de ajuste que no fuese IRLS. Que tiene una gran tradición en estadística; es, de hecho, la base de la optimización propuesta por Nelder y McCullagh en 1972. ...

24 de febrero de 2020 · Carlos J. Gil Bellosta

Análisis estadístico de mezclas

No es algo que ocurra habitualmente. Creo que conozco a alguien que me dijo que lo tuvo que hacer una vez. Pero podría ocurrir en algún momento que tuvieses que analizar mezclas, es decir, situaciones experimentales en las que lo importante es la proporción de ciertos ingredientes (con la restricción obvia de que dichas proporciones suman la unidad). Para más datos, Mixture Experiments in R Using mixexp, que describe el paquete de R mixexp.

19 de febrero de 2020 · Carlos J. Gil Bellosta

No sé cómo traducir "Partially additive (generalized) linear model trees"

Sin embargo, basta con mirar la foto leer la entrada de hace unos días, que se refiere a algo muy parecido (y que, en particular, describe los datos usados en el modelo que representa) y, en el peor de los casos, esto, para hacerse idea de su utilidad y relevancia.

12 de febrero de 2020 · Carlos J. Gil Bellosta