[PYTHON] Verteilung und Test

Verteilung

Zufällige und gleichmäßige Verteilung

Lassen Sie uns zunächst eine einheitliche Zufallszahl generieren und deren Verteilung veranschaulichen.

#Importieren Sie eine Bibliothek für den Umgang mit Zufallszahlen.
import random
sample_size = 10 #Anzahl der generierten Zufallszahlen

#Speichern Sie einheitliche Zufallszahlen in dist (Verteilung):Verteilung)
dist = [random.random() for i in range(sample_size)]
#Überprüfen Sie den Inhalt von dist.
dist
#Importieren Sie eine Bibliothek, um Diagramme und Grafiken zu veranschaulichen.
import matplotlib.pyplot as plt
%matplotlib inline
#Zeichnen Sie ein Histogramm.
plt.hist(dist)
plt.grid()
plt.show()

Versuchen Sie, die Anzahl der generierten Zufallszahlen zu erhöhen

Je mehr Zufallszahlen erzeugt werden, desto näher kommt die "ideale" Verteilungsform.

sample_size = 100 #Anzahl der generierten Zufallszahlen

#Speichern Sie einheitliche Zufallszahlen in dist
dist = [random.random() for i in range(sample_size)]

#Zeichnen Sie ein Histogramm.
plt.hist(dist)
plt.grid()
plt.show()
sample_size = 1000 #Anzahl der generierten Zufallszahlen

#Speichern Sie einheitliche Zufallszahlen in dist
dist = [random.random() for i in range(sample_size)]

#Zeichnen Sie ein Histogramm.
plt.hist(dist)
plt.grid()
plt.show()
sample_size = 10000 #Anzahl der generierten Zufallszahlen

#Speichern Sie einheitliche Zufallszahlen in dist
dist = [random.random() for i in range(sample_size)]

#Zeichnen Sie ein Histogramm.
plt.hist(dist)
plt.grid()
plt.show()
sample_size = 100000 #Anzahl der generierten Zufallszahlen

#Speichern Sie einheitliche Zufallszahlen in dist
dist = [random.random() for i in range(sample_size)]

#Zeichnen Sie ein Histogramm.
plt.hist(dist)
plt.grid()
plt.show()

Versuchen Sie, den Behälter zu vergrößern

Die Box, die zum Trennen des Papierkorbs verwendet wird, heißt bin. Beim Zeichnen eines Histogramms hängt die Anzeige davon ab, wie viele Fächer sortiert sind. Wenn Sie die Anzahl der Bins erhöhen, können Sie die feine Form der Verteilung sehen, aber die Anzahl der getrennten Daten pro Bin nimmt natürlich ab.

sample_size = 100000 #Anzahl der generierten Zufallszahlen

#Speichern Sie einheitliche Zufallszahlen in dist
dist = [random.random() for i in range(sample_size)]

#Zeichnen Sie ein Histogramm.
plt.hist(dist, bins=100) #Behälter erhöhen
plt.grid()
plt.show()

Binäre Verteilung

__np.random.binomial (n, p) __ gibt die Anzahl der Gewinnchancen zurück, die angezeigt werden, wenn Sie n-mal ein Roulette spielen, mit einer Wahrscheinlichkeit von p, die eine ungerade Zahl ergibt (Wahrscheinlichkeit 1-p ergibt eine gerade Zahl). Eine solche Verteilung wird als Binomialverteilung bezeichnet.

Binomialverteilung mit gleicher Wahrscheinlichkeit

Spielen Sie 10 Roulettes mit gleicher Wahrscheinlichkeit für Gewinnchancen und zählen Sie die Anzahl der Gewinnchancen. Wiederholen Sie es 10.000 Mal. Wie hoch ist die Wahrscheinlichkeit, dass Gewinnchancen und Gewinnchancen gleich oft auftreten (Wahrscheinlichkeit, dass sie jeweils fünfmal auftreten)?

#Importieren Sie die numerische Berechnungsbibliothek.
import numpy as np
sample_size = 10000 #Anzahl der generierten Zufallszahlen

#Eine ungerade Zahl erscheint mit einer Wahrscheinlichkeit p (Wahrscheinlichkeit 1)-Wenn Sie n-mal Roulette spielen (p gibt eine gerade Zahl an)
#Verteilung der Häufigkeit, mit der eine ungerade Zahl angezeigt wird
dist = [np.random.binomial(n=10, p=0.5) for i in range(sample_size)]

#Zeichnen Sie ein Histogramm.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Wie Sie der obigen Abbildung entnehmen können, beträgt die Wahrscheinlichkeit, dass ungerade und gerade gleich oft auftreten (Wahrscheinlichkeit von jeweils 5), ungefähr 25% (ungefähr 10000 Mal), wenn Sie ein Roulette mit gleicher Wahrscheinlichkeit für ungerade und gerade spielen. 2500 mal). Möglicherweise haben Sie den Eindruck, dass es unerwartet klein ist.

Ist das Roulette-Tintenfisch?

Sie haben andere Gäste beim Roulette im Casino beobachtet. Dann war die Anzahl der ungeraden Zahlen so hoch, dass ich das Roulette für verrückt hielt. Wenn es kein Tintenfisch ist, sollte Roulette ungerade und gerade ungerade und gerade Chancen haben. Dieses Roulette erhielt jedoch 60 von 100 Mal eine ungerade Zahl. Ist das Roulette-Tintenfisch?

Wenn Sie ein Roulette mit gleicher Wahrscheinlichkeit von Gewinnchancen und Gewinnchancen spielen, wie wahrscheinlich ist es, dass Gewinnchancen 60 Mal oder öfter auftreten? Zeichnen wir zunächst die Verteilung.

sample_size = 10000 #Anzahl der generierten Zufallszahlen

#Eine ungerade Zahl erscheint mit einer Wahrscheinlichkeit p (Wahrscheinlichkeit 1)-Beim n-maligen Roulette-Spielen (p gibt eine gerade Zahl an)
#Verteilung der Häufigkeit, mit der eine ungerade Zahl angezeigt wird
dist = [np.random.binomial(n=100, p=0.5) for i in range(sample_size)]

#Zeichnen Sie ein Histogramm.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Berechnen wir mit der gleichen Berechnung wie oben "die Wahrscheinlichkeit, 100 Mal Roulette zu spielen und eine ungerade Zahl von 60 Mal oder mehr zu erhalten".

sample_size = 10000 #Anzahl der generierten Zufallszahlen

#Eine ungerade Zahl erscheint mit einer Wahrscheinlichkeit p (Wahrscheinlichkeit 1)-Beim n-maligen Roulette-Spielen (p gibt eine gerade Zahl an)
#Verteilung der Häufigkeit, mit der eine ungerade Zahl angezeigt wird
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("p-Wert: %(p)s " %locals())

Nachdem wir 100 Roulettes mit gleichen Chancen auf Gewinnchancen gespielt hatten, stellten wir fest, dass die Wahrscheinlichkeit von "zufälligen" 60 oder mehr Gewinnchancen weniger als 5% beträgt. Mit anderen Worten, für ein Roulette mit einer ungeraden Anzahl von 60 oder mehr von 100 scheint es gut zu sein, zu vermuten, dass das Roulette verrückt ist.

Das p zu diesem Zeitpunkt wird als p-Wert (signifikante Wahrscheinlichkeit) bezeichnet.

Herausforderung 1

Für ein Roulette, das eine ungerade Zahl mehr als 60 von 100 ergibt, scheint es gut zu sein, zu vermuten, dass das Roulette verrückt ist. Wenn dann eine ungerade Zahl 6-mal oder öfter von 10-mal erscheint, ist die Wahrscheinlichkeit, dass eine ungerade Zahl erscheint, gleich 60% </ u>, aber können Sie sagen, dass das Roulette verrückt ist? Bitte berechnen Sie den p-Wert und antworten Sie.

#Herausforderung 1

Binäre Verteilung, die nicht gleich wahrscheinlich ist

Es wird geschätzt, dass 5% aller Populationen eine Infektion haben. Wenn 20 Personen zufällig aus allen Einwohnern ausgewählt würden, wie viele Personen wären in der extrahierten Bevölkerung betroffen? Eine solche Verteilung ist auch eine Binomialverteilung. Zeichnen wir eine Verteilung.

sample_size = 10000 #Anzahl der generierten Zufallszahlen

#Eine ungerade Zahl erscheint mit einer Wahrscheinlichkeit p (Wahrscheinlichkeit 1)-Beim n-maligen Roulette-Spielen (p gibt eine gerade Zahl an)
#Verteilung der Häufigkeit, mit der eine ungerade Zahl angezeigt wird
dist = [np.random.binomial(n=20, p=0.05) for i in range(sample_size)]

#Zeichnen Sie ein Histogramm.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Herausforderung 2

Es wird geschätzt, dass 5% aller Populationen eine Infektion haben. Wenn 100 Personen zufällig aus allen Einwohnern ausgewählt wurden, waren mehr als 10 Betroffene in der extrahierten Bevölkerung.

(1) Ungefähre Wahrscheinlichkeit, dass dies zufällig geschieht.

(2) Wie ist das Ergebnis zu interpretieren?

#Herausforderung 2

Normalverteilung

__random.normalvariate (mu, sigma) __ ist eine Funktion, die Zufallszahlen generiert, die einer Normalverteilung folgen (mu ist der Mittelwert, Sigma ist die Standardabweichung).

Standardnormalverteilung

Eine Normalverteilung mit einem Mittelwert von 0 und einer Standardabweichung von 1 wird als "Standardnormalverteilung" bezeichnet. Zeichnen wir eine Standardnormalverteilung.

sample_size = 10000 #Anzahl der generierten Zufallszahlen

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

#Zeichnen Sie ein Histogramm.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Wie groß ist die Wahrscheinlichkeit, dass eine Zufallszahl, die einer Standardnormalverteilung folgt, einen Wert von 2 oder mehr ausgibt? Berechnen wir.

sample_size = 10000 #Anzahl der generierten Zufallszahlen

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("p-Wert: %(p)s " %locals())

Abweichungswert

Es wird angenommen, dass der "Abweichungswert", der häufig in Universitätsprüfungen verwendet wird, einer Normalverteilung mit einem Durchschnitt von 50 und einer Standardabweichung von 10 folgt. Zeichnen wir eine Verteilung. Stellen Sie sich hier die Anzahl der Schüler auf der vertikalen Achse vor.

sample_size = 10000 #Anzahl der generierten Zufallszahlen

#Normalverteilung mit Mittelwert 50 und Standardabweichung 10
dist = [random.normalvariate(mu=50, sigma=10) for i in range(sample_size)]

#Zeichnen Sie ein Histogramm.
plt.hist(dist, bins=100)
plt.grid()
plt.show()

Herausforderung 3

Wie viele von 10.000 Studenten haben eine Abweichung von 70 oder mehr?

#Herausforderung 3

Prüfung

import numpy as np #Bibliothek zur numerischen Berechnung
import scipy as sp #Wissenschaftliche Berechnungsbibliothek
from scipy import stats #Statistische Berechnungsbibliothek

Chi-Quadrat-Test

Der Chi-Quadrat-Test ist eine Methode, mit der geprüft wird, ob zwei Verteilungen gleich sind.

Wenn ich die Würfel 60 Mal würfelte und zählte, wie oft jeder Wurf herauskam, wurde es wie folgt.

Würfelwurf
Anzahl der Vorkommen 171067155

Testen wir zu diesem Zeitpunkt, ob es der Verteilung der theoretischen Werte folgt (gleichmäßige Verteilung).

significance = 0.05
o = [17, 10, 6, 7, 15, 5] #Gemessener Wert
e = [10, 10, 10, 10, 10, 10] #Theoretischer Wert

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

print('Chi2-Wert ist%(chi2)s' %locals())
print('Die Wahrscheinlichkeit ist%(p)s' %locals())

if p < significance:
    print('Signifikanzniveau%(significance)Es gibt einen signifikanten Unterschied in s' %locals())
else:
    print('Signifikanzniveau%(significance)Es gibt keinen signifikanten Unterschied in s' %locals())

Der Chi2-Wert beträgt 12,4 Die Wahrscheinlichkeit beträgt 0,029699459203520212 Bei einem Signifikanzniveau von 0,05 gibt es einen signifikanten Unterschied

Übung 4

Wenn die Versandqualitäten eines bestimmten Gemüses, das nach der A-Methode und der B-Methode angebaut wird, wie in der folgenden Tabelle angegeben sind, sollten wir berücksichtigen, dass ein Zusammenhang zwischen diesen Anbaumethoden und der Produktqualität besteht?

Ausgezeichnet Gut Ja Total
Eine Methode 12 30 58 100
B-Methode 14 90 96 200
total 26 120 154 300
#Übung 4

Ungepaarter t-Test

#Ungepaarter t-Test
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('t Wert ist%(t)s' %locals())
print('Die Wahrscheinlichkeit ist%(p)s' %locals())

if p < significance:
    print('Signifikanzniveau%(significance)Es gibt einen signifikanten Unterschied in s' %locals())
else:
    print('Signifikanzniveau%(significance)Es gibt keinen signifikanten Unterschied in s' %locals())

Der t-Wert beträgt -3,214043146821967 Die Wahrscheinlichkeit beträgt 0,006243695014300228 Bei einem Signifikanzniveau von 0,05 gibt es einen signifikanten Unterschied

Herausforderung 5

Der gleiche arithmetische Test wurde in zwei Klassen durchgeführt, der 6. Klasse 1. Klasse und der 6. Klasse 2. Klasse, und die Bewertungsergebnisse wurden erhalten. Bitte testen Sie, ob es einen Punktunterschied zwischen den beiden Klassen gibt.

6. Klasse 1 Gruppe Punktzahl 6. Klasse 2. Gruppe Punktzahl
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] 
#Herausforderung 5

Gepaarter t-Test

#Gepaarter T-Test
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('t Wert ist%(t)s' %locals())
print('Die Wahrscheinlichkeit ist%(p)s' %locals())

if p < significance:
    print('Signifikanzniveau%(significance)Es gibt einen signifikanten Unterschied in s' %locals())
else:
    print('Signifikanzniveau%(significance)Es gibt keinen signifikanten Unterschied in s' %locals())

Der t-Wert beträgt -2,9923203754253302 Die Wahrscheinlichkeit beträgt 0,02016001617368161 Bei einem Signifikanzniveau von 0,05 gibt es einen signifikanten Unterschied

Herausforderung 6

Bitte testen Sie, ob es einen Unterschied zwischen der Landessprache und der arithmetischen Punktzahl gibt.

Gruppe der 6. Klasse Japanisch Arithmetik
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]
#Herausforderung 6

Varianzanalyse

#Dispersive Analyse eines Faktors
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('f Wert ist%(f)s' %locals())
print('Die Wahrscheinlichkeit ist%(p)s' %locals())

if p < significance:
    print('Signifikanzniveau%(significance)Es gibt einen signifikanten Unterschied in s' %locals())
else:
    print('Signifikanzniveau%(significance)Es gibt keinen signifikanten Unterschied in s' %locals())

Der f-Wert beträgt 0,09861516667148518 Die Wahrscheinlichkeit beträgt 0,9064161716556407 Signifikanzniveau 0,05, kein signifikanter Unterschied

Herausforderung 7

Führen Sie eine Dispersionsanalyse mit den folgenden Daten durch.

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]
#Herausforderung 7

Herausforderung 8

Wählen Sie eines der folgenden auf Twitter durchgeführten Fragebogenergebnisse aus und führen Sie einen statistischen Test durch. Betrachten Sie die Ergebnisse auch statistisch.

  • 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

Verteilung und Test
Hypothesentest und Wahrscheinlichkeitsverteilung
Gemischte Gaußsche Verteilung und logsumexp
Prüfung
Grundlegende Statistik und Gaußsche Verteilung
Python-Debug- und Testmodul
Automatisch buchen durch Herunterzählen des Testdatums
Jack Bella Test
[Statistische Teststufe 2] Diskrete Wahrscheinlichkeitsverteilung
Locust-Load-Test
Django-Test
Post-Test
LPIC304 Testvorbereitung 330.1 Virtualisierungskonzept und -theorie
Pytest Aktueller Zeittest (festes Datum und Uhrzeit)
Über _ und __
Trainingsdaten und Testdaten (Was sind X_train und y_train?) ②
In Python ② erlernte statistische Wahrscheinlichkeitsverteilung für Testgrad 2
Primzahlaufzählung und Primzahlbeurteilung in Python
Konzept des Bayes'schen Denkens (2) ... Bayes'sche Schätzung und Wahrscheinlichkeitsverteilung
In Python ① erlernte statistische Wahrscheinlichkeitsverteilung für Testgrad 2