web-dev-qa-db-fra.com

Tracer la barre d'erreur de l'intervalle de confiance à 95% python pandas dataframes

Je veux montrer un intervalle de confiance à 95% avec Python pandas, matpolib ... Mais je suis resté, parce que pour la .std() habituelle, je ferais comme suit:

import pandas as pd
import numpy as np

import matplotlib

matplotlib.use('Agg')

import matplotlib.pyplot as plt
import math

data = pd.read_table('output.txt',sep=r'\,', engine='python')
Ox = data.groupby(['Ox'])['Ox'].mean()
Oy = data.groupby(['Ox'])['Oy'].mean()
std = data.groupby(['Ox'])['Oy'].std()

plt.plot(Ox, Oy , label = 'STA = '+ str(x))
plt.errorbar(Ox, Oy, std, label = 'errorbar', linewidth=2)

plt.legend(loc='best', prop={'size':9.2})

plt.savefig('plot.pdf')
plt.close()

Mais je n'ai rien trouvé dans les méthodes pandas qui peuvent m'aider. Quelqu'un le sait-il?

6
Lust_For_Love

Utilisation de 2 * std pour estimer l'intervalle de 95%

Dans une distribution normale, l'intervalle [μ - 2σ, μ + 2σ] couvre 95,5%, vous pouvez donc utiliser 2 * std pour estimer l'intervalle de 95%:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame()
df['category'] = np.random.choice(np.arange(10), 1000, replace=True)
df['number'] = np.random.normal(df['category'], 1)

mean = df.groupby('category')['number'].mean()
std = df.groupby('category')['number'].std()

plt.errorbar(mean.index, mean, xerr=0.5, yerr=2*std, linestyle='')
plt.show()

Résultat:

result

Utilisation des centiles

Si votre distribution est asymétrique, il est préférable d'utiliser des barres d'erreur asymétriques et d'obtenir votre intervalle de 95% à partir des centiles.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import skewnorm

df = pd.DataFrame()
df['category'] = np.random.choice(np.arange(10), 1000, replace=True)
df['number'] = skewnorm.rvs(5, df['category'], 1)

mean = df.groupby('category')['number'].mean()
p025 = df.groupby('category')['number'].quantile(0.025)
p975 = df.groupby('category')['number'].quantile(0.975)

plt.errorbar(
    mean.index,
    mean,
    xerr=0.5,
    yerr=[mean - p025, p975 - mean],
    linestyle='',
)
plt.show()

Résultat:

enter image description here

13
MaxNoe

Pour une distribution normale, ~ 95% des valeurs se situent dans une fenêtre de 4 écarts-types autour de la moyenne, ou en d'autres termes, 95% des valeurs sont à plus/moins 2 écarts-types de la moyenne. Voir, par exemple règle 68–95–99,7 .

L'argument yerr de plt.errorbar Spécifie la longueur de la barre d'erreur unilatérale. Prenant ainsi

plt.errorbar(x,y,yerr=2*std)

std est l'écart type montre les barres d'erreur de l'intervalle de confiance à 95%.