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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *