2015-10-13 5 views
14

Ich beschloss, Skew und Kurtosis Funktionen in Pandas und Scipy.stats zu vergleichen, und verstehe nicht, warum ich unterschiedliche Ergebnisse zwischen den Bibliotheken bekomme.Was ist der Unterschied zwischen Skew und Kurtosis Funktionen in Pandas vs Scipy?

Soweit ich aus der Dokumentation ersehen kann, berechnen beide Kurtosis-Funktionen mit Fisher-Definition, während für Skew scheint es nicht genug einer Beschreibung zu sagen, ob es große Unterschiede gibt mit, wie sie berechnet werden.

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) 

dies zurück:

skewness: -0.393524456473 
kurtosis: -0.330672097724 

während, wenn ich zu einem Pandas Datenrahmen umwandeln:

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

dies zurück:

skewness: 0 -0.466663 
kurtosis: 0 0.379705 

Entschuldigt, wenn ich habe das geschrieben am falschen Ort; nicht sicher, ob es eine Statistik oder eine Programmierfrage ist.

Antwort

18

Der Unterschied ist auf verschiedene Normalisierungen zurückzuführen. Scipy korrigiert standardmäßig keine Verzerrungen, Pandas dagegen nicht.

können Sie scipy sagen Befangenheits, indem man das bias=False Argument zu korrigieren:

>>> 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 

Es ist kein Weg zu sein scheint Pandas zu sagen, die Bias-Korrektur zu entfernen.

Verwandte Themen