То, что мы собираемся сделать, это сохранить выходные данные, которые будут напечатаны на консоли, в текстовый файл, а затем прочитать текстовые файлы в R. Мы собираемся использовать функцию sink()
, чтобы сохранить выходные данные на консоли,Поскольку выходные данные печатаются на каждой итерации, нам нужно включить sink()
в цикл for
.Вы можете видеть в цикле for
ниже, что я сделал два вызова sink()
вокруг вызова auto.arima()
.Это потому, что это функция, которая печатает вывод на консоль.Я использовал paste0()
для создания нового имени для вывода на каждой итерации.Вывод сохраняется в виде текстового файла в формате «output 1.txt».
library(forecast)
library(grid)
library(gridExtra)
dat<-c()
Error<- NULL
x <- 1
for(f in 1:11){
for(b in 1:5){
for (c in 1:5){
Data1<-data[(nrow(data)-9-2*(f-1)+(b-1)):(nrow(data)-10+(b-1)),]
}
#This selects test sets 1,2,3,4, and 5 years beyond the training set
Data2<-data[(nrow(data)-10+(b+c)):(nrow(data)-10+(b+c)),]
Data3<-data[(nrow(data)-11+(b+c)):(nrow(data)-10+(b+c)),]
#Fitting autoarima model
sink(paste0("output", " ", x, ".txt"))
fitarima<-auto.arima(Data1$abun,trace = TRUE)
sink()
x <- x + 1
muhat<-predict(fitarima,data=Data2$abun)
muhat$pred<-as.numeric(muhat$pred)
for (i in nrow(Data2)){
Error[i]<-abs(muhat$pred-Data2$abun)
dat<-rbind(dat,Error)
}
}
}
После завершения цикла for
мы импортируем файлы в R. Мы получаем списокфайлы с использованием list.files()
, который ищет в рабочем каталоге файлы с расширением «.txt».Мы используем lapply()
на read.table()
, чтобы создать список фреймов данных, содержащих модели аримы для каждой итерации.Затем мы просто перебираем каждый объект в списке и создаем графики фрейма данных, а затем сохраняем его.Это то же самое, что и раньше, я только что создал цикл, чтобы сделать это для каждого кадра данных.Наилучшая модель сохраняется в последнем ряду каждого кадра данных, поэтому ее удобно извлечь, используя nrow(mod)
.
files <- list.files(getwd(), pattern = ".txt")
arima_mods <- lapply(files, read.table, sep = ":", header = FALSE)
j <- 1
for (mod in arima_mods) {
df <- mod[-nrow(mod), , drop = FALSE]
best <- mod[nrow(mod), , drop = FALSE]
colnames(df) <- c('Model', 'AIC')
hj <- matrix(c(0, 0.5), ncol=2, nrow=nrow(df), byrow=TRUE)
x <- matrix(c(0, 0.5), ncol=2, nrow=nrow(df), byrow=TRUE)
mytheme <- ttheme_default(core = list(fg_params = list(hjust=hj,
x=x,
fontsize=10)),
colhead = list(fg_params = list(fontsize=10,
fontface="bold"))
)
mod_num <- paste0('arima_fit', j, ".pdf")
pdf(mod_num, height=6, width=8.5, onefile = TRUE)
grid.table(df, theme = mytheme, rows = NULL)
pushViewport(viewport(y=.25,height=.5))
grid.table(best, rows = NULL, cols = NULL, theme = mytheme)
dev.off()
j <- j + 1
}
Вот изображение одной из таблиц 