#r
#r
Вопрос:
Я пытаюсь использовать расчет EWMA для S amp; P500 на основе цены закрытия.
Я получил данные о ежедневном возврате и написал кодировку следующим образом:
sigma.ewma=function(r,lambda) {
v=r[1]^2
for (i in 2:length(r)) {
v[i]=lambda*v[i-1] (1-lambda)*r[i-1]^2
}
return(sqrt(v))
}
И тогда я делаю
sigma.ewma(r.0.94)
Но он продолжает показывать мне ошибку на
Ошибка в ‘[.xts'(x, i, который.i = TRUE) : нижний индекс выходит за пределы
Комментарии:
1. привет, можешь опубликовать вывод
dput(head(r))
внутри своего вопроса?2. привет! спасибо за внимание, вывод — structure(c(0.01, -0.0398913290273013, 0.00178731057409554, -0.0162019745762807, 0.0564523771975782, 0.00342466088136373), . indexTZ = «UTC», class = c(«xts», «zoo»), .indexCLASS = c(«POSIXct», «POSIXt»),tclass = «Дата», tzone = «UTC», src = «yahoo», updated = structure(1554704353.16849, class = c («POSIXct», «POSIXt»)), index = structure(c(946857600, 946944000, 947030400, 947116800, 947203200, 947462400), tzone = «UTC», tclass = c(«POSIXct», «POSIXt»)), .Dim = c (6L, 1L), .Dimnames = list(NULL, «SPY.Close»))
Ответ №1:
проблема в том, что R не знает, что v
это будет вектор, потому что вы определяете v
как первый компонент r
квадрата. Следовательно, R считает, что v
имеет только один элемент, и проблема возникает при попытке доступа v[2]
внутри цикла.
Попробуйте это:
sigma.ewma=function(r, lambda) {
v <- r
v[1] <- r[1]^2
for (i in 2:length(r)) {
v[i]=lambda*v[i-1] (1-lambda)*r[i-1]^2
}
return(sqrt(v))
}
sigma.ewma(r, 0.94)
SPY.Close
2000-01-03 0.01000000
2000-01-04 0.01000000
2000-01-05 0.01376514
2000-01-06 0.01335298
2000-01-07 0.01354083
2000-01-10 0.01906738