Quickly Generate Nested Time Series Models

code
rtip
timeseries
autoarima
Author

Steven P. Sanderson II, MPH

Published

February 27, 2023

Introduction

There are many approaches to modeling time series data in R. One of the types of data that we might come across is a nested time series. This means the data is grouped simply by one or more keys. There are many methods in which to accomplish this task. This will be a quick post, but if you want a longer more detailed and quite frankly well written out one, then this is a really good article

Exampmle

Let’s just get to it with a very simple example, the motivation here isn’t to be all encompassing, but rather to just showcase it is possible for those who may not know it is.

library(healthyR.data)
library(dplyr)
library(timetk)

ts_tbl <- healthyR_data |> 
  filter(ip_op_flag == "I") |> 
  select(visit_end_date_time, service_line, length_of_stay) |>
  mutate(visit_end_date_time = as.Date(visit_end_date_time)) |>
  group_by(service_line) |>
  summarise_by_time(
    .date_var = visit_end_date_time,
    .by = "month",
    los = mean(length_of_stay)
  ) |>
  ungroup()

glimpse(ts_tbl)
Rows: 2,148
Columns: 3
$ service_line        <chr> "Alcohol Abuse", "Alcohol Abuse", "Alcohol Abuse",…
$ visit_end_date_time <date> 2011-09-01, 2011-10-01, 2011-11-01, 2011-12-01, 2…
$ los                 <dbl> 3.666667, 3.181818, 4.380952, 3.464286, 3.677419, …
library(forecast)
library(broom)
library(tidyr)

glanced_models <- ts_tbl |> 
  nest_by(service_line) |> 
  mutate(AA = list(auto.arima(data$los))) |> 
  mutate(perf = list(glance(AA))) |> 
  unnest(cols = c(perf))

glanced_models |>
  select(-data)
# A tibble: 23 × 7
# Groups:   service_line [23]
   service_line                  AA         sigma logLik   AIC   BIC  nobs
   <chr>                         <list>     <dbl>  <dbl> <dbl> <dbl> <int>
 1 Alcohol Abuse                 <fr_ARIMA> 2.22  -241.   493.  506.   109
 2 Bariatric Surgery For Obesity <fr_ARIMA> 0.609  -80.1  168.  178.    88
 3 CHF                           <fr_ARIMA> 0.963 -152.   309.  314.   110
 4 COPD                          <fr_ARIMA> 0.987 -155.   315.  320.   110
 5 CVA                           <fr_ARIMA> 1.50  -201.   407.  412.   110
 6 Carotid Endarterectomy        <fr_ARIMA> 6.27  -166.   335.  339.    51
 7 Cellulitis                    <fr_ARIMA> 1.07  -163.   329.  335.   110
 8 Chest Pain                    <fr_ARIMA> 0.848 -139.   281.  287.   110
 9 GI Hemorrhage                 <fr_ARIMA> 1.21  -179.   361.  366.   111
10 Joint Replacement             <fr_ARIMA> 1.65  -196.   396.  401.   102
# … with 13 more rows

Voila!