Come eseguire un test di kolmogorov-smirnov in python
Il test di Kolmogorov-Smirnov viene utilizzato per verificare se un campione proviene o meno da una determinata distribuzione.
Per eseguire un test di Kolmogorov-Smirnov in Python, possiamo utilizzare scipy.stats.kstest() per un test a un campione o scipy.stats.ks_2samp() per un test a due campioni.
Questo tutorial mostra un esempio di come utilizzare ciascuna funzione nella pratica.
Esempio 1: campione del test Kolmogorov-Smirnov
Supponiamo di avere i seguenti dati di esempio:
from numpy.random import seed from numpy.random import fish #set seed (eg make this example reproducible) seed(0) #generate dataset of 100 values that follows a Poisson distribution with mean=5 data = fish(5, 100)
Il codice seguente mostra come eseguire un test di Kolmogorov-Smirnov su questo campione di 100 valori di dati per determinare se provengono da una distribuzione normale:
from scipy.stats import kstest #perform Kolmogorov-Smirnov test kstest(data, ' norm ') KstestResult(statistic=0.9072498680518208, pvalue=1.0908062873170218e-103)
Dal risultato, possiamo vedere che la statistica del test è 0,9072 e il corrispondente valore p è 1,0908e-103 . Poiché il valore p è inferiore a 0,05, rifiutiamo l’ipotesi nulla. Abbiamo prove sufficienti per affermare che i dati del campione non provengono da una distribuzione normale.
Anche questo risultato non dovrebbe sorprendere poiché abbiamo generato i dati di esempio utilizzando la funzione Poisson() , che genera valori casuali che seguono una distribuzione di Poisson .
Esempio 2: test di Kolmogorov-Smirnov a due campioni
Supponiamo di avere i seguenti due set di dati di esempio:
from numpy.random import seed from numpy.random import randn from numpy.random import lognormal #set seed (eg make this example reproducible) seed(0) #generate two datasets data1 = randn(100) data2 = lognormal(3, 1, 100)
Il codice seguente mostra come eseguire un test di Kolmogorov-Smirnov su questi due campioni per determinare se provengono dalla stessa distribuzione:
from scipy.stats import ks_2samp #perform Kolmogorov-Smirnov test ks_2samp(data1, data2) KstestResult(statistic=0.99, pvalue=4.417521386399011e-57)
Dal risultato, possiamo vedere che la statistica del test è 0,99 e il corrispondente valore p è 4,4175e-57 . Poiché il valore p è inferiore a 0,05, rifiutiamo l’ipotesi nulla. Abbiamo prove sufficienti per affermare che i due set di dati campione non provengono dalla stessa distribuzione.
Anche questo risultato non dovrebbe sorprendere poiché abbiamo generato valori per il primo campione utilizzando la distribuzione normale standard e valori per il secondo campione utilizzando la distribuzione lognormale.
Risorse addizionali
Come eseguire un test di Shapiro-Wilk in Python
Come eseguire un test di Anderson-Darling in Python