Итак, у меня есть набор данных с (бизнес) ежедневными данными за период с 2008 по 2011 год для 5 переменных, хранящихся в pandas DataFrame под названием storeddata
. Я хочу вычислить экспоненциально взвешенную скользящую среднюю матрицу ковариации за каждый день. У меня есть период инициации (скажем, с 2008-01-01 по 2009-01-01), для которого я вычисляю матрицу ковариации, матрицу 5x5, называемую covmat1
.Матрица Numpy не обновляет значение
Теперь я хочу итерации через storeddata
-DataFrame и после 2009-01-01 обновить dict под названием covfinaldict
с матрицей 5x5 за каждый рабочий день. Я попытался с этим блоком кода:
from pandas.tseries.offsets import BDay
import pandas as pd
import numpy as np
import datetime as dt
zeromatrix=np.mat(np.zeros((5,5)))
for row in storeddata.iterrows():
if row[0]>dt.datetime(2009,01,01):
mat1=covfinaldict[row[0]-BDay(1)]
for x in range(5):
for y in range(5):
if x==y:
zeromatrix[x,y]=sqrt(0.93*(mat1[x,y]**2)+0.07*(row[1][x+1]**2))
else:
zeromatrix[x,y]=0.93*mat1[x,y]+0.07*row[1][x+1]*row[1][y+1]
covfinaldict[row[0]]=zeromatrix
else:
covfinaldict[row[0]]=covmat1
Формулы аппроксимация экспоненциально взвешенного скользящего среднего, детали которых не имеют никакого отношения. Вычисление не работает в том смысле, что я получаю одну и ту же матрицу 5x5 (хотя она отличается от covmat1
) на каждый день после 2009-01-01. Кроме того, если я запускаю sqrt(0.93*(mat1[x,y]**2)+0.07*(row[1][x+1]**2))
в консоли, я получаю 0.1613
, если я запустил zeromatrix[x,y]
, я получаю 0.158
(x = 4, y = 4). Для меня это не имеет смысла. Как левая часть уравнения не может быть равна правой стороне? Пояснения очень ценятся.
Ницца, работал! У вас не было бы объяснений, почему это исправление или, возможно, ссылка? – 2014-09-04 09:27:07
Добавлено как объяснение, так и ссылка, спасибо –