SciPy - Statistik
Alle Statistikfunktionen befinden sich im Unterpaket scipy.stats und eine ziemlich vollständige Auflistung dieser Funktionen kann unter Verwendung von erhalten werden info(stats)Funktion. Eine Liste der verfügbaren Zufallsvariablen erhalten Sie auch von derdocstringfür das Statistik-Unterpaket. Dieses Modul enthält eine Vielzahl von Wahrscheinlichkeitsverteilungen sowie eine wachsende Bibliothek statistischer Funktionen.
Jede univariate Verteilung hat eine eigene Unterklasse, wie in der folgenden Tabelle beschrieben -
Sr. Nr. | Klasse & Beschreibung |
---|---|
1 | rv_continuous Eine generische kontinuierliche Zufallsvariablenklasse für Unterklassen |
2 | rv_discrete Eine generische diskrete Zufallsvariablenklasse für Unterklassen |
3 | rv_histogram Erzeugt eine Verteilung, die durch ein Histogramm angegeben wird |
Normale kontinuierliche Zufallsvariable
Eine Wahrscheinlichkeitsverteilung, bei der die Zufallsvariable X einen beliebigen Wert annehmen kann, ist eine kontinuierliche Zufallsvariable. Das Schlüsselwort location (loc) gibt den Mittelwert an. Das Schlüsselwort scale (scale) gibt die Standardabweichung an.
Als Beispiel für die rv_continuous Klasse, norm object erbt von ihm eine Sammlung generischer Methoden und vervollständigt sie mit Details, die für diese bestimmte Distribution spezifisch sind.
Um die CDF an mehreren Punkten zu berechnen, können wir eine Liste oder ein NumPy-Array übergeben. Betrachten wir das folgende Beispiel.
from scipy.stats import norm
import numpy as np
print norm.cdf(np.array([1,-1., 0, 1, 3, 4, -2, 6]))
Das obige Programm erzeugt die folgende Ausgabe.
array([ 0.84134475, 0.15865525, 0.5 , 0.84134475, 0.9986501 ,
0.99996833, 0.02275013, 1. ])
Um den Median einer Verteilung zu ermitteln, können wir die Percent Point Function (PPF) verwenden, die die Umkehrung der CDF ist. Lassen Sie uns anhand des folgenden Beispiels verstehen.
from scipy.stats import norm
print norm.ppf(0.5)
Das obige Programm erzeugt die folgende Ausgabe.
0.0
Um eine Folge von Zufallsvariablen zu generieren, sollten wir das Schlüsselwortargument size verwenden, das im folgenden Beispiel gezeigt wird.
from scipy.stats import norm
print norm.rvs(size = 5)
Das obige Programm erzeugt die folgende Ausgabe.
array([ 0.20929928, -1.91049255, 0.41264672, -0.7135557 , -0.03833048])
Die obige Ausgabe ist nicht reproduzierbar. Verwenden Sie die Startfunktion, um dieselben Zufallszahlen zu generieren.
Gleichmäßige Verteilung
Mit der Gleichfunktion kann eine Gleichverteilung erzeugt werden. Betrachten wir das folgende Beispiel.
from scipy.stats import uniform
print uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)
Das obige Programm erzeugt die folgende Ausgabe.
array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])
Diskrete Verteilung erstellen
Lassen Sie uns eine Zufallsstichprobe erstellen und die beobachteten Frequenzen mit den Wahrscheinlichkeiten vergleichen.
Binomialverteilung
Als Beispiel für die rv_discrete class, das binom objecterbt davon eine Sammlung generischer Methoden und vervollständigt sie mit Details, die für diese bestimmte Distribution spezifisch sind. Betrachten wir das folgende Beispiel.
from scipy.stats import uniform
print uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)
Das obige Programm erzeugt die folgende Ausgabe.
array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])
Beschreibende Statistik
Die grundlegenden Statistiken wie Min, Max, Mean und Varianz verwenden das NumPy-Array als Eingabe und geben die entsprechenden Ergebnisse zurück. Einige grundlegende statistische Funktionen finden Sie in derscipy.stats package sind in der folgenden Tabelle beschrieben.
Sr. Nr. | Bedienungsanleitung |
---|---|
1 | describe() Berechnet mehrere beschreibende Statistiken des übergebenen Arrays |
2 | gmean() Berechnet den geometrischen Mittelwert entlang der angegebenen Achse |
3 | hmean() Berechnet den harmonischen Mittelwert entlang der angegebenen Achse |
4 | kurtosis() Berechnet die Kurtosis |
5 | mode() Gibt den Modalwert zurück |
6 | skew() Testet die Schiefe der Daten |
7 | f_oneway() Führt eine Einweg-ANOVA durch |
8 | iqr() Berechnet den Interquartilbereich der Daten entlang der angegebenen Achse |
9 | zscore() Berechnet den z-Wert jedes Werts in der Stichprobe relativ zum Stichprobenmittelwert und zur Standardabweichung |
10 | sem() Berechnet den Standardfehler des Mittelwerts (oder Standardmessfehlers) der Werte im Eingabearray |
Einige dieser Funktionen haben eine ähnliche Version in der scipy.stats.mstats, die für maskierte Arrays funktionieren. Lassen Sie uns dies anhand des folgenden Beispiels verstehen.
from scipy import stats
import numpy as np
x = np.array([1,2,3,4,5,6,7,8,9])
print x.max(),x.min(),x.mean(),x.var()
Das obige Programm erzeugt die folgende Ausgabe.
(9, 1, 5.0, 6.666666666666667)
T-Test
Lassen Sie uns verstehen, wie nützlich T-Test in SciPy ist.
ttest_1samp
Berechnet den T-Test für den Mittelwert EINER Gruppe von Bewertungen. Dies ist ein zweiseitiger Test für die Nullhypothese, dass der erwartete Wert (Mittelwert) einer Stichprobe unabhängiger Beobachtungen 'a' gleich dem angegebenen Populationsmittelwert ist.popmean. Betrachten wir das folgende Beispiel.
from scipy import stats
rvs = stats.norm.rvs(loc = 5, scale = 10, size = (50,2))
print stats.ttest_1samp(rvs,5.0)
Das obige Programm erzeugt die folgende Ausgabe.
Ttest_1sampResult(statistic = array([-1.40184894, 2.70158009]),
pvalue = array([ 0.16726344, 0.00945234]))
Vergleich zweier Proben
In den folgenden Beispielen gibt es zwei Stichproben, die entweder aus derselben oder einer unterschiedlichen Verteilung stammen können, und wir möchten testen, ob diese Stichproben dieselben statistischen Eigenschaften aufweisen.
ttest_ind- Berechnet den T-Test für die Mittelwerte zweier unabhängiger Stichproben. Dies ist ein zweiseitiger Test für die Nullhypothese, dass zwei unabhängige Stichproben identische Durchschnittswerte (erwartete Werte) aufweisen. Bei diesem Test wird davon ausgegangen, dass die Populationen standardmäßig identische Varianzen aufweisen.
Wir können diesen Test verwenden, wenn wir zwei unabhängige Proben aus derselben oder einer unterschiedlichen Population beobachten. Betrachten wir das folgende Beispiel.
from scipy import stats
rvs1 = stats.norm.rvs(loc = 5,scale = 10,size = 500)
rvs2 = stats.norm.rvs(loc = 5,scale = 10,size = 500)
print stats.ttest_ind(rvs1,rvs2)
Das obige Programm erzeugt die folgende Ausgabe.
Ttest_indResult(statistic = -0.67406312233650278, pvalue = 0.50042727502272966)
Sie können dasselbe mit einem neuen Array gleicher Länge, aber mit einem variierten Mittelwert testen. Verwenden Sie einen anderen Wert inloc und testen Sie das gleiche.