Mettre en œuvre collectivement des tests d'hypothèses statistiques en Python

introduction

J'ai résumé le test d'hypothèse statistique. Plus tard, j'aimerais écrire un article qui organise la "puissance de détection" et la "quantité d'effet", j'ai donc écrit cet article comme première étape. Je ne suis pas un expert en statistiques, alors je vous serais reconnaissant de bien vouloir signaler des erreurs.

référence

Ce qui suit sert de référence pour résumer le «test d'hypothèse statistique».

À propos du test d'hypothèse statistique

Nous allons organiser le flux des tests d'hypothèses statistiques et enfin l'implémenter en Python.

Qu'est-ce qu'un test d'hypothèse statistique

Wikipedia explique le test d'hypothèse statistique comme suit.

Le test d'hypothèses statistiques est l'une des méthodes statistiques permettant de tester l'hypothèse sur la population de la répartition de la population de l'échantillon. Les normes industrielles japonaises définissent une hypothèse comme «une déclaration de population ou de distribution de probabilité. Il existe des hypothèses nulles et des hypothèses alternatives». Le test (test statistique) est "une procédure statistique pour décider de rejeter l'hypothèse nulle et de soutenir l'hypothèse alternative ou non de rejeter l'hypothèse nulle basée sur les valeurs observées. La procédure est que l'hypothèse nulle est vraie. Il est décidé que la probabilité de rejet est α ou moins même si c'est fait. Cet α est appelé le niveau de signification. "

Bien que des termes techniques tels que «hypothèse nulle», «hypothèse opposée» et «niveau de signification» soient sortis et soient difficiles à définir, je comprends qu'il s'agit d'une méthode pour effectuer une vérification avec la logique suivante. ..

** En supposant qu'une certaine hypothèse est correcte, lors du calcul de la probabilité de devenir l'état de cette hypothèse à partir des données réellement observées, si la probabilité est suffisamment faible, il est estimé que l'hypothèse est peu susceptible de se tenir **

Procédure de test d'hypothèse statistique

Le test d'hypothèse statistique est effectué selon la procédure suivante.

  1. Faire une hypothèse nulle
  2. Déterminez la méthode de test
  3. Déterminer le niveau de signification et la zone de rejet
  4. Calculer les statistiques
  5. Rejeter ou adopter l'hypothèse nulle

Si seule la procédure est répertoriée, elle est abstraite et difficile à comprendre, je vais donc l'expliquer avec un exemple concret.

Exemple spécifique de test d'hypothèse statistique


Nous avons joué 5 fois au tirage au sort et avons obtenu 500 yens lorsque la face avant est sortie et 500 yens lorsque la face arrière est sortie. Puis, en conséquence, la table est sortie toutes les cinq fois et j'ai dû payer 2500 yens. D'une manière ou d'une autre, ça sent le calmar, mais peut-on dire que cette pièce est fausse?


Certaines personnes peuvent dire: «N'est-ce pas parfois que le tableau apparaît cinq fois de suite?», Tandis que d'autres disent: «C'est étrange que le tableau apparaisse cinq fois de suite». De telles choses peuvent être jugées objectivement en utilisant le test d'hypothèse statistique.

Faire une hypothèse nulle

Cette fois, comme hypothèse que je veux revenir à rien (une hypothèse que je veux nier), je ferai l'hypothèse que ** cette pièce n'est pas une fausse **. Puisqu'il ne s'agit pas d'un faux, la probabilité que la table apparaisse est $ p = 0,5 $, donc elle est exprimée comme suit.

Hypothèse nulle: $ H_ {0}: p = 0,5 $

L'hypothèse alternative (la probabilité d'apparition du tableau est de 50% ou plus) est la suivante.

Hypothèse d'opposition: $ H_ {0}: p> 0,5 $

Déterminer la méthode de test

Cette fois, nous utiliserons le test binomial. (Si le nombre d'échantillons est grand, la distribution binomiale peut être approximée à une distribution normale, donc d'autres méthodes peuvent être utilisées.)

Déterminer le niveau de signification et la zone de rejet

Dans ce test, le ** niveau de signification est fixé à 5% **. Hypothèse nulle: en supposant que $ H_ {0}: p = 0,5 $, si la probabilité d'obtenir des données d'observation est de 5% ou moins **, l'hypothèse nulle est rejetée (c'est-à-dire que ** cette pièce est fausse). Il y a **).

De plus, cette fois, nous effectuerons un ** test unilatéral ** pour un test ** afin de vérifier le soupçon que la pièce peut être anormalement facile à apparaître. La zone de rejet sera d'un seul côté.

Calculer les statistiques

Une statistique appelée valeur p représente la probabilité que la valeur réalisée des données observées soit obtenue, ou la probabilité que des données plus extrêmes soient obtenues, étant donné que l'hypothèse nulle est correcte.

Par conséquent, la valeur p dans ce cas est la probabilité que la table apparaisse 5 fois, en supposant que la probabilité que la table apparaisse est de 50 $ % $.

(\frac{1}{2})^5 = \frac{1}{32} \fallingdotseq 0.03125

Rejeter ou adopter l'hypothèse nulle

Maintenant que nous avons les informations nécessaires pour le test d'hypothèse, nous déciderons de rejeter ou d'adopter l'hypothèse nulle. Le niveau de signification de ce test d'hypothèse était de 0,05 $ (5 $ % $) et la statistique (valeur p) était de 0,03125 $ à la suite du calcul.

Puisque 0,03125 $ <0,05 $, l'hypothèse nulle est rejetée et l'hypothèse alternative est adoptée.

Par conséquent, il a été vérifié que $ H_ {0}: p> 0,5 $ (cette pièce est un faux).

Effectuer des tests d'hypothèses statistiques en Python

Le calcul ci-dessus peut être facilement effectué en Python. Voici les résultats d'un test binomial utilisant scipy 1.3.1.


from scipy import stats
#x est le nombre d'observations réussies
#n est le nombre d'essais
#p est la probabilité de succès attendue
#alternative spécifie s'il s'agit d'un test bilatéral ou d'un test unilatéral, et s'il s'agit d'un test unilatéral, de quel côté il s'agit.
p = stats.binom_test(x = 5, n = 5,  p = 0.5, alternative = 'greater' )
print(p)

Le résultat de sortie est ici. La valeur p peut être sortie selon l'argument spécifié.

0.03125

Un test binomial peut être facilement réalisé en prenant une décision de rejet ou d'acceptation en fonction du niveau de signification défini en utilisant ce qui précède. (Si vous souhaitez effectuer un autre test, utilisez une autre méthode.)

Dessiner la distribution en Python

Jusqu'à présent, le test d'hypothèse était effectué uniquement par calcul, mais il devient très facile à comprendre lors du dessin de la distribution. Effectuez un tirage au sort 5 fois et tracez la distribution du nombre de fois où le tableau apparaît.

import numpy as np
import matplotlib.pyplot as plt
import math
%matplotlib inline

def comb_(n, k):
    result = math.factorial(n) / (np.math.factorial(n - k) * np.math.factorial(k))
    return result


def binomial_dist(p, n, k):
    result = comb_(n, k) * (p**k) * ((1 - p) ** (n - k))
    return result

x =  np.arange(0, 6, 1)

y = [binomial_dist(0.5, 5, i) for i in x]

plt.bar(x, y, alpha = 0.5)

ダウンロード.png

Ce qui précède est le résultat du dessin, mais vous pouvez immédiatement voir que ** la probabilité que le tableau apparaisse 5 fois est inférieure au niveau de signification de 0,05 **.

NEXT La prochaine fois, je résumerai le premier type d'erreur, le deuxième type d'erreur et la puissance de détection dans le test d'hypothèse.

Recommended Posts

Mettre en œuvre collectivement des tests d'hypothèses statistiques en Python
Mettre en œuvre des recommandations en Python
Implémenter XENO avec python
Implémenter sum en Python
Implémenter Traceroute dans Python 3
Implémenter Naive Bayes dans Python 3.3
Implémenter d'anciens chiffrements en python
Implémenter Redis Mutex en Python
Implémenter l'extension en Python
Mettre en œuvre un RPC rapide en Python
Implémenter l'algorithme de Dijkstra en python
Implémenter le bot de discussion Slack en Python
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Implémenter la fonction power.prop.test de R en python
Tester avec des nombres aléatoires en Python
Implémenter le modèle Singleton en Python
Test statistique (test multiple) en Python: scikit_posthocs
Implémentez rapidement l'API REST en Python
Implémenter __eq__ etc. de manière générique dans la classe Python
J'ai essayé d'implémenter la permutation en Python
Implémenter le filtre FIR en langage Python et C
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
Introduction aux tests d'hypothèses statistiques avec des modèles de statistiques
Quadtree en Python --2
Python en optimisation
CURL en Python
Essayez d'implémenter Oni Mai Tsuji Miserable avec python
Géocodage en python
SendKeys en Python
Calculons en fait le problème statistique avec Python
Méta-analyse en Python
Unittest en Python
Distribution de probabilité de niveau 2 du test statistique apprise en Python ②
Comment implémenter la mémoire partagée en Python (mmap.mmap)
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Implémentons le dialogue vocal anglais en Python [hors ligne]
Plink en Python
J'ai essayé d'implémenter TOPIC MODEL en Python
Constante en Python
Méthodes de test qui renvoient des valeurs aléatoires en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
[Implémentation pour l'apprentissage] Implémentation de l'échantillonnage stratifié en Python (1)