Documentar como el culo, no pensar en el usuario final, ser incapaz de ponerte en su situación, etc.

De vez en cuando pruebo paquetes promisorios. No es infrecuente que cosas que he intentado hace años, algún ejemplo más o menos sencillo que he publicado aquí, acabe convirtiéndose en la piedra angular de algo facturable. Incluso de algo facturable por mí. geozoning podía haber sido uno de esos. La promesa del paquete es que puede ayudarte a segmentar regiones del espacio de acuerdo con alguna variable, una especie de clústering para información de tipo espacial. ...

28 de febrero de 2018 · Carlos J. Gil Bellosta

Con tiempo: encuentro de usuarios de R de Latinoamérica en enero de 2019

Pues sí, acabo de enterarme de que se organiza la tal cosa. Toda la información, escasa de momento, aquí.

23 de febrero de 2018 · Carlos J. Gil Bellosta

mgm (no la de las pelis sino la de los modelos gráficos)

Cayeron en mis manos unos datos que no puedo publicar, pero me atreveré a presentar algunos resultados anonimizados. Se trata de una tabla de puntuaciones numéricas (18 en total, cada una en su columna) proporcionadas por unos cuantos centenares de sujetos (filas). Era de interés un estudio cualitativo de las posibles relaciones de dependencia entre las variables. La manera más rápida de comenzar, un heatmap(cor(dat)), para obtener Y luego PCA y todas esas cosas. ...

25 de enero de 2018 · Carlos J. Gil Bellosta

Mortalidad en carretera (contada de una manera distinta)

Con motivo de fin de año se ha hablado de fallecidos en accidentes de tráfico como por ejemplo en El Mundo o en El País. Y sí, parece que el número observado de muertos ha aumentado. Lo cual es mucho menos relevante de lo que se da a entender. Si tiras una moneda al aire 100 veces y sacas 48 caras y luego repites el experimento, podrías sacar 53 (y habría aumentado el número observado de caras) o 45 (y habría disminuido). Lo relevante es si ha cambiado o no la probabilidad de cara de la moneda. De lo cual, y volviendo al caso de la siniestralidad, ya me ocupé en su día. ...

9 de enero de 2018 · Carlos J. Gil Bellosta

La distribución de Poisson y la estabilización de la varianza

Imagínate que quieres estabilizar la varianza (¡para qué!) de una distribución de Poisson. Los libros viejunos te dirán que saques la raíz cuadrada de tus valores. Si en lugar de mirar en libros viejunos prestas atención a tus propios ojos, harás algo parecido a: lambdas <- -10:10 lambdas <- 2^lambdas res <- sapply(lambdas, function(lambda) sd(sqrt(rpois(1e5, lambda)))) para obtener y averiguar dónde funciona y dónde no. Si usas la transformación $f(x) = x^{2/3}$, como recomiendan en cierto artículo que no viene a cuento identificar, harás ...

15 de diciembre de 2017 · Carlos J. Gil Bellosta

p-curvas

Primero, una simulación: n <- 100 delta <- 0.2 n.iter <- 10000 p_valores <- function(n, delta){ tmp <- replicate(n.iter, { x <- rnorm(n) y <- rnorm(n, mean = delta) t.test(x, y)$p.value }) res <- tmp[tmp < 0.05] hist(res, freq = FALSE, xlab = "p value", ylab = "", col = "gray", main = "histograma de p-valores publicables") res } null_effect_p_values <- p_valores(n, 0) some_effect_p_values <- p_valores(n, delta) Lo que simula son n.iter experimentos en los que se comparan n valores N(0,1) con otros n valores N(delta, 1) y se extrae el correspondiente p-valor. Luego se grafican los publicables (<0.05). Cuando diff es 0, sucede: No hay diferencia entre x e y, i.e., no hay efecto real. Los p-valores tienen una distribución uniforme en [0,1] y, por tanto, también en [0, 0.05]. Así que la p-curva tiene una forma característica, aproximadamente como ...

12 de diciembre de 2017 · Carlos J. Gil Bellosta

Cuidado con los $

El otro día tropecé con el siguiente artefacto: a <- list(aa = 12, bb = 14) is.null(a$a) #[1] FALSE a$a #[1] 12 No es un bug de R, porque la documentación reza: x$name is equivalent to x[[“name”, exact = FALSE]] Y se pueden contrastar: a[["a", exact = FALSE]] a[["a", exact = TRUE]] Comentarios: Odio muchísimo los bugs que no son bugs porque están documentados en la nota ‡2.a.(c), párrafo §23.3 de la sección 14 de un manual oscuro. Odio mucho a los gilipollas que se complacen en mandarte a leer manuales. Odio mucho las violaciones del principio de mínima sorpresa. Soy consciente de que R es, fundamentalmente, una plataforma de análisis interactivo y no (o solo subsidiariamente) un lenguaje de programación. Soy consciente de que muchos de los defaults de R se decidieron antes de que se popularizasen los completadores de comandos.

11 de diciembre de 2017 · Carlos J. Gil Bellosta

La magnitud de la sequía

Cuando tienes una serie temporal al uso (sin entrar a definir qué es eso), uno puede aplicar descomposiciones tmabién al uso, como stl, para extraer tendencia y estacionalidad, de la forma como en esta entrada previa. Lluvia. La serie de la lluvia es otra cosa. Uno ve si llueve o no llueve (típicamente no). Lo que uno no ve es la probabilidad, que varía a lo largo del año, de que llueva. Pasa lo mismo con monedas (uno ve caras o cruces, no la probabilidad de cara), clientes que compran (uno ve si compra o no, no la probabilidad de compra), etc. Pero la probabilidad existe y en estimarla consiste frecuentemente el trabajo de algunos. ...

4 de diciembre de 2017 · Carlos J. Gil Bellosta

dbf · xlsx · pdf

Me escriben pidiendo consejo sobre cómo leer datos contenidos en (una serie larga de) ficheros en formatos .dbf, .xlsx (con un formato extraño) y .pdf. .dbf No tengo ni curiosidad por averiguar de dónde proceden. Simplemente, library(foreign) res <-read.dbf("R0010.DBF") funciona de maravilla. .xlsx Estos sí que sé de dónde vienen (y me guardo la opinión). El problema aquí no era leer directamente tablas contenidas en hojas sino ir extrayendo celdas y rangos de hojas. Así que: ...

24 de noviembre de 2017 · Carlos J. Gil Bellosta

Arqueólogos bayesianos

Se ve que hay arqueólogos bayesianos. Un problema con el que se encuentran es que tropiezan con cacharros antiguos y quieren estimar su antigüedad. Así que prueban distintos métodos (¿químicos?), cada uno de los cuales con su precisión, y acaban recopilando una serie de estimaciones y errores. Obviamente, tienen que combinarlas de alguna manera. El modelo más simple es $$ M_i \sim N(\mu, \sigma_i)$$ donde $\mu$ es la antigüedad (desconocida) del artefacto y los $\sigma_i$ son las varianzas distintas de los distintos métodos de medida, que arrojan las estimaciones $M_i$. ...

23 de noviembre de 2017 · Carlos J. Gil Bellosta