Как получить волатильность GARCH для 100 компаний в одном CSV в r?

Я новичок в среде программирования R. Может ли кто-нибудь помочь мне со следующей проблемой:

у меня есть .csvфайл с данными о доходности акций для 100 с лишним фирм (по 207 дней каждая). Мне нужно оценить GARCH волатильности для каждой фирмы и сохраните выпуск для всех фирм в одном .csvфайл. Мои данные выглядят так:

StockData

Это то, что я пробовал до сих пор, но безуспешно:

library(fGarch)
stdata <- read.csv("StockData.csv", header = T)
out <- vector("list",c(437))
for(j in length(names(stdata[,-1]))) {
    fit = garchFit(~arma(1,0)+garch(1,1), data = stdata[,j], trace = F)
    volatility(fit)
    out = as.data.frame(volatility(fit))
}
write.csv(out, 'volatility.csv')

Я искал различные форумы (в том числе некоторые на Stackru) и нашел коды выше. Но на выходе .csvфайл выводит волатильность только для последней фирмы (100-й фирмы). Я также получаю следующее предупреждающее сообщение:

Warning message:
Using formula(x) is deprecated when x is a character vector of length > 1.
  Consider formula(paste(x, collapse = " ")) instead. 

Я могу получить волатильность для отдельных фирм, запустив garchFitкоманду 100 раз, но было бы намного проще (и эффективнее) сделать это в цикле. Мой ожидаемый результат будет следующим:

SampleVolatilityOutput

Скажите, пожалуйста, есть ли способ получить сразу все волатильности за один .csv файл.

1 ответ

Вы получаете результат, потому что вы перезаписываете «out» для каждого j в цикле. Если вы храните его в матрице, т.е. каждый столбец представляет собой волатильность для одной фирмы, вам не нужен список:

      library(fGarch)
stdata <- matrix(rnorm(100 * 207), ncol = 100)
out <- matrix(rep(NA, 100*207), ncol = 100)
for (j in 1:ncol(stdata)) {
  fit <-
    garchFit(
      formula = ~ arma(1, 0) + garch(1, 1),
      data = stdata[, j],
      trace = F
    )
  out[, j] = volatility(fit)
}

write.csv(out, 'volatility.csv')
Другие вопросы по тегам