Voici une version abrégée du code de shasan, calculant l'intervalle de confiance à 95% de la moyenne du tableau a
:
import numpy as np, scipy.stats as st
st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
Mais utiliser StatsModels tconfint_mean
est sans doute encore plus agréable:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
Les hypothèses sous-jacentes pour les deux sont que l'échantillon (tableau a
) a été dessiné indépendamment d'une distribution normale avec un écart type inconnu (voir MathWorld ou Wikipedia ).
Pour une grande taille d'échantillon n, la moyenne de l'échantillon est normalement distribuée, et on peut calculer son intervalle de confiance en utilisant st.norm.interval()
(comme suggéré dans le commentaire de Jaime). Mais les solutions ci-dessus sont correctes aussi pour un petit n, où st.norm.interval()
donne des intervalles de confiance trop étroits (c'est-à-dire «fausse confiance»). Voir ma réponse à une question similaire pour plus de détails (et l'un des commentaires de Russ ici).
Voici un exemple où les options correctes donnent (essentiellement) des intervalles de confiance identiques:
In [9]: a = range(10,14)
In [10]: mean_confidence_interval(a)
Out[10]: (11.5, 9.4457397432391215, 13.554260256760879)
In [11]: st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
Out[11]: (9.4457397432391215, 13.554260256760879)
In [12]: sms.DescrStatsW(a).tconfint_mean()
Out[12]: (9.4457397432391197, 13.55426025676088)
Et enfin, le résultat incorrect en utilisant st.norm.interval()
:
In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)