неуравновешенная статистика - PullRequest
1 голос
/ 02 июня 2019

Я заметил, что асимметрия, возвращаемая из статистики scipy, невернаPandas.skew () на самом деле обеспечивает лучшие результаты.Недавно я пытался воспроизвести классическую статью French & Schwert, «Ожидаемая доходность акций и волатильность».Я использую данные S & P500 с 1928 по 1984 год. Я следую формуле в статье для стандартного отклонения доходности, и я могу получить тот же результат для среднего значения, стандартного отклонения от стандартного отклонения.Тем не менее, когда я использую функцию scipy.stats.skew, я не могу не получить ни одного числа из std dev возврата sp.Функция возвращает «nan», где ясно, что она должна возвращать значение.Я переключаюсь на Pandas.skew ().он вернул мне правильное значение, как в газете.

Очевидно, что-то не так с функцией scipy.stats.skew ().

scipy.stats.skew () pandas.skew ()

  1. Результаты по Scipy.stats.skew () ['Adj Close_gspc', 'Adj Close_gspc_lag', 'SP_Return', 'SP_Return_square', 'SP_Return_lag', 'SP_varianceMon', 'SP_varianceMon_sqrRoot']

массив ([0.6922229, 0.69186265, -0.11292165, 4.23571807, -1.973607, 5.39898), 5.39898), 5.397

результаты по пандам:

Adj Close_gspc 0.693745 Adj Close_gspc_lag 0.693384 SP_Return -0.113170 SP_Return_square 4.245033 SP_Return_lag -1.959904 SP_varianceMon 5.410609 2.800

1 Ответ

1 голос
/ 02 июня 2019

Вы не предоставили достаточно информации или образца кода для воспроизведения полученного вами nan.

Чтобы scipy.stats.skew вычислило то же значение, что и метод skew() в Pandas, добавьте аргумент bias=False.

Вот пример.

Во-первых, импорт:

In [21]: import numpy as np                                                                      

In [22]: import pandas as pd                                                                     

In [23]: from scipy.stats import skew                                                            

Генерировать некоторые данные:

In [24]: np.random.seed(8675309)                                                                 

In [25]: x = np.random.weibull(0.2, size=15)                                                     

Вычислите перекос со Сканпи и с Пандами:

In [26]: skew(x, bias=False)                                                                     
Out[26]: 3.7582525674514544

In [27]: pd.Series(x).skew()                                                                     
Out[27]: 3.7582525674514544
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...