Численная проблема устойчивости в расчете скользящей корреляции Панд - PullRequest
0 голосов
/ 30 ноября 2018

Я столкнулся со странным поведением вращающейся корреляции Панд.В приведенном ниже фрагменте кода я бы предположил, что v1 == v2 - правда, но это не такЭто вызывает inf в скользящей корреляции (c1 против c2, где c2 в порядке, но c1 «неправильный», по моему мнению):

import pandas as pd
a = pd.Series([1e5, 0, 0, 0, 0])
b = pd.Series([9.45] * 5)
c1 = a.rolling(5).corr(b).iloc[4]
c2 = a.corr(b)
v1 = a.rolling(5).cov(b).iloc[4]
v2 = a.cov(b)

Я проверил его на нескольких машинах, а abs(v1) - O (1e-11), v2 - это 0, а c - это инф.Это известная проблема или нет?И почему прокатное покрытие отличается от ванильного покрытия?

1 Ответ

0 голосов
/ 30 ноября 2018

Ковариация это не просто число.Это мера.Его значение довольно сложно интерпретировать.Учитывая ценность только это еще сложнее.Вот почему корреляция обычно используется вместо ковариации (как обновленная версия).Значения 0 и 1e-11 различаются, но имеют одинаковое значение - выборки, по-видимому, не имеют линейной зависимости.

Что касается расчета pandas.Series.cov(pandas.Series) и pandas.Series.rolling(..., ddof=...).cov(pandas.Series), то используются (слегка?) Разные алгоритмы: NumPy Cov и Rolling Cov (на самом деле ewmcov ) соответственно.

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