Estadística

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.

Estacionalidad semanal de la mortalidad

Continúo con esto.

(El pico de primeros de agosto corresponde a la ola de calor).

Resumen:

  • Acusada variación intrasemanal (con un intevalo de variación del 5%, que es mucho).
  • Los intervalos de confianza de los nuevos modelos contienen mucho mejor las observaciones reales; muchos picos observados dejan de parecer anómalos para quedar dentro de las franjas de variación esperadas.

Mortalidad y domingos

Es sabido que nacen menos niños en domingo, efecto, parece de la planificación de partos. Tengo cierto indicio, que voy a ver cuándo (y si) puedo corroborar, de que también hay menos fallecimientos. Mírese

que es una gráfica de mortalidad diaria en España y en la que, contumazmente, los días 2 de junio (domingo), 9 de junio (domingo) y 16 de junio (domingo), las observaciones quieren salirse de las bandas que para que no trotaran libérrimamente por el plano cartesiano construyó el bueno de Monsieur Poisson.

Modelización de retrasos: una aplicación del análisis de supervivencia

En vigilancia epidemiológica contamos eventos (p.e., muertes o casos de determinadas enfermedades). Lo que pasa es que el caso ocurrido en el día 0 puede notificarse con un retraso de 1, 2, 3… o incluso más días. En algunas aplicaciones, incluso semanas.

¿Cómo estimar el número de casos ocurridos el día 0 el día, p.e., 5?

Se puede aplicar el análisis de la supervivencia donde el evento muerte se reinterpreta como notificación. El el día 0 todos los sujetos están vivos y, poco a poco, van cayendo. Como en los consabidos modelos/gráficos de Kaplan-Meier,

Bayes no había previsto esto

Muestreo. Se trata de seleccionar unas unidades experimentales (proceso caro) y tratar de estimar una proporción (p.e.) en la población total.

Existen técnicas para estimar el valor N mínimo para garantizar cierto margen de error. Pero dichas técnicas requieren conocer (algo d-) el resultado del experimento para estimar N (p.e. una estimación de la proporción que cabe esperar).

Circulus in demonstrando.

Bayes. Ve examinando unidades y actualiza tus intervalos de credibilidad hasta que tengan la anchura solicitada.

Causalidad. Atribución. Madrid Central.

Si hay algo inaprensible, es la causalidad. No la que entiende Maripili, claro, sino esta. Pero vivimos en tiempos de tremendamente polémicas y presuntamente potentísimas y causas eficientes. Verbigracia, la desigualdad… y Madrid Central:

Argumentas en términos causales cuando esperas que te lea Maripili. Entre gente seria solemos hablar más bien de atribución. Lo de la atribución consiste en tratar de repartir un efecto entre posibles causas potenciales. Como típicamente no hay criterio definitivo, en la práctica funciona así: