2015-10-13 8 views
14

Ho deciso di confrontare le funzioni di skew e kurtosis nei panda e scipy.stats e non capisco perché sto ottenendo risultati diversi tra le librerie.Qual è la differenza tra le funzioni di inclinazione e curtosi nei panda rispetto a scipy?

Per quanto posso dedurre dalla documentazione, entrambe le funzioni di curtosi calcolano utilizzando la definizione di Fisher, mentre per l'inclinazione non sembra esserci una descrizione sufficiente per stabilire se ci siano differenze significative nel modo in cui sono calcolate.

import pandas as pd 
import scipy.stats.stats as st 

heights = np.array([1.46, 1.79, 2.01, 1.75, 1.56, 1.69, 1.88, 1.76, 1.88, 1.78]) 

print "skewness:", st.skew(heights) 
print "kurtosis:", st.kurtosis(heights) 

restituisce:

skewness: -0.393524456473 
kurtosis: -0.330672097724 

mentre se converto un dataframe panda:

heights_df = pd.DataFrame(heights) 
print "skewness:", heights_df.skew() 
print "kurtosis:", heights_df.kurtosis() 

restituisce:

skewness: 0 -0.466663 
kurtosis: 0 0.379705 

Mi scuso se ho postato questo nel posto sbagliato; non sono sicuro se si tratta di una statistica o di una domanda di programmazione.

risposta

18

La differenza è dovuta a diverse normalizzazioni. Scipy di default non corregge il bias, mentre i panda lo fanno.

Si può dire SciPy per correggere pregiudizi passando l'argomento bias=False:

>>> x = pandas.Series(np.random.randn(10)) 
>>> stats.skew(x) 
-0.17644348972413657 
>>> x.skew() 
-0.20923623968879457 
>>> stats.skew(x, bias=False) 
-0.2092362396887948 
>>> stats.kurtosis(x) 
0.6362620964462327 
>>> x.kurtosis() 
2.0891062062174464 
>>> stats.kurtosis(x, bias=False) 
2.089106206217446 

Non sembra essere un modo per dire panda per rimuovere la correzione pregiudizi.