Как построить функцию acf для данных временного ряда, используя `apply` в R

#r

#r

Вопрос:

У меня есть данные временных рядов. Я хотел бы применить acf функцию и отобразить результат для всех столбцов. Я хотел бы также, чтобы график автоматически генерировал заголовок для каждого одномерного ряда.

Я попробовал следующее:

 library(quantmod)
library(TSclust)
library(ggplot2)
library(tsibble)
library(vcd)
## Prepare the data
symbols = c('AZN', 'BP', 'AAPL')

## Start and end time
start = as.Date("2015-01-05")
until = as.Date("2015-12-31")

stocks.Cl = lapply(symbols, function(symbol) {
  Close = getSymbols(symbol,src='yahoo', from = start, to = until, auto.assign = FALSE)[, 4]
  names(Close) = symbol
  Close
})
stocks.Cl = do.call(merge.xts,stocks.Cl)

acf.dat <- apply(stocks.Cl, MARGIN= 2, FUN = plot(acf))
  

Но я получил следующее:

 Error in curve(expr = x, from = from, to = to, xlim = xlim, ylab = ylab,  : 
  'expr' did not evaluate to an object of length 'n'
  

Комментарии:

1. apply(stocks.Cl, MARGIN= 2, FUN = function(x) plot(acf(x))) ?

2. @RonakShah Спасибо. Но как создать заголовок с именем для каждой серии.

Ответ №1:

Вам нужно использовать анонимную функцию, чтобы применить дополнительные функции к переданным объектам. Вместо apply with MARGIN = 2 мы используем lapply и повторяем names of stocks.Cl , который будет использоваться в качестве заголовка графика.

 lapply(names(stocks.Cl), function(i) plot(acf(stocks.Cl[, i]), main = i))
  

Комментарии:

1. Спасибо, это работает. Однако он генерирует два графика для каждой серии. Один с названием серии, а другой с таким названием: «Запасы серии. Cl[,I]»