Рекурсивно оцененная волатильность доходности - PullRequest
0 голосов
/ 02 мая 2020

Я бы хотел рекурсивно вычислить волатильность (стандартное отклонение) возвратов, то есть для даты t использовать только данные до t.

У меня есть данные в следующем формате:

my_data <- data.frame(Date = 2001:2005, Return_1 = c(0.2, 0.3, 0.4, 0.2, 0.3), Return_2 = c(0.1, 0.2, 0.5, 0.1, 0.6))

и, предположительно, на выходе будет новый фрейм данных, только возвращаемые столбцы будут значениями волатильности.

Спасибо за любую помощь в том, как я могу подойти к этому.

1 Ответ

0 голосов
/ 02 мая 2020

Делает ли это то, что вы хотите?

sd_up_to_date = data.frame(lapply(my_data[,-1],function(ret) sapply(seq_along(ret),function(time_point) sd(ret[1:time_point]))))

str(sd_up_to_date)

Вывод:

'data.frame':   5 obs. of  2 variables:
 $ Return_1: num  NA 0.0707 0.1 0.0957 0.0837
 $ Return_2: num  NA 0.0707 0.2082 0.1893 0.2345

Объяснение:

lapply(my_data[,-1],function(ret) ... = учитывать каждый из элементов my_data, кроме первый (то есть, «возврат»)

sapply(seq_along(ret),function(time_point) sd(ret[1:time_point])) = учитывает каждый момент времени по каждому вектору возвратов и вычисляет стандартное отклонение (sd ()) от первого элемента до этого

data.frame( ... ) = превратить все это в data.frame

Обратите внимание, что sd для единственного момента времени - это NA, поэтому все первые элементы - это NA.
После этого 0.0707 сд (c (0,2,0,3)), 0,1 - сд (c (0,2,0,3,0,4)) и т. д ...

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