Modelos Mixtos

¿Por qué no funcionan las intervenciones buenistas?

El otro día, en mi entrada sobre la estadística en las ciencias blandengues, me cité el ensayo Nothing Scales del que extraje el parrafito

But trying to analyze this is very rare, which is a disaster for social science research. Good empirical social science almost always focuses on estimating a causal relationship: what is β in Y = α + βX + ϵ? But these relationships are all over the place: there is no underlying β to be estimated! Let’s ignore nonlinearity for a second, and say we are happy with the best linear approximation to the underlying function. The right answer here still potentially differs for every person, and at every point in time.* Your estimate is just some weighted average of a bunch of unit-specific βs, even if you avoid randomized experiments and run some other causal inference approach on the entire population.

Estadística en las ciencias blandas

Voy a comenzar con una simulación inofensiva,

set.seed(1)
n <- 10000
sigma <- .1
x <- runif(n)
# coeficientes:
indep <- -1
b_0 <- .5
# variable objetivo:
error <- rnorm(n, 0, sigma)
y_0 <- indep + x * b_0 + error
# modelo:
modelo_0 <- lm(y_0 ~ x)
summary(modelo_0)

que da como resultado

Call:
lm(formula = y_0 ~ x)

Residuals:
     Min       1Q   Median       3Q      Max
-0.42844 -0.06697 -0.00133  0.06640  0.37449

Coefficients:
             Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.001951   0.001967  -509.5   <2e-16 ***
x            0.500706   0.003398   147.3   <2e-16 ***

Residual standard error: 0.0989 on 9998 degrees of freedom
Multiple R-squared:  0.6847,	Adjusted R-squared:  0.6846
F-statistic: 2.171e+04 on 1 and 9998 DF,  p-value: < 2.2e-16

Me he limitado a construir el típico conjunto de datos que cumple las condiciones de libro para poder aplicar la regresión lineal y he reconstruido los parámetros originales a través del resultado de esta: el término independiente (-1), la pendiente (.5), la desviación estándar del error (.1), etc.

Codificación de categóricas: de (1 | A) a (B | A)

La notación y la justificación de (1 | A) está aquí, una vieja entrada que no estoy seguro de que no tenga que retocar para que no me gruña el ministerio de la verdad.

Esta entrada lo es solo para anunciar que en uno de nuestros proyectos y a resultas de una idea de Luz Frías, vamos a implementar una versión mucho más parecida al lo que podría representar el término (B | A), que es, casi seguro, chorrocientasmil veces mejor.

Regresión tradicional vs multinivel

Ayer se leía en Twitter que

Cabe preguntarse qué pasa si se analizan los mismos datos usando ambas técnicas. Obviamente, hay muchos tipos de datos y supongo que los resultados variarán según qué variante se utilice. Aquí voy a centrarme en unos donde hay medidas repetidas de un factor aleatorio. También voy a situarme en un contexto académico, en el que interesan más las estimaciones de los efectos fijos, que en uno más próximo a mi mundo, la consultoría, donde son más relevantes las estimaciones regularizadas de los efectos aleatorios.

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).

Los modelos mixtos en Python son un bien público pero quienes debieran proveerlo están a otra cosa

Los modelos mixtos en Python son un bien público.

El sector privado no produce suficientes bienes públicos (con excepciones tan notables como las búsquedas en Google o las páginas aún sin paywall de los periódicos). El sector público y los impuestos que lo financian argumenta la conveniencia de su propia existencia en términos de esa provisión de bienes públicos que dizque realiza.

Pero ese subsector del sector público que debería implementar los modelos mixtos en Python se dedica a otra cosa. A cosas como estas.

Incertidumbre en ránkings (o cómo la varianza es la mayor enemiga de la meritocracia)

Tengo por ahí leído y encolado el artículo League Tables and Their Limitations: Statistical Issues in Comparisons of Institutional Performance del perínclito Spiegelhalter que toma una serie de ránkings (de colegios, de hospitales) y trata de medir cuánto tienen de sustancia y cuánto de ruido.

Hace cosas muy similares a las que escribí aquí. Mi entrada, además, cuenta con la ventaja (que lo será solo para algunos) de usar la sintaxis y código de lme4 en lugar de la nomenclatura que más odio para describir los modelos mixtos utilizados.

Sr. Python, muchas gracias por su candidatura; ya le llamaremos cuando... tenga modelos mixtos

Era casi todavía el siglo XX cuando yo, desesperado por hacer cosas que consideraba normales y que SAS no me permitía, pregunté a un profesor por algo como C pero para estadística. Y el profesor me contó que conocía a alguien que conocía a alguien que conocía a alguien que usaba una cosa nueva que se llamaba R y que podía servirme.

Fue amor a primera vista, pero esa es otra historia. La relevante aquí es que volví a hablar con aquel profesor para agradecerle el consejo y, de paso, le pregunté que por qué no lo usaba él. Me contestó que porque en R no había modelos mixtos (aunque nlme es anterior, del 99; ¡a saber en qué estado se encontraba entonces!).

Prioris informativas: un ejemplo

Imagina que tienes que generar (reitero: generar) datos compatibles con el siguiente modelo:

  • Tienes n sujetos a los que se proporciona un remedio para dormir en distintas dosis (conocidas) en distintos días.
  • El número adicional de horas que duerme cada sujeto es lineal con una pendiente que depende de la dosis (una serie de dosis fijas).
  • Esa recta tiene un término independiente (el número de horas que duerme el sujeto con una dosis igual a cero del remedio).

Argumento que para generar los términos independientes usarías algo así como una normal de media igual a 8 horas. Seguro que usarías alguna otra distribución razonable para las pendientes (p.e., que prohibiese que con dosis pequeñas se durmiese, p.e., 80 horas).

gam/bam admiten efectos aleatorios

R

gam/bam admiten efectos aleatorios

gam/bam admiten efectos aleatorios

gam/bam admiten efectos aleatorios

gam/bam admiten efectos aleatorios

gam/bam admiten efectos aleatorios

gam/bam admiten efectos aleatorios

gam/bam admiten efectos aleatorios

Y solo me enteré anoche (gracias a José Luis Cañadas).

(Para más detalles, esto o esto).

Encuestas electorales: medios y sesgos (II)

Aquí quedó pendiente hablar de datos y métodos. Los primeros proceden de El Mundo. Solicité a Marta Ley, una coautora, los datos pero, antes de que contestase que sí (¡gracias!), me di cuenta de que podía obtenerlos solito: basta con capturar la llamada que el javascript local hace al servidor.

¿Métodos? Mejorables: se suaviza la intención de voto (con loess) y se estima la diferencia con un modelo de efectos mixtos, i.e.,

modelo<- lmer(delta ~ 1 + (1 | medio),
    data = misdatos)

¿Caveats? Veo dos: el primero, que loess suaviza teniendo en cuenta también observaciones futuras. Los autores de las encuestas no ven la verdad: solo los resultados de las encuestas previas. Debería haber usado como referencia la mejor predicción basada en observaciones pasadas. El segundo, que los porcentajes de los distintos partidos suman un total. Los sesgos no son independientes y yo los modelo como tales.

Modelos mixtos para preprocesar datos en un sistema de recomendación de drogas

Sí, de drogas de las que mantienen despierto al lumpenazgo. Porque he encontrado (aquí) un conjunto datos muy interesante sobre la valoración que una serie de personas, unas 900, da a una serie de drogas más o menos legales que se llaman —me acabo de enterar— nootrópicos.

El gráfico

nootropics_image1a

extraído de la página enlazada más arriba resume parte de los resultados. No obstante, es sabido entre los que se dedican a los sistemas de recomendación que hay usuarios que tienden a valorar sistemáticamente por encima de la media y otros, por debajo. En los manuales de la cosa suelen recogerse mecanismos más o menos sofisticados para mitigar ese efecto y normalizar las valoraciones entre usuarios. Generalmente, solo exigen matemáticas de bachillerato. Y son meras aproximaciones que no tienen en cuenta circunstancias tales como que puede que un usuario da valoraciones bajas solo porque evalúa productos malos, etc.

Modelos mixtos por doquier

Los códigos postales, por ejemplo, son un problema a la hora de crear modelos predictivos: son variables categóricas con demasiados niveles. Así, por ejemplo, los bosques aleatorios de R solo admiten variables categóricas con no más de 32 niveles.

Hay trucos de todo tipo para mitigar el problema. Hace un año, Jorge Ayuso me puso sobre la pista de uno de los que tiene más recorrido. Consiste en [su versión más simplificada en]: