Автозаполнение строк в R, ежедневный расчет волатильности

мой набор данных выглядит так:

set.seed(1234)
mydata <- data.frame("Returns" = sample(1:20,200, replace=T), "Vol" = 0)

Я рассчитал годовую дневную волатильность для первых 21 строк в новом столбце:

d_vol <- sd(mydata$Returns[1:21]) 
y_vol <- d_vol*sqrt(252)

Приведенный выше расчет заменяет значение в столбце vol, строка 21 на 83,38345.

То, что я пытаюсь узнать, это:

Как свернуть или автозаполнить оставшиеся (22:200) строки формулой, используемой в (y_vol).

Спасибо,


person Jorge Enrique Rangel    schedule 15.11.2019    source источник
comment
вы можете использовать zoo::rollapply(mydata$Returns, 21, sd, fill=NA, align="right") * sqrt(252) или data.table::frollapply(mydata$Returns, 21, sd) * sqrt(252)   -  person chinsoon12    schedule 15.11.2019


Ответы (1)


Используя только базу r:

mydata$Vol[21:200] <- mapply(function(x, y) sd(mydata$Returns[x:y])*sqrt(252), 1:180, 21:200)

Кроме того, к вашему сведению,

mydata <- data.frame(Returns = sample(1:20,200, replace=T), Vol = NA)

работает просто отлично. Нет необходимости в кавычках вокруг имен столбцов. Также вы должны использовать NA вместо 0 в качестве начального значения для Vol.

person dcarlson    schedule 15.11.2019