No me ha salido, pero lo cuento igual

Creo que todos sabéis la historia de las admisiones de la Universidad de Berkeley y la paradoja de Simpson. Con palabras, muchas palabras, está contado, por ejemplo, aquí. Y si buscáis ubc admissions simpson en Google la encontraréis también en modo --verbose en muchos más sitios.

En R puede resumirse en

library(reshape2)
library(plyr)

data(UCBAdmissions)

raw <- as.data.frame(UCBAdmissions)

dat <- dcast(raw, Gender + Dept ~ <a href="http://inside-r.org/packages/cran/AdMit">Admit)

mod.0 <- glm(cbind(Admitted, Rejected) ~ Gender, data = dat, family = binomial)
mod.1 <- glm(cbind(Admitted, Rejected) ~ Gender + Dept, data = dat, family = binomial)

Echad un vistazo a los coeficientes de Gender en ambos modelos y veréis.

Huele a bicho (en plyr)

R
library(plyr)

dat <- data.frame( a = sample(c("x", "y"),    100, replace = T),
                    b = sample(c(TRUE, FALSE), 100, replace = T))

ddply(dat, .(a), summarize, b = sum(b), no.b = sum(!b))
ddply(dat, .(a), summarize, no.b = sum(!b), b = sum(b))

Huele a bicho, ¿verdad?

Rarezas: estadística algebraica

Matemáticas y estadística son peras y manzanas. La una es la ciencia del ser; la otra, del parecer. Se encuentran en la teoría de la probabilidad, pero se miran de reojo y con recelo. Por eso este curso de estadística algebraica es toda una rareza.

Contiene resultados, como la proposición 1.1.2 que… bueno, sí, bien, vale:

Proposición 1.1.2. Las variables aleatorias [discretas] X e Y son independientes sí y solo sí la matriz $latex p = (p{ij})$ tiene rango 1._

evtree: árboles globales

Tengo por delante otro proyecto que tiene mucho de análisis exploratorio de datos. Sospecho que más de un árbol construiré. Los árboles son como la Wikipedia: prácticamente nunca el último pero casi siempre el primer recurso.

Esta vez, además, por entretenerme un poco, probaré el paquete [evtree](http://cran.r-project.org/web/packages/evtree/index.html). Aunque no porque espere sorprendentes mejoras con respecto a los tradicionales, ctree y rpart.

¿Qué tiene aquél que los diferencie de los otros dos? Que la optimización es global. Tanto ctree como rpart utilizan algoritmos recursivos: al definir un nuevo corte del espacio, el algoritmo solo tiene en cuenta la región definida por los cortes anteriores. La optimización es local. evtree utiliza un algoritmo global de la familia de los evolucionarios (¡qué tufillo a lentorro!). Los detalles están aquí.

Tres libros más, una biblioteca menos

Todos los años tengo el vicio de comprar algún libro. Aprovecho mi viaje a Zaragoza para dejarme caer por mis librerías favoritas (o las que quedan de ellas) y llevarme algo a casa.

Este año he sido perezoso. En lugar de acudir a la Librería General, he dado un paseo por libgen.org. He descargado tres libros que tenía en mi lista de pendientes:

Creo que puedo recomendarlos todos, aunque no he terminado ninguno.

Juegos justos con monedas truchas

—¿Cara (H) o cruz (T)?

—Sí.

Lo siento, ese era otro chiste. Comienzo de nuevo.

—¿Cara (H) o cruz (T)?

—No me fío porque tu moneda es trucha. Salen más H (o T) que T (o H, tanto da).

—Aun así podemos plantear un juego justo.

—¿Cómo?

—Cada uno elige HT o TH. (i) Se tira la moneda dos veces. Si sale HH o TT, GOTO (i). Si sale otra cosa, gana quien haya elegido tal combinación.

La curtosis de una variable aleatoria constante

Una mañana de hace veinte $latex \pm \epsilon$ años sufrí mi primera hora de clase de estadística reglada. No la olvidaré: fue un monográfico sobre momentos muestrales de todo orden; los sumatorios se salían por ambos márgenes de las transparencias de acetato. Horrible.

Sin embargo, aquel día perdí la ocasión de levantar la mano y preguntar por la curtosis de una variable aleatoria constante. Porque necesito un valor razonable por defecto y no se me ocurre ninguno. ¿Cero acaso? ¿Alguna sugerencia?

Publicada una nueva versión de rPython-win

R

Acabo de subir a Github una nueva versión de rPython-win, que soluciona uno de mis bugs históricos: ha pasado tanto tiempo en estado “pendiente” que casi le cojo cariño. Tiene (o tenía) que ver con particularidades no documentadas de las APIs para C de Python en distintas versiones de Windows y creo que no afecta al paquete en otras plataformas.

Y aprovechando que el Pisuerga pasa por Valladolid, un enlace: Calling Python from R with rPython.

El problema de la estimación inversa

Supongamos que tenemos unos niños de los que sabemos las edades $latex x_i$ y las alturas $latex y_i$. Supongamos además que podemos estimar las segundas en función de las primeras con un modelo lineal clásico

$$ y_i \sim N(a_0 + a_1 x_1, \sigma).$$

Este modelo nos permite, dada una edad, estimar la altura y los correspondientes intervalos de confianza. Pero, dada una altura, ¿qué nos dice de la edad? Este es el problema conocido como de la estimación inversa.