यहाँ शॉन के कोड का एक छोटा संस्करण है, जो व्यूह के अर्थ के 95% विश्वास अंतराल की गणना करता है 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))
लेकिन StatsModels का उपयोग tconfint_mean
करना यकीनन अच्छा है:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
दोनों के लिए अंतर्निहित धारणा यह है कि नमूना (सरणी a
) अज्ञात मानक विचलन (देखें मैथवर्ल्ड या विकिपीडिया ) के साथ एक सामान्य वितरण से स्वतंत्र रूप से तैयार किया गया था ।
बड़े नमूना आकार n के लिए, नमूना माध्य सामान्य रूप से वितरित किया जाता है, और कोई इसके उपयोग से अपने आत्मविश्वास अंतराल की गणना कर सकता है st.norm.interval()
(जैसा कि Jaime की टिप्पणी में सुझाव दिया गया है)। लेकिन उपरोक्त समाधान छोटे n के लिए भी सही हैं, जहां st.norm.interval()
आत्मविश्वास अंतराल देता है जो बहुत संकीर्ण हैं (यानी, "नकली आत्मविश्वास")। अधिक विवरण के लिए एक समान प्रश्न के लिए मेरा जवाब देखें (और यहां रसेल की टिप्पणियों में से एक)।
यहां एक उदाहरण जहां सही विकल्प (अनिवार्य रूप से) समान आत्मविश्वास अंतराल देते हैं:
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)
और अंत में, गलत परिणाम का उपयोग कर st.norm.interval()
:
In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)