Un modelo que alimenta una simulación

Tenemos en Circiter un proyecto sobre el que no puedo dar muchos detalles, pero que vamos a plantear (en versión muy resumida) como un modelo que alimenta una simulación. El modelo no va a ser un modelo sino un modelo por sujeto (rebaños, los llamamos aquí). Los modelos serán, casi seguro, modelos mixtos (lmer/glmer). Pero claro, si usas un modelo, por muy mixto que sea, con intención de simular, predict se queda muy corto (¡siempre da el mismo resultado!). ...

16 de septiembre de 2019 · Carlos J. Gil Bellosta

Del "Andalucía 'first'" al "La Rioja por doquier"

En este blog ya nos hemos graduado del “Andalucía first” (sí, esa reiterada manía a recordarnos que en Andalucía siempre hay más de todo lo que correlacione más o menos directamente con el número de habitantes). Aquí nos llama la atención otro efecto que afecta a los segundos momentos: el “La Rioja por doquier”. Verbigracia: Principado de Asturias (68,8%), La Rioja (35,5%) y Comunidad de Madrid (10,2%) registran los mayores aumentos anuales en el número de sociedades mercantiles creadas INE, un día cualquiera, en cualquier nota de prensa ...

13 de septiembre de 2019 · Carlos J. Gil Bellosta

¿Qué más puede colgar de un árbol?

[Abundando en ¿Qué puede colgar de un árbol?] ¡Grafos!

12 de septiembre de 2019 · Carlos J. Gil Bellosta

(g)lms con coeficientes > 0 (p.e.)

Alguien quería un glm forzando determinados coeficientes >0. Una solución 100% bayesiana no era una opción. Hay varias opciones por ahí. Pero me ha sorprendido que la opción esté disponible en glmnet::glmnet: Filosóficamente, es un tanto sorprendente: de alguna manera, glmnet es glm con prioris alrededor del cero. Los límites superiores e inferiores permiten introducir información a priori adicional no necesariamente compatible con la anterior. Desde el punto de vista de la implementación, tiene sentido que estas opciones estén disponibles. glmnet usa coordinate descent como algoritmo de minimización e introducir restricciones en ese tipo de algoritmos es una trivialidad.

21 de agosto de 2019 · Carlos J. Gil Bellosta

Más sobre factores, strings y ordenación

Esta entrada debería ser un comentario más en esta otra, pero voy a abusar del privilegio de ser dueño de la plataforma para promocionarla. Voy a decir cosas que son aproximadamente ciertas. Los detalles de la verdad de todo están en la ayuda y el código de sort y sus métodos. En R hay dos métodos de ordenación: shell y radix. El primero es genérico y el segundo es mejor cuando en el vector hay muchos elementos repetidos (p.e., ordenar el censo por provincias). ...

7 de agosto de 2019 · Carlos J. Gil Bellosta

Hagan sus apuestas; luego, corran el siguiente código

library(microbenchmark) library(ggplot2) a_int <- sample(10:99, 1e6, replace = T) a_char <- paste("P", a_int, sep = "") res <- microbenchmark( sort_int = sort(a_int), sort_char_radix = sort(a_char, method = "radix"), sort_char = sort(a_char), factor_trick = as.character(sort(as.factor(a_char))), times = 50 ) autoplot(res)

6 de agosto de 2019 · Carlos J. Gil Bellosta

dplyr parece que prefiere los factores

Con datos bajados de aquí: library(MicroDatosEs) library(dplyr) library(microbenchmark) library(ggplot2) censo <- censo2010("MicrodatosCP_NV_per_nacional_3VAR.txt") censo_char <- as.data.frame(censo[, c("CPRO", "SEXO", "ECIVIL", "FACTOR")]) censo_factor <- censo_char censo_factor$CPRO <- factor(censo_factor$CPRO) foo <- function(x) x %>% group_by(CPRO) %>% summarise(res = sum((SEXO == "Mujer") * (ECIVIL == "Divorciado") * FACTOR) / sum(FACTOR) * 100) res <- microbenchmark( char = foo(censo_char), factor = foo(censo_factor), times = 10 ) autoplot(res) Da: ¿No es sorprendente? De hecho, plyr es más rápido que dplyr en este caso si no se usan factores. Notas: El hilo de por qué es así en lugar de otra manera se pierde en código escrito en C++. Para otra vida (mía o de otro). Debo agradecer a Diego Castro el intercambio de ideas, código y perplejidades que dieron pie a todo lo de arriba.

5 de agosto de 2019 · Carlos J. Gil Bellosta

XI Jornadas de Usuarios de R

Esta entrada es un (otro, que sumar a este o este) recordatorio de que las XI Jornadas de Usuarios de R están en marcha. Y que serán en Madrid, del 14 al 16 de noviembre, etc. Información toda ella que los enlaces anteriores extienden debidamente. (Además hay una tarifa reducida cuyo plazo termina, aviso, muy, muy pronto.)

24 de julio de 2019 · Carlos J. Gil Bellosta

Cartogramas con recmap

He construido que, obviamente no es la gran maravilla, basándome en Rectangular Statistical Cartograms in R: The recmap Package y usando library(rgdal) library(pxR) library(recmap) provs <- readOGR(dsn = "provincias/", layer = "Provincias") pobl <- as.data.frame(read.px("2852.px", encoding = "latin1"), use.codes = T) pobl2 <- as.data.frame(read.px("2852.px", encoding = "latin1")) pobl$nombre <- pobl2$Provincias pobl <- pobl[, c("Provincias", "nombre", "value")] colnames(pobl) <- c("COD_PROV", "nombre", "poblacion") pobl <- pobl[pobl$COD_PROV != "null",] pobl <- pobl[!pobl$COD_PROV %in% c("51", "52", "38", "07", "35"),] dat <- merge(provs, pobl, by = "COD_PROV", all.x = FALSE) dat@data$NOM_PROV <- NULL dat$z <- dat$poblacion tmp <- as.recmap(dat) tmp$name <- dat@data$nombre tmp$ccaa <- dat@data$COD_CCAA res <- recmapGA(tmp, popSize = 300, maxiter = 30, run = 10) cartogram <- res$Cartogram ccaa <- tmp[, c("name", "ccaa")] ccaa$ccaa <- as.numeric(factor(ccaa$ccaa)) cartogram <- merge(cartogram, ccaa) plot.recmap(cartogram, col.text = "black", main = "cartograma -- población\n españa peninsular", col = cartogram$ccaa) Como los datos los he bajado de por ahí y no recuerdo dónde, dejo como referencia el objeto arriba llamado tmp aquí.

15 de julio de 2019 · Carlos J. Gil Bellosta

Nota para mí: usar flextable, usar flextable

De aquí a cuando lo tenga que usar realmente, seguro que me olvido. Así que retomo el uso original de este blog, que era el de dejarme notas a mí mismo y apunto: usa [flextable`](https://cran.r-project.org/package=flextable). ¿Y por qué?, me preguntaré a mí mismo dentro de unos días. Pues por cosas como esta: (Claro está, salvo que alguien tenga a bien proponer una alternativa mejor).

25 de junio de 2019 · Carlos J. Gil Bellosta