В чем разница между функциями перекоса и эксцесса в pandas против scipy?
Я решил сравнить функции перекоса и эксцесса в pandas и scipy.stats, и не понимаю, почему я получаю разные результаты между библиотеками.
Насколько я могу судить по документации, обе функции куртоза вычисляются с использованием определения Фишера, тогда как для перекоса, похоже, недостаточно описания, чтобы определить, существуют ли какие-либо существенные отличия от того, как они вычисляются.
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)
это возвращает:
skewness: -0.393524456473
kurtosis: -0.330672097724
тогда как если я конвертирую в pandas dataframe:
heights_df = pd.DataFrame(heights)
print "skewness:", heights_df.skew()
print "kurtosis:", heights_df.kurtosis()
это возвращает:
skewness: 0 -0.466663
kurtosis: 0 0.379705
Извините, если я разместил это в неправильном месте; не уверен, что это статистика или вопрос программирования.
Ответы
Ответ 1
Разница обусловлена различными нормализациями. Scipy по умолчанию не корректирует смещение, тогда как pandas делает.
Вы можете сказать scipy, чтобы исправить смещение, передав аргумент 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
Кажется, не существует способа сказать pandas удалить коррекцию смещения.