Ecco una versione abbreviata del codice di shasan, calcolando l'intervallo di confidenza del 95% della media dell'array 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))
Ma usare StatsModels tconfint_mean
è probabilmente ancora più bello:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
Le ipotesi sottostanti per entrambi sono che il campione (array a
) sia stato disegnato indipendentemente da una distribuzione normale con deviazione standard sconosciuta (vedere MathWorld o Wikipedia ).
Per campioni di grandi dimensioni n, la media campionaria è normalmente distribuita e si può calcolare il suo intervallo di confidenza usando st.norm.interval()
(come suggerito nel commento di Jaime). Ma le soluzioni di cui sopra sono corrette anche per n piccolo, dove st.norm.interval()
fornisce intervalli di confidenza troppo stretti (cioè, "fiducia falsa"). Vedi la mia risposta a una domanda simile per maggiori dettagli (e uno dei commenti di Russ qui).
Ecco un esempio in cui le opzioni corrette danno intervalli di confidenza (essenzialmente) identici:
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)
E infine, il risultato errato utilizzando st.norm.interval()
:
In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)