J'ai des exemples de données pour lesquels je voudrais calculer un intervalle de confiance, en supposant une distribution normale.
J'ai trouvé et installé les packages numpy et scipy et j'ai obtenu numpy pour renvoyer une moyenne et un écart type (numpy.mean (données) avec les données étant une liste). Tout conseil sur l'obtention d'un échantillon d'intervalle de confiance serait très apprécié.
python
numpy
statistics
confidence-interval
Bmayer0122
la source
la source
Réponses:
vous pouvez calculer de cette façon.
la source
scipy
importation n'importera pas nécessairement tous les sous-packages automatiquement. Mieux vaut importer le sous-packagescipy.stats
explicitement.sp.stats.t._ppf
. Je ne suis pas très à l'aise avec cela sans plus d'explications. Mieux vaut utilisersp.stats.t.ppf
directement, sauf si vous êtes sûr de savoir ce que vous faites. Lors d'une inspection rapide de la source , une bonne quantité de code est ignorée_ppf
. Peut-être bénigne, mais peut-être aussi une tentative d'optimisation dangereuse?*ss.t._ppf((1+conf)/2.,n-1)
à la.sem
méthode de cadre de données pandas intégrée pour que vous n'ayez pas à vous soucier deapply
Voici une version abrégée du code de shasan, calculant l'intervalle de confiance à 95% de la moyenne du tableau
a
:Mais utiliser StatsModels
tconfint_mean
est sans doute encore plus agréable: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:
Et enfin, le résultat incorrect en utilisant
st.norm.interval()
:la source
st.t.interval(0.05)
pour obtenir l'intervalle de confiance de 95%.st.t.interval(0.95)
est correct pour l'intervalle de confiance à 95%, voir la documentation pourscipy.stats.t
. Cependant, la dénomination de l'argument par SciPyalpha
semble loin d'être idéale.Commencez par rechercher la valeur z de l' intervalle de confiance souhaité à partir d'une table de consultation . L'intervalle de confiance est alors
mean +/- z*sigma
, oùsigma
est l'écart type estimé de la moyenne de votre échantillon, donné parsigma = s / sqrt(n)
, oùs
est l'écart type calculé à partir de vos données d'échantillon etn
est la taille de votre échantillon.la source
scipy.stats.norm.interval(confidence, loc=mean, scale=sigma)
sigma
.sigma
dans ma réponse devrait être l'écart type estimé de la moyenne de l'échantillon, et non l'écart type estimé de la distribution. J'ai mis à jour la réponse pour clarifier cela. Merci d'avoir fait remarquer cela.Au départ
Python 3.8
, la bibliothèque standard fournit l'NormalDist
objet dans le cadre dustatistics
module:Ce:
Crée un
NormalDist
objet à partir de l'échantillon de données (NormalDist.from_samples(data)
, ce qui nous donne accès à la moyenne et à l'écart type de l'échantillon viaNormalDist.mean
etNormalDist.stdev
.Calculez le
Z-score
basé sur la distribution normale standard (représentée parNormalDist()
) pour la confiance donnée en utilisant l'inverse de la fonction de distribution cumulative (inv_cdf
).Produit l'intervalle de confiance basé sur l'écart type et la moyenne de l'échantillon.
Cela suppose que la taille de l'échantillon est suffisamment grande (disons plus de ~ 100 points) pour utiliser la distribution normale standard plutôt que la distribution t de l'étudiant pour calculer la
z
valeur.la source