Come eseguire un test di shapiro-wilk in python
Il test di Shapiro-Wilk è un test di normalità. Viene utilizzato per determinare se un campione proviene o meno da una distribuzione normale .
Per eseguire un test Shapiro-Wilk in Python possiamo utilizzare la funzione scipy.stats.shapiro() , che utilizza la seguente sintassi:
scipy.stats.shapiro(x)
Oro:
- x: una tabella di dati campione.
Questa funzione restituisce una statistica di test e un valore p corrispondente.
Se il valore p è inferiore a un certo livello di significatività, allora abbiamo prove sufficienti per affermare che i dati del campione non provengono da una distribuzione normale.
Questo tutorial mostra alcuni esempi di come utilizzare questa funzionalità nella pratica.
Esempio 1: test di Shapiro-Wilk su dati distribuiti normalmente
Supponiamo di avere i seguenti dati di esempio:
from numpy.random import seed from numpy.random import randn #set seed (eg make this example reproducible) seed(0) #generate dataset of 100 random values that follow a standard normal distribution data = randn(100)
Il codice seguente mostra come eseguire un test Shapiro-Wilk su questo campione di 100 valori di dati per determinare se provengono da una distribuzione normale:
from scipy.stats import shapiro #perform Shapiro-Wilk test shapiro(data) ShapiroResult(statistic=0.9926937818527222, pvalue=0.8689165711402893)
Dal risultato, possiamo vedere che la statistica del test è 0,9927 e il corrispondente valore p è 0,8689 .
Poiché il valore p non è inferiore a 0,05, non riusciamo a rifiutare l’ipotesi nulla. Non abbiamo prove sufficienti per affermare che i dati del campione non provengano da una distribuzione normale.
Questo risultato non dovrebbe sorprendere poiché abbiamo generato i dati di esempio utilizzando la funzione randn() , che genera valori casuali che seguono una distribuzione normale standard.
Esempio 2: test di Shapiro-Wilk su dati distribuiti in modo non normale
Supponiamo ora 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 Shapiro-Wilk su questo campione di 100 valori di dati per determinare se provengono da una distribuzione normale:
from scipy.stats import shapiro #perform Shapiro-Wilk test shapiro(data) ShapiroResult(statistic=0.9581913948059082, pvalue=0.002994443289935589)
Dal risultato, possiamo vedere che la statistica del test è 0,9582 e il corrispondente valore p è 0,00299 .
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 .
Risorse addizionali
I seguenti tutorial spiegano come eseguire altri test di normalità in vari software statistici:
Come eseguire un test di Shapiro-Wilk in R
Come eseguire un test di Anderson-Darling in Python
Come eseguire un test di Kolmogorov-Smirnov in Python