Ajouter un intervalle de confiance de 95% des deux côtés pour la figure avec Python / Matplotlib

Dessin de base

Par exemple, supposons que vous ayez un bloc de données comme celui-ci.

    x         y
0   2  0.954025
1   3  0.146810
2   1  0.409961
3   1  0.164558
4   3  0.782152
5   2  0.905869
6   3  0.210528
7   1  0.437970
8   1  0.801206
9   3  0.089576
10  2  0.960357
11  2  0.670732

Lorsque j'essaie de dessiner un diagramme avec une erreur standard à partir de cette trame de données, cela ressemble à ceci.

import numpy as np
import matplotlib.pyplot as plt
 
m = df.pivot_table(index='x', values='y', aggfunc='mean')
e = df.pivot_table(index='x', values='y', aggfunc='sem')
m.plot(xlim=[0.8, 3.2], yerr=e)

20161010_1.png

De cette manière, une barre d'erreur peut être créée en spécifiant l'ampleur de l'erreur dans yerr.

Dessin en utilisant l'intervalle de confiance

Par conséquent, nous définirons et utiliserons cilen pour trouver la longueur de l'intervalle de confiance.

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt


def cilen(arr, alpha=0.95):
    if len(arr) <= 1:
        return 0
    m, e, df = np.mean(arr), stats.sem(arr), len(arr) - 1
    interval = stats.t.interval(alpha, df, loc=m, scale=e)
    cilen = np.max(interval) - np.mean(interval)
    return cilen

m = df.pivot_table(index='x', values='y', aggfunc='mean')
e = df.pivot_table(index='x', values='y', aggfunc=cilen)
m.plot(xlim=[0.8, 3.2], yerr=e)

20161010_2.png

J'ai pu créer un diagramme avec un intervalle de confiance.

prime

La méthode de calcul de l'intervalle de confiance est confuse en raison du problème «n ou n-1».
Pour ceux qui ont recherché "intervalle de confiance Python" pour le moment selon "Évitez de réinventer les roues",

  1. Comment calculer l'intervalle de confiance de la valeur moyenne de la distribution normale en Python
  2. keiskS @technote - section de confiance avec python

Je pense que vous serez confus par les différences subtiles, essayez les deux et serez frustré par les différents résultats.
1 est la même réponse que R. La différence est dans 2. Je vais essayer.

> x <- c(1, 1, 3, 3)
> t.test(x)

    One Sample t-test

data:  x
t = 3.4641, df = 3, p-value = 0.04052
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 0.1626138 3.8373862
sample estimates:
mean of x
        2

1 voie

import numpy as np
from scipy import stats

alpha     = 0.95
data = [1, 1, 3, 3]

mean_val = np.mean(data)
sem_val  = stats.sem(data)  # standared error of the mean
ci       = stats.t.interval(alpha, len(data)-1, loc=mean_val, scale=sem_val)

print(ci)

>> (0.16261376896260105, 3.837386231037399)

2 méthodes

import math
import numpy as np
from scipy import stats

alpha     = 0.95
data = [1, 1, 3, 3]

mean_val = np.mean(data)
std_val = np.std(data)
ci = stats.t.interval(alpha,len(data)-1,loc=mean_val,scale=std_val/math.sqrt(len(data)))
print(ci)

>> (0.40877684735786857, 3.5912231526421312)

Cette fois, j'ai décidé de suivre R dans le monde, j'ai donc choisi 1.
La différence avec 2 est la fin de la partie où ci est calculé.

math.sqrt(len(data))

Cette. Divisez par n. Cependant, si vous voulez faire des statistiques spéculatives, il est préférable de diviser par n-1. C'est parce que nous supposons une distribution t. En réalité,

math.sqrt(len(data) - 1)

Ensuite, la réponse de la méthode 2 correspond également complètement à R.

Recommended Posts

Ajouter un intervalle de confiance de 95% des deux côtés pour la figure avec Python / Matplotlib
Introduction à Python avec Atom (en route)
Ajoutez des informations au bas de la figure avec Matplotlib
Ce que j'ai fait pour accueillir le Python2 EOL en toute confiance
Enregistrer des images sur le Web sur un lecteur avec Python (Colab)
[Python] Définissez la plage du graphique avec matplotlib
Télécharger des fichiers sur le Web avec Python
Ajouter du bruit gaussien aux images avec python2.7
Alignez la barre de couleurs sur la figure avec matplotlib
La route de la compilation vers Python 3 avec Thrift
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
Utilisez python sur Raspberry Pi 3 pour éclairer la LED avec le contrôle du commutateur!
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python
Stratégie sur la façon de monétiser avec Python Java
[Python] matplotlib: Formatez le diagramme de votre mémoire
Conseils de dessin avec matplotlib côté serveur
Ajouter une ligne diagonale (hachures) à la carte thermique (python, matplotlib)
Le moyen le plus simple de synthétiser la voix avec python
Essayez de résoudre le diagramme homme-machine avec Python
[Python] Comment dessiner plusieurs graphiques avec Matplotlib
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Dites bonjour au monde avec Python avec IntelliJ
[Python] Comment enregistrer des images sur le Web à la fois avec Beautiful Soup
Je voulais visualiser la simulation de particules 3D avec la bibliothèque de visualisation Python Matplotlib.
Le moyen le plus simple d'utiliser OpenCV avec python
Cliquez sur le diagramme python / matplotlib pour obtenir des valeurs de coordonnées ou des valeurs d'entrée au clavier
Dessinez une ligne de pliage / diagramme de dispersion avec python matplotlib pour fichier CSV (2 colonnes)
Connectez-vous à MySQL avec Python sur Raspberry Pi
Visualiser grib2 sur une carte avec python (matplotlib)
Un moyen simple de remplir le début de 0 en fonction du nombre de chiffres dans le nombre [Python]
À partir de Python 3.10, le formulaire retourné par inspect.signature () semble être basé sur typing.get_type_hints ().
Réfléchissez à la programmation de Python sur votre iPad
Essayez de résoudre le livre des défis de programmation avec python3
Comment ajouter de l'aide à HDA (avec bonus de script Python)
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Ajoutez simplement le pilote à la touche de forme avec mélangeur
[Introduction à Python] Comment itérer avec la fonction range?
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
Étapes pour installer le dernier Python sur votre Mac
J'ai essayé de résoudre Soma Cube avec python
Commande Yum pour accéder à MySQL avec Python 3 sous Linux
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Faire un point d'arrêt sur la couche c avec python
Convertissez l'image au format .zip en PDF avec Python
Je veux hériter de l'arrière avec la classe de données python
Informations pour contrôler les moteurs avec Python sur RaspberryPi
Installez la dernière version stable de Python avec pyenv (à la fois 2 et 3)
Je veux AWS Lambda avec Python sur Mac!
Spécifiez MinGW comme compilateur utilisé dans Python
J'ai essayé de résoudre le problème avec Python Vol.1
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
Comment profiter de Python sur Android !! Programmation en déplacement !!
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
[Python] Road to the Serpent (5) Jouez avec Matplotlib