Estadística

Preprocesamiento de variables categóricas con muchos niveles

No sabía por qué tenía apartado A Preprocessing Scheme for High-Cardinality Categorical Attributes in Classification and Prediction Problems en mi disco duro para ulteriores revisiones hasta que, al abrirlo, he encontrado la fórmula

que es una versión de mi favorita del mundo mundial (si te dedicas a la ciencia de datos, no la conoces y tienes principios, negocia a la baja tu sueldo: estás timando a alguien).

Todo sumamente aprovechable y recomendable.

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 la el mismo resultado!).

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

La multivarianza total de la distancia no implica causalidad

Quería ser el primero en escribirlo. Para la posteridad.

Tenemos la correlación/covarianza, con todos sus usos y abusos.

En el 2011 se habló un tiempo de esto. Luego nunca más se supo.

La de Hellinger tiene un añito y un paquete en CRAN, menos trabajo de relaciones públicas y, no obstante, el mismo éxito que la anterior.

Y este año se añade a la lista la multivarianza de la distancia que, bueno, ¿qué queréis que os diga que no sea trivialmente extrapolable de lo anterior?

Más sobre la anonimidad y reidentificación en ficheros de microdatos

Ha tenido cierta repercusión durante el verano el articulo Estimating the success of re-identifications in incomplete datasets using generative models, del que se han publicado resúmenes tales como Bastan tres datos para identificar a cualquiera en una base anónima. Cosa sobradamene conocida desde hace la tira.

De hecho, se ha publicado esta herramienta para conocer tu riesgo de ser reidentificado, caso de que vivas en EEUU o el RU.

¿Y si vives en España? Siempre puedes leer esto, de lo que ya hablé (y resumí) aquí.

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

Relevante para entender la "maldición de la dimensionalidad"

La gráfica

representa el volumen de la esfera unidad (eje vertical) en el espacio de dimensión x (eje horizontal).

Más aquí (de donde procede la gráfica anterior).

Moraleja: en dimensiones altas, hay pocos puntos alrededor de uno concreto; o, dicho de otra manera, los puntos están muy alejados entre sí. Por lo que k-vecinos y otros…

Un truco para reducir la varianza de un estimador

Tienes dos variables aleatorias positivamente correlacionadas, $latex X$ y $latex Y$ y una muestra de $latex n$ parejas de ellas $latex (x_i, y_i)$.

La esperanza de $latex X$, $latex E(X)$, es conocida y la de $latex Y$ no. Obviamente, la puedes estimar haciendo

$$ E(Y) \sim \frac{1}{n} \sum_i y_i.$$

Sin embargo, la varianza del estimador

$$ E(Y) \sim E(X) \frac{\sum y_i}{\sum x_i}$$

es menor.

Tengo una explicación de la intuición de por qué eso es cierto en lugar de no serlo. Pero como no sé si es suficientemente buena, dejo que alguien proponga la suya en los comentarios.

¿Qué demonios le ha pasado a la página de la distribución beta en la Wikipedia?

Era como

y se ha convertido en

¡Qué horror!

Coda: En otra página de la Wikipedia en la que he caído después por azar he leído la siguiente frase (que por algún motivo encuentro relevante insertar aquí):

Los ríos arrastran sedimentos que consiguen colmatar y rellenar de lodo los lagos. Además, la proliferación de ciertas plantas, como el lirio acuático, los obstruye por completo.

Sobre la peculiarísima implementación del modelo lineal en (pseudo-)scikit-learn

Si ejecutas

import numpy as np
from sklearn.linear_model import LinearRegression

n = 1000
X = np.random.rand(n, 2)

Y = np.dot(X, np.array([1, 2])) + 1 + np.random.randn(n) / 2
reg = LinearRegression().fit(X, Y)

reg.intercept_
reg.coef_

se obtiene más o menos lo esperado. Pero si añades una columna linealmente dependiente,

X = np.column_stack((X, 1 * X[:,1]))

ocurren cosas de la más calamitosa especie:

Y = np.dot(X, np.array([1, 2, 1])) + 1 + np.random.randn(n) / 2
reg = LinearRegression().fit(X, Y)
reg.coef_
# array([ 9.89633991e-01, -1.63740303e+14,  1.63740303e+14])

Comentarios:

  • Diríase que la implementación del modelo lineal en scikit-learn no es la que se estudia por doquier (la prima, la inversa, etc.); sospecho que convierte el error cuadrático en una función que depende de los coeficientes y se la pasan a un optimizador (más o menos) genérico.
  • Supongo que la implementación actual pasa todos las pruebas unitarias.
  • Y sospecho, además, que las pruebas unitarias no las ha planteado un estadístico.
  • Así que tal vez los de scikit-learn no saben que tienen problemas de colinealidad; y si alguien se lo ha comentado, igual no han comprendido el issue.
  • Para la predicción, el problema arriba apuntado no es tal. Aun con coeficientes desaforados y siempre que no haya problemas de precisión numérica, tanto da hacer las cosas como todo el mundo o implementando ocurrencias como la anterior.
  • Pero para todo lo demás (p.e., impacto de variables, etc.), la implementación es de traca y no vale para maldita de Dios la cosa.
  • Aunque a estas alturas de siglo, ¿quién en su sano juicio usa el modelo lineal básico?
  • Además, en la práctica, no hay problemas de colinealidad (ni aproximada o, mucho menos, exacta). Hummm…
  • ¿O sí? Mi colega Cañadas ha escrito una entrada en su blog sobre la codificación de variables categóricas donde denuncia cómo en Python las funciones más habituales crean por defecto columnas linealmente dependientes por defecto (por no omitir el primer nivel). O sea, en Python, si no andas con cuidado, acabas con la suela llena de kk de perro.