[PYTHON] Distribution et test

Distribution

Distribution aléatoire et uniforme

Tout d'abord, générons un nombre aléatoire uniforme et illustrons sa distribution.

#Importez une bibliothèque pour gérer les nombres aléatoires.
import random
sample_size = 10 #Nombre de nombres aléatoires générés

#Stocker des nombres aléatoires uniformes dans dist (distribution):Distribution)
dist = [random.random() for i in range(sample_size)]
#Vérifiez le contenu de dist.
dist
#Importez une bibliothèque pour illustrer des diagrammes et des graphiques.
import matplotlib.pyplot as plt
%matplotlib inline
#Dessinez un histogramme.
plt.hist(dist)
plt.grid()
plt.show()

Essayez d'augmenter le nombre de nombres aléatoires générés

Plus les nombres aléatoires sont générés, plus la forme de distribution «idéale» est proche.

sample_size = 100 #Nombre de nombres aléatoires générés

#Stocker des nombres aléatoires uniformes dans dist
dist = [random.random() for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist)
plt.grid()
plt.show()
sample_size = 1000 #Nombre de nombres aléatoires générés

#Stocker des nombres aléatoires uniformes dans dist
dist = [random.random() for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist)
plt.grid()
plt.show()
sample_size = 10000 #Nombre de nombres aléatoires générés

#Stocker des nombres aléatoires uniformes dans dist
dist = [random.random() for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist)
plt.grid()
plt.show()
sample_size = 100000 #Nombre de nombres aléatoires générés

#Stocker des nombres aléatoires uniformes dans dist
dist = [random.random() for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist)
plt.grid()
plt.show()

Essayez d'augmenter la corbeille

La boîte utilisée pour séparer la poubelle s'appelle bin. Lorsque vous dessinez un histogramme, l'affichage varie en fonction du nombre de bacs triés. Si vous augmentez le nombre de cases, vous pouvez voir la forme fine de la distribution, mais le nombre de données séparées par case diminue naturellement.

sample_size = 100000 #Nombre de nombres aléatoires générés

#Stocker des nombres aléatoires uniformes dans dist
dist = [random.random() for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist, bins=100) #Augmenter le bac
plt.grid()
plt.show()

Distribution binaire

__np.random.binomial (n, p) __ renvoie le nombre de cotes qui apparaissent lorsque vous jouez à la roulette n fois avec une probabilité de p qui produit un nombre impair (la probabilité 1-p produit un nombre pair). Une telle distribution est appelée distribution binomiale.

Distribution binomiale à probabilité égale

Jouez à 10 roulettes avec une probabilité égale de cotes et d'égales, et comptez le nombre de cotes. Répétez-le 10 000 fois. Quelle est la probabilité que les cotes et les égalités apparaissent le même nombre de fois (probabilité d'apparaître 5 fois chacune)?

#Importez la bibliothèque de calculs numériques.
import numpy as np
sample_size = 10000 #Nombre de nombres aléatoires générés

#Un nombre impair apparaît avec une probabilité p (probabilité 1)-Lorsque vous jouez à la roulette n fois (p donne un nombre pair)
#Distribution du nombre d'apparitions d'un nombre impair
dist = [np.random.binomial(n=10, p=0.5) for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Comme vous pouvez le voir sur la figure ci-dessus, si vous jouez à une roulette avec une probabilité égale de pair et impair, la probabilité d'apparaître impair et pair le même nombre de fois (probabilité de 5 chacun) est d'environ 25% (environ 10000 fois). 2500 fois). Vous pouvez avoir l'impression qu'il est étonnamment petit.

Est-ce que c'est le calmar de la roulette?

Vous observiez d'autres invités jouant à la roulette au casino. Ensuite, comme le nombre de nombres impairs apparaissant est extrêmement élevé, j'ai senti que la roulette était un calmar. Si ce n'est pas fou, la roulette devrait avoir des cotes impaires et paires. Cependant, cette roulette a obtenu un nombre impair 60 fois sur 100. Est-ce un calmar à la roulette?

Lorsque vous jouez à une roulette avec une probabilité égale de pair et impair, quelle est la probabilité que le nombre de impair soit 60 ou plus? Tout d'abord, dessinons la distribution.

sample_size = 10000 #Nombre de nombres aléatoires générés

#Un nombre impair apparaît avec une probabilité p (probabilité 1)-Lorsque vous jouez à la roulette n fois (p donne un nombre pair)
#Distribution du nombre d'apparitions d'un nombre impair
dist = [np.random.binomial(n=100, p=0.5) for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Avec le même calcul que ci-dessus, calculons "la probabilité de jouer à la roulette 100 fois et d'obtenir un nombre impair de 60 fois ou plus".

sample_size = 10000 #Nombre de nombres aléatoires générés

#Un nombre impair apparaît avec une probabilité p (probabilité 1)-Lorsque vous jouez à la roulette n fois (p donne un nombre pair)
#Distribution du nombre d'apparitions d'un nombre impair
dist = [np.random.binomial(n=100, p=0.5) for i in range(sample_size)]

p = sum([1 for n in dist if n >= 60]) / sample_size
print("valeur p: %(p)s " %locals())

Après avoir joué à 100 roulettes avec une probabilité égale de cotes et d'égaux, il a été constaté que la probabilité que les cotes apparaissent 60 fois ou plus «accidentellement» est inférieure à 5%. En d'autres termes, pour une roulette qui a un nombre impair de 60 ou plus sur 100 fois, il semble bon de soupçonner que la roulette est folle.

P à ce moment est appelé la valeur p (probabilité significative).

Défi 1

Pour une roulette qui a un nombre impair de 60 ou plus sur 100 fois, il semble bon de soupçonner que la roulette est folle. Ensuite, si un nombre impair apparaît 6 fois ou plus sur 10 fois, la probabilité d'apparition d'un nombre impair est la même 60% </ u>, mais pouvez-vous dire que la roulette est folle? Veuillez calculer la valeur p et la réponse.

#Défi 1

Distribution binaire qui n'est pas à probabilité égale

On estime que 5% de toutes les populations ont une infection. Si 20 personnes étaient sélectionnées au hasard parmi tous les habitants, combien de personnes seraient affectées dans la population extraite? Une telle distribution est également une distribution binomiale. Dessinons une distribution.

sample_size = 10000 #Nombre de nombres aléatoires générés

#Un nombre impair apparaît avec une probabilité p (probabilité 1)-Lorsque vous jouez à la roulette n fois (p donne un nombre pair)
#Distribution du nombre d'apparitions d'un nombre impair
dist = [np.random.binomial(n=20, p=0.05) for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Défi 2

On estime que 5% de toutes les populations ont une infection. Lorsque 100 personnes ont été sélectionnées au hasard parmi tous les habitants, il y avait plus de 10 personnes touchées dans la population extraite.

(1) Estimez la probabilité que cela se produise par hasard.

(2) Comment interpréter le résultat?

#Défi 2

distribution normale

__random.normalvariate (mu, sigma) __ est une fonction qui génère des nombres aléatoires qui suivent une distribution normale (mu est la moyenne, sigma est l'écart type).

Distribution normale standard

Une distribution normale avec une moyenne de 0 et un écart type de 1 est appelée «distribution normale standard». Dessinons une distribution normale standard.

sample_size = 10000 #Nombre de nombres aléatoires générés

dist = [random.normalvariate(mu=0, sigma=1) for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Quelle est la probabilité qu'un nombre aléatoire qui suit une distribution normale standard produise une valeur de 2 ou plus? Calculons.

sample_size = 10000 #Nombre de nombres aléatoires générés

dist = [random.normalvariate(mu=0, sigma=1) for i in range(sample_size)]

p = sum([1 for n in dist if n >= 2]) / sample_size
print("valeur p: %(p)s " %locals())

Valeur d'écart

On suppose que la «valeur de l'écart», qui est souvent utilisée dans les examens universitaires, suit une distribution normale avec une moyenne de 50 et un écart-type de 10. Dessinons une distribution. Ici, imaginez le nombre d'élèves sur l'axe vertical.

sample_size = 10000 #Nombre de nombres aléatoires générés

#Distribution normale avec moyenne 50 et écart type 10
dist = [random.normalvariate(mu=50, sigma=10) for i in range(sample_size)]

#Dessinez un histogramme.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Défi 3

Combien d'élèves sur 10 000 ont un écart de 70 ou plus?

#Défi 3

Tester

import numpy as np #Bibliothèque pour le calcul numérique
import scipy as sp #Bibliothèque de calculs scientifiques
from scipy import stats #Bibliothèque de calculs statistiques

Test du chi carré

Le test du chi carré est une méthode utilisée pour tester si deux distributions sont identiques.

Quand j'ai lancé les dés 60 fois et compté le nombre de fois que chaque jet est sorti, c'est devenu comme suit.

Jet de dés
Nombre d'occurrences 171067155

À ce stade, testons s'il suit ou non la distribution des valeurs théoriques (distribution uniforme).

significance = 0.05
o = [17, 10, 6, 7, 15, 5] #La valeur de mesure
e = [10, 10, 10, 10, 10, 10] #Valeur théorique

chi2, p = stats.chisquare(o, f_exp = e)

print('la valeur chi2 est%(chi2)s' %locals())
print('La probabilité est%(p)s' %locals())

if p < significance:
    print('Niveau de signification%(significance)Il y a une différence significative dans s' %locals())
else:
    print('Niveau de signification%(significance)Il n'y a pas de différence significative dans s' %locals())

la valeur chi2 est 12,4 La probabilité est de 0,029699459203520212 À un niveau de signification de 0,05, il existe une différence significative

Exercice 4

Lorsque les qualités d'expédition d'un certain légume cultivé selon la méthode A et la méthode B sont telles qu'indiquées dans le tableau suivant, devrions-nous considérer qu'il existe une relation entre ces méthodes de culture et la qualité du produit?

Excellent Bon Oui Total
Une méthode 12 30 58 100
Méthode B 14 90 96 200
total 26 120 154 300
#Exercice 4

Test t non apparié

#Test t non apparié
significance = 0.05
X = [68, 75, 80, 71, 73, 79, 69, 65]
Y = [86, 83, 76, 81, 75, 82, 87, 75]

t, p = stats.ttest_ind(X, Y)

print('la valeur t est%(t)s' %locals())
print('La probabilité est%(p)s' %locals())

if p < significance:
    print('Niveau de signification%(significance)Il y a une différence significative dans s' %locals())
else:
    print('Niveau de signification%(significance)Il n'y a pas de différence significative dans s' %locals())

La valeur t est -3,214043146821967 La probabilité est de 0,006243695014300228 À un niveau de signification de 0,05, il existe une différence significative

Défi 5

Le même test arithmétique a été effectué dans deux classes, la 6e année 1re classe et la 6e année 2e classe, et les résultats ont été obtenus. Veuillez tester s'il y a une différence de points entre les deux classes.

Groupe de 6e année Score 6e groupe de 2e année Score
1 70 1 85
2 75 2 80
3 70 3 95
4 85 4 70
5 90 5 80
6 70 6 75
7 80 7 80
8 75 8 90
class_one = [70, 75, 70, 85, 90, 70, 80, 75]
class_two = [85, 80, 95, 70, 80, 75, 80, 90] 
#Défi 5

Test t apparié

#Test t apparié
significance = 0.05
X = [68, 75, 80, 71, 73, 79, 69, 65]
Y = [86, 83, 76, 81, 75, 82, 87, 75]

t, p = stats.ttest_rel(X, Y)

print('la valeur t est%(t)s' %locals())
print('La probabilité est%(p)s' %locals())

if p < significance:
    print('Niveau de signification%(significance)Il y a une différence significative dans s' %locals())
else:
    print('Niveau de signification%(significance)Il n'y a pas de différence significative dans s' %locals())

La valeur t est -2,9923203754253302 La probabilité est de 0,02016001617368161 À un niveau de signification de 0,05, il existe une différence significative

Défi 6

Veuillez tester s'il y a une différence entre la langue nationale et le score arithmétique.

Groupe de 6e année Japonais Arithmétique
1 90 95
2 75 80
3 75 80
4 75 80
5 80 75
6 65 75
7 75 80
8 80 85
kokugo =   [90, 75, 75, 75, 80, 65, 75, 80]
sansuu = [95, 80, 80, 80, 75, 75, 80, 85]
#Défi 6

Analyse de la variance

#Analyse dispersive d'un facteur
significance = 0.05
a = [34, 39, 50, 72, 54, 50, 58, 64, 55, 62]
b = [63, 75, 50, 54, 66, 31, 39, 45, 48, 60]
c = [49, 36, 46, 56, 52, 46, 52, 68, 49, 62]
f, p = stats.f_oneway(a, b, c)

print('La valeur f est%(f)s' %locals())
print('La probabilité est%(p)s' %locals())

if p < significance:
    print('Niveau de signification%(significance)Il y a une différence significative dans s' %locals())
else:
    print('Niveau de signification%(significance)Il n'y a pas de différence significative dans s' %locals())

La valeur f est 0,09861516667148518 La probabilité est de 0,9064161716556407 Niveau de signification 0,05, pas de différence significative

Défi 7

Effectuez une analyse de dispersion en utilisant les données ci-dessous.

group1 = [80, 75, 80, 90, 95, 80, 80, 85, 85, 80, 90, 80, 75, 90, 85, 85, 90, 90, 85, 80]
group2 = [75, 70, 80, 85, 90, 75, 85, 80, 80, 75, 80, 75, 70, 85, 80, 75, 80, 80, 90, 80]
group3 = [80, 80, 80, 90, 95, 85, 95, 90, 85, 90, 95, 85, 98, 95, 85, 85, 90, 90, 85, 85]
#Défi 7

Défi 8

Sélectionnez l'un des résultats du questionnaire suivant sur Twitter et effectuez un test statistique. Aussi, considérez les résultats statistiquement.

  • https://twitter.com/maskot1977/status/921705356341927938
  • https://twitter.com/maskot1977/status/1134066208070746112
  • https://twitter.com/maskot1977/status/1185076824016969728
  • https://twitter.com/maskot1977/status/1179953253510811648

Recommended Posts

Distribution et test
Test d'hypothèse et distribution de probabilité
Distribution gaussienne mixte et logsumexp
tester
Statistiques de base et distribution gaussienne
Module de débogage et de test Python
Publiez automatiquement en comptant la date du test
Test de Jack Bella
[Test statistique niveau 2] Distribution de probabilité discrète
Test de charge acridienne
Test Django
Post test
Préparation au test LPIC304 330.1 Concept et théorie de la virtualisation
Test de l'heure actuelle Pytest (date et heure fixes)
À propos de _ et __
Données d'entraînement et données de test (Que sont X_train et y_train?) ②
Distribution de probabilité de niveau 2 du test statistique apprise en Python ②
Énumération des nombres premiers et jugement des nombres premiers en Python
Concept de raisonnement bayésien (2) ... Estimation bayésienne et distribution de probabilité
Distribution de probabilité de test statistique de niveau 2 apprise en Python