pairplot examples distplot barplot python matplotlib seaborn

examples - Desviación estándar y barras de errores en la función tsplot en el mar en Python



seaborn scatter plot (2)

¿Cómo calcula Seaborn sus barras de error? ejemplo:

import numpy as np; np.random.seed(22) import seaborn as sns; sns.set(color_codes=True) x = np.linspace(0, 15, 31) data = np.sin(x) + np.random.rand(10, 31) + np.random.randn(10, 1) ax = sns.tsplot(data=data, err_style="ci_bars") plt.show()

¿Cómo se calculan los ci_bars (o ci_bands)?

también, ¿es posible hacer tsplot diagrama de tsplot en el estilo de ci_bars donde las barras o bandas de error se correspondan con la desviación estándar de los valores en cada punto de tiempo? (y no error estándar de media, o bootstraps)


Como la función tsplot no proporciona una manera de establecer directamente los valores de la barra de error o de cambiar el método utilizado para calcularlos, la única solución que encontré fue parchear el módulo de timeseries :

import seaborn.timeseries def _plot_std_bars(*args, central_data=None, ci=None, data=None, **kwargs): std = data.std(axis=0) ci = np.asarray((central_data - std, central_data + std)) kwargs.update({"central_data": central_data, "ci": ci, "data": data}) seaborn.timeseries._plot_ci_bars(*args, **kwargs) def _plot_std_band(*args, central_data=None, ci=None, data=None, **kwargs): std = data.std(axis=0) ci = np.asarray((central_data - std, central_data + std)) kwargs.update({"central_data": central_data, "ci": ci, "data": data}) seaborn.timeseries._plot_ci_band(*args, **kwargs) seaborn.timeseries._plot_std_bars = _plot_std_bars seaborn.timeseries._plot_std_band = _plot_std_band

Luego, para trazar con las barras de error de desviación estándar use

ax = sns.tsplot(data, err_style="std_bars", n_boot=0)

o

ax = sns.tsplot(data, err_style="std_band", n_boot=0)

para trazar con una banda de desviación estándar.

Edit: Inspirado por esta respuesta en SO, otro enfoque (probablemente más sensato) sería usar lo siguiente en lugar de tsplot :

import pandas as pd import seaborn as sns df = pd.DataFrame.from_dict({ "mean": data.mean(axis=0), "std": data.std(axis=0) }).reset_index() g = sns.FacetGrid(df, size=6) ax = g.map(plt.errorbar, "index", "mean", "std") ax.set(xlabel="", ylabel="")

Edit2: ya que preguntó cómo tsplot calcula sus intervalos de confianza: utiliza bootstrapping para estimar la distribución del valor medio en cada punto de tiempo y luego encuentra los valores de percentil bajo y alto (que corresponden al intervalo de confianza que se está utilizando) a partir de estas distribuciones. . El intervalo de confianza predeterminado es del 68%, equivalente a ± una desviación estándar de la media, suponiendo una distribución normal. Los respectivos percentiles bajo y alto son 16% y 84%. Puede cambiar el intervalo de confianza a través del argumento de la palabra clave ci .


En Seaborn v0.8.0 (julio de 2017) se agregó la capacidad de usar barras de error para mostrar las desviaciones estándar en lugar de los intervalos de confianza de arranque en la mayoría de las funciones estadísticas al poner ci = "sd". Así que esto ahora funciona.

sns.tsplot(data=data, ci="sd")

Para versiones anteriores de Seaborn, una solución alternativa para trazar la desviación estándar podría ser usar matplotlib errorbar en la parte superior de tsplot:

import numpy as np; import seaborn as sns; import pandas as pd import matplotlib.pyplot as plt # create a group of time series num_samples = 90 group_size = 10 x = np.linspace(0, 10, num_samples) group = np.sin(x) + np.linspace(0, 2, num_samples) + np.random.rand(group_size, num_samples) + np.random.randn(group_size, 1) df = pd.DataFrame(group.T, index=range(0,num_samples)) # plot time series with seaborn ax = sns.tsplot(data=df.T.values) #, err_style="unit_traces") # Add std deviation bars to the previous plot mean = df.mean(axis=1) std = df.std(axis=1) ax.errorbar(df.index, mean, yerr=std, fmt=''-o'') #fmt=None to plot bars only plt.show()