Попробуйте вычислить EWMA на S & P500, но ошибка в «Ошибка в` [.xts` (x, i, which.i = TRUE): индекс за пределами » - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь использовать расчет EWMA на основе S & 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, which.i = TRUE): индекс вне границ

1 Ответ

0 голосов
/ 08 апреля 2019

проблема в том, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...