как определяется панда куртоз? - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь получить куртоз с помощью панд.Проведя некоторое исследование, у меня есть

test_series = pd.Series(np.random.randn(5000))
test_series.kurtosis()

, однако вывод:

-0.006755982906479385

Но я думаю, что эксцесс (https://en.wikipedia.org/wiki/Kurtosis) должен быть близок к (возможно, нормализовать)над N-1 вместо N, но здесь это не имеет значения)

(test_series - test_series.mean()).pow(4).mean()/np.power(test_series.std(),4)

, что

2.9908543104146026

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Pandas рассчитывает оценку UNBIASED избыточного куртоза. Куртоз - нормализованный 4-й центральный момент. Чтобы найти объективные оценки кумулянтов, вам нужно k-statistics.

Таким образом, объективная оценка эксцесса составляет (k4/k2**2)

Чтобы проиллюстрировать это:

import pandas as pd
import numpy as np

np.random.seed(11234)
test_series = pd.Series(np.random.randn(5000))
test_series.kurtosis()
#-0.0411811269445872

Теперь мы можем вычислить это явно, используя k-statistics:

n = len(test_series)
S1 = test_series.pow(1).sum()
S2 = test_series.pow(2).sum()
S3 = test_series.pow(3).sum()
S4 = test_series.pow(4).sum()

# Eq (7) and (5) from the k-statistics link
k4 = (-6*S1**4 + 12*n*S1**2*S2 - 3*n*(n-1)*S2**2 -4*n*(n+1)*S1*S3 + n**2*(n+1)*S4)/(n*(n-1)*(n-2)*(n-3))
k2 = (n*S2-S1**2)/(n*(n-1))
# k2 is the same as the N-1 variance: test_series.std(ddof=1)**2

k4/k2**2
#-0.04118112694458816

Если вы хотите лучшего согласования с большим количеством десятичных знаков, вам нужно быть осторожным с суммами, поскольку они становятся довольно большими. Но они идентичны 12 местам.

0 голосов
/ 10 мая 2018

В документации панд говорится следующее

Вернуть несмещенный эксцесс по запрошенной оси, используя определение эксцесса Фишера (эксцесс нормального == 0.0)

Это, вероятно, избыточный эксцесс , определяемый как kurtosis - 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...