Muestreo

Si tus datos son minúsculos y están hipersesgados, no los tires a la basura: aquí te contamos cómo reciclarlos.

I.

Supongamos que X es una población determinada. A alguien le interesa estudiar cierto aspecto de ella. Lo que procede es:

  1. Muestrear X adecuadamente.
  2. Medir los parámetros de interés en la muestra.
  3. Aplicar técnicas de inferencia estadística.
  4. Redactar las conclusiones pertinentes.

II.

Supongamos que a alguien le interesa aprender sobre cierto aspecto de una población X. Lo que tiene que hacer es buscar publicaciones en que lo hayan estudiado como se indica en I. Seguramente hay muchas más fuentes que hablen de ese aspecto de la población X, pero si no se han redactado siguiendo el esquema anterior o no están basados en fuentes primarias que lo hayan hecho así, solo acertarán, si lo hacen, de casualidad.

Universo y muestra: un ejemplo muy didáctico en el que La Caixa lo hace todo mal

Los manuales de estadística al uso introducen los conceptos de universo y muestra y tienden a ilustrarlos con ejemplos buenos. Pero los ejemplos buenos son útiles solo hasta cierto punto: ilustran, como digo, pero ni caracterizan ni delimitan. Los ejemplos malos, sin embargo, son muy útiles porque ayudan a trazar una frontera entre lo que es y lo que no es permisible.

Pero, ¿de dónde sacar buenos ejemplos malos? Aunque no es fácil, nuestros colegas de La Caixa Research han tenido la gentileza de ponernos uno a huevo: es Los precios de la luz están por las nubes, ¿y el importe de su recibo? (que ha sido recogido y glosado por el inefable elDiario.es aquí).

¿Modelos para ordenar datos?

Ayer leí este resumen de este artículo que propone y discute un algoritmo novedoso y basado en ciencia de datos para ordenar datos y hacerle la competencia a quicksort y demás. Reza y promete:

The results show that our approach yields an average 3.38x performance improvement over C++ STL sort, which is an optimized Quicksort hybrid, 1.49x improvement over sequential Radix Sort, and 5.54x improvement over a C++ implementation of Timsort, which is the default sorting function for Java and Python.

Muestreo, sensibilidad y especificidad

El bloque de código

n_pop <- 47e6
prev <- .02
n_muestra <- 60e3

real_sensitivity <- .8
real_specificity <- .995

estimated_sensitivity <- .81
estimated_specificity <- .99

anuncia que vamos a hablar de:

  • un país con una población no muy distinta de la de España
  • que sufre una pandemia con una prevalencia del 2%
  • en el que se realiza una selección de unos 60k sujetos
  • para aplicárseles unas pruebas con una sensibilidad y especificidad que pueden o no ser las que anuncia su prospecto,

supongo que para que dentro de unos años, cuando ya a nadie le importe, se publiquen unos datos que han guardado celosamente unos señores que mucho antes nos habrán regalado unos artículos científicos sobre el tema — necesariamente mediocres y que nos tendremos que creer— cuya publicación está garantizada por el mero hecho de que solo ellos tienen los CSVs mientras que la gente verdaderamente capaz, no.

Varian sobre el muestreo

Guardaba una nota sobre cierto artículo de Varian en el que se refería a la utilidad del muestreo en el mundo del big data. Creo que es Big Data: New Tricks for Econometrics, donde se lee:

If the extracted data is still inconveniently large, it is often possible to select a subsample for statistical analysis. At Google, for example, I have found that random samples on the order of 0.1 percent work fine for analysis of business data.

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.

Un problema: cómo muestrear histogramas con medias. La vía de los trapecios

Me refiero muy impropiamente con histogramas con medias a algo parecido a

que son resúmenes de datos en los que aparecen no solo intervalos sino también las medias correspondientes a los sujetos dentro de esos intervalos.

Si uno quiere hacer cosas con esos datos tiene una vía que consiste en muestrear el histograma. Pero la media en cada intervalo será su punto central, no necesariamente su valor medio conocido.

Por simplificar, supongamos que tenemos datos en el intervalo [0, 1] cuya media es $latex \mu$. ¿Cómo obtener un muestreo razonable de valores en dicho intervalo?

Este también buscaba la precisión donde tal vez menos importaba

Esta no va de prensa sino de una reunión de vecinos. Al terminar, hablo con uno de ellos y me cuenta que siempre se había dedicado a la construcción y que en alguna ocasión tocó la estadística. En particular, en el estudio, relevantísimo, que describo a continuación.

En los años 70, como parte de la preparación de las ofertas para construir una incineradora de basura en Madrid, una que se ve que aún existe, le encomendaron la muy estadística tarea de estimar el poder calorífico de la basura de la capital.

Por una vez, accedo a hablar de algo de lo que no sé

Me piden que opine sobre lo de las encuestas electorales y su error. Vaya por delante mi confesión de que de eso sé poco. Soy matemático, no estadístico, y uno de los mayores huecos (¿simas?) de mi formación estadística tiene que ver con todo lo relativo al muestreo. Así que, con la valentía que aporta la ignorancia, procedo.

El primer gran problema con las encuestas electorales es que confunden países con urnas y gente con bolas de colores. Si en una urna hay N bolas (de colores distintos) y queremos estimar su número mediante una extracción de n bolas, existe un margen de error debido a que en lugar de ver todos los datos uno ve únicamente una muestra.

Metropolis-Hastings en Scala

Tengo la sensación de que un lenguaje funcional (como Scala) está particularmente bien adaptado al tipo de operaciones que exige MCMC.

Juzguen Vds.

Primero, genero datos en R:

datos <- rnorm(500, 0.7, 1)
writeLines(as.character(datos), "/tmp/datos.txt")

Son de una normal con media 0.7. En el modelo que vamos a crear, suponemos conocida (e igual a 1) la varianza de la normal y trataremos de estimar la media suponiéndole una distribución a priori normal estándar. Y con Scala, así:

Un ejemplo de "importance sampling" (que no sé cómo traducir)

Imaginemos que queremos muestrear una variable aleatoria cuya función de densidad es (proporcional a) el producto de otras dos (no necesariamente propias). Por ejemplo, la gamma, cuya función de densidad es $latex K x^{k-1} \exp(-\lambda x)$, el producto de una exponencial y una distribución impropia con densidad $latex x^{k-1}$.

Supongamos que no sabemos hacer

set.seed(1234)
shape <- 3
rate  <- 3
m0 <- rgamma(1000, shape = shape, rate = rate)

Pero supongamos que sí que sabemos muestrear la distribución exponencial, lo que permite escribir:

Dime qué muestreas y te diré cuál es tu sesgo

El telón de Aquiles del big data es el sesgo. Me gustaría hablar más de ello, pero me agarra de la pluma uno de esos NDAs. Así que hablaré de otra cosa.

Si le preguntas a la gente cuántos hermanos son en la familia, el promedio del resultado tenderá a ser superior al número medio de hijos por familia. Esencialmente, porque no estás muestreando familias sino hijos. El tautológico hecho de que las familias con más hijos tengan más hijos hace que estén sobrerrepresentadas en la muestra.