2015-08-19 4 views
1

Я пишу алгоритм и вычисляю эксцесс распределения ежедневных доходов. Я стараюсь, чтобы мои вычисления эксцесса соответствовали моим вычислениям Excel. Расчет в Excel якобы использует формулу в верхней части этой страницы: http://www.macroption.com/kurtosis-excel-kurt/В чем разница между этим кодом и этой формулой?

Вот мой код, используемый для эмуляции, что формула (возврат является NumPy массив, состоящий из серии дневных доходностей):

def kurtosis(returns): 
    n = len(returns) 
    avg = np.average(returns) 
    std = np.std(returns) 
    coefficient = 1.0 * n * (n+1)/((n-1) * (n-2) * (n-3) * std**4.0) 
    term = (3 * (n-1)**2.0)/((n-2) * (n-3)) 
    summation = 0 

    for x in returns: 
     summation += ((x - avg)) ** 4.0 
    kurt = coefficient * summation - term 

    return kurt 

Видимо есть разница между формулой, используемой excel и моим кодом ... Excel дает эксцесс 1,94, тогда как мой код дает значение 2,81.

Кто-нибудь знает, почему эти два значения различны?

+2

Вы можете попробовать другое 'ddof' для' std', например. 'Ddof = 1 '. Проверьте документацию этой функции. Обычно эффект выбора популяции v sample dof мал, но с 's ** 4' эффект будет усилен. – hpaulj

+0

Вы также можете играть с 'scipy.stats.kurtosis' и искать другие вопросы' [numpy] kurtosis' SO. – hpaulj

+0

Каков образец данных, который дает разные значения? Если он слишком большой для публикации здесь, вы можете найти небольшой образец данных, который вы могли бы разместить здесь, что дает разные ответы? – Paul

ответ

0

Переписывая мой комментарий:

Предоставление параметра ddof=1 в np.std() меняет расчет от населения к образцу (п-1). Обычно изменение в std мало, но с использованием s**4, небольшие изменения в s будут усилены.

Смежные вопросы