¿Cómo se calculan las “bandas de error” en Seaborn tsplot?

Estoy tratando de entender cómo se calculan las bandas de error en el tsplot. Aquí se muestran ejemplos de las bandas de error.

Cuando trazo algo simple como

sns.tsplot(np.array([[0,1,0,1,0,1,0,1], [1,0,1,0,1,0,1,0], [.5,.5,.5,.5,.5,.5,.5,.5]])) 

Obtengo una línea vertical en y=0.5 como se esperaba. La banda de error superior también es una línea vertical alrededor de y=0.665 y la banda de error inferior es una línea vertical alrededor de y=0.335 . ¿Alguien puede explicar cómo se derivan?

No soy un estadístico, pero leí el código de origen marino para ver exactamente lo que está sucediendo. Hay tres pasos:

  1. Remuestreo Bootstrap. Seaborn crea versiones remuestreadas de sus datos. Cada una de estas es una matriz de 3×8 como la suya, pero cada fila se selecciona aleatoriamente de las tres filas de su entrada. Por ejemplo, uno podría ser:

     [[ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5] [ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5] [ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]] 

    y otro podría ser:

     [[ 1. 0. 1. 0. 1. 0. 1. 0. ] [ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5] [ 0. 1. 0. 1. 0. 1. 0. 1. ]] 

    Crea n_boot de estos (10000 por defecto).

  2. Estimación de la tendencia central. Seaborn ejecuta una función en cada una de las columnas de cada una de las 10000 versiones remuestreadas de sus datos. Debido a que no especificó este argumento ( estimator ), alimenta las columnas a una función media ( numpy.mean con axis=0 ). Muchas de sus columnas en sus iteraciones de arranque tendrán una media de 0.5, porque serán cosas como [0, 0.5, 1], [0.5, 1, 0], [0.5, 0.5, 0.5], etc. pero también tendrá algunos [1,1,0] e incluso algunos [1,1,1] que resultarán en medios más altos.

  3. Determinación del intervalo de confianza. Para cada columna, las clases marinas clasifican las estimaciones de 1000 de las medias calculadas a partir de cada versión remuestreada de los datos de menor a mayor, y selecciona las que representan el IC superior e inferior. De forma predeterminada, utiliza un 68% de IC, por lo que si alinea las 1000 estimaciones medias, elegirá la 160 y la 840. (840-160 = 680, o 68% de 1000).

Un par de notas:

  • En realidad, solo hay 3 ^ 3, o 27, posibles versiones remuestreadas de su matriz, y si usa una función como la media donde no importa el orden, entonces solo hay 3! O 6. Así que todas las 10000 iteraciones de arranque serán idéntico a una de esas 27 versiones, o 6 versiones en el caso desordenado. Esto significa que probablemente sea tonto hacer 10000 iteraciones en este caso.

  • Los medios 0.3333 … y 0.6666 … que aparecen como sus intervalos de confianza son los medios para [1,1,0] y [1,0,0] o versiones reorganizadas de ellos.

Muestran un intervalo de confianza bootstrap, calculado por unidades de remuestreo (filas en el formulario de entrada de matriz 2d). Por defecto, muestra un intervalo de confianza del 68 por ciento, que es equivalente a un error estándar, pero esto se puede cambiar con el parámetro ci .