내 목표는 여러 시계열에 대해 ARIMA를 실행하고 결과를 데이터 프레임에 저장하는 것입니다. 내 예는 다음과 같습니다.
library(forecast)
my_df <- data.frame(gr = c(rep("a", 10), rep("b", 10)),
val = sample(1:100, 20))
get_arima <- function(sample_name = NA,df = NA){
fit = auto.arima(df[df$gr == sample_name, ]$val)
return(fit)
}
result <- sapply(c("a", "b"), get_arima, df = my_df, simplify = F)
result_df <- data.frame(gr = names(result),
model_result = unlist(result, use.names = F))
다음 오류가 발생합니다.
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) :
cannot coerce class ‘c("forecast_ARIMA", "ARIMA", "Arima")’ to a data.frame
목표는 두 번째 열에 ARIMA 모델을 포함하여 다음과 같이하는 것입니다. forecast(result_df$model_result, h=3)
아마도 여러 가지 방법이 있다고 생각하지만 apply
목록에서 데이터 프레임으로 결과를 얻고 답변을 주시면 감사하겠습니다 .
모델 출력은 list
str(result[[1]])
#List of 18
# $ coef : Named num 54.3
# ..- attr(*, "names")= chr "intercept"
# $ sigma2 : num 1454
# $ var.coef : num [1, 1] 131
# ...
그리고 '결과' list
도 마찬가지입니다. 모델을 'data.frame'의 열로 유지하는 경우 다음과 같이 유지하십시오.list
df1 <- data.frame(gr = names(result), model_result = I(result))
를 사용하면 열없이 tibble
직접 list
열을 만들 수 있습니다.I
library(tibble)
df1 <- tibble(gr = names(result), model_result = result)
df1
# A tibble: 2 x 2
# gr model_result
# <chr> <named list>
#1 a <ARIMA>
#2 b <ARIMA>
다음으로 각 요소 추출 [[
df1$model_result[[1]]
#Series: df[df$gr == sample_name, ]$val
#ARIMA(0,0,0) with non-zero mean
#Coefficients:
# mean
# 54.3000
#s.e. 11.4378
#sigma^2 estimated as 1454: log likelihood=-50.07
#AIC=104.14 AICc=105.86 BIC=104.75
그리고 적용 forecast
forecast::forecast( df1$model_result[[1]], h = 3)
#Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
#11 54.3 5.439989 103.16 -20.42494 129.0249
#12 54.3 5.439989 103.16 -20.42494 129.0249
#13 54.3 5.439989 103.16 -20.42494 129.0249
forecast
모든 요소에 대해 가져 오려면map
library(purrr)
map(df1$model_result, ~ forecast::forecast(.x, h = 3))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다