——————————————————————————————–
Facilitator: CDAM Experts
——————————————————————————————–
Session 8: Time Series Analysis
Learning Objectives:
By the end of this session, you will be able to:
Understand the structure and components of time series data
.
Decompose time series into trend , seasonality , and residuals
.
Visualize time series data using appropriate plots.
Analyze autocorrelation and partial autocorrelation.
Build basic ARIMA models for forecasting.
Apply time series analysis techniques to real-world
datasets.
1. Introduction to Time Series Data
What is a Time Series?
A time series is a sequence of data points indexed in chronological
order.
Examples:
Getting Started
set a working directory Default location where R looks for files
and saves outputs
setwd("~/2025_R_TRAINING") # It tells R where to look for files and where to save files
1. Analyze and Visualize Time Series Data: Load a time series
dataset and plot it.
Load and visualize time series data
library(scales)
library(ggplot2)
library(stats)
library(forecast)
Example: Visualize time series data
# Create a sample time series
set.seed(123) # Ensure reproducibility
# Generate 36 random values (e.g., monthly data for 3 years)
data <- rnorm(36, mean = 100, sd = 10)
# Create a time series object starting from January 2020
ts_data <- ts(data, start = c(2020, 1), frequency = 12)
# Convert the ts object into a data frame
df <- data.frame(
Date = seq(as.Date("2020-01-01"), by = "month", length.out = length(ts_data)),
price = as.numeric(ts_data))
# Plot the time series
ggplot(df, aes(x = Date, y = price)) +
geom_line(color = "blue", size = 1) + # Line plot
geom_point(color = "red", size = 2) + # Optional: Add points
labs(title = "Time Series Plot using ggplot2",
x = "Date",
y = "Price of Goods",
caption = "Source: CDAM Experts, 2025") +
scale_x_date(date_labels = "%b %Y", date_breaks = "6 months") + # Format x-axis
theme_classic()

2. Decompose Time Series: Use decompose() to separate the trend,
seasonality, and residuals.
# Example: Decompose time series
# Create a time series object
ts_data <- ts(df$price, frequency = 12, start = c(2023, 1))
# Decompose the time series
decomposed_data <- decompose(ts_data)
# Plot the decomposition
plot(decomposed_data)

3. Autocorrelation Function (ACF): Use acf() to analyze
autocorrelation.
# Example: Autocorrelation function
acf(ts_data, lag.max = 20)

4. Build an ARIMA Model: Fit an ARIMA model using auto.arima() from
the forecast package.
# Example: Fit an ARIMA model
# Fit the ARIMA model
arima_model <- auto.arima(ts_data)
# Print the model summary
summary(arima_model)
Series: ts_data
ARIMA(0,0,0)(1,0,0)[12] with non-zero mean
Coefficients:
sar1 mean
-0.4516 100.2065
s.e. 0.1653 1.0677
sigma^2 = 71.79: log likelihood = -128.35
AIC=262.7 AICc=263.45 BIC=267.45
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 0.1988831 8.23411 6.774103 -0.5167801 6.841991 0.5137243 0.08037085
# Forecast future values
forecast_values <- forecast(arima_model, h = 6) # Forecast next 6 periods
# Plot the forecast
plot(forecast_values)

———————————————–
Homework
———————————————–
Work with a Time Series Dataset :
Load a time series dataset (e.g., stock prices, weather data, or
sales data)
Perform the following tasks:
Visualize the time series data.
Decompose the time series into trend, seasonality, and
residuals.
Analyze autocorrelation using ACF.
Build and evaluate an ARIMA model for forecasting.
Homework Assignment
Exercise A: Import a Time Series Dataset
Download a public time series dataset(synthetic_TS.csv)
Load it into R using rio() or read.csv()
Print first few rows and check structure
Exercise B: Time Series Decomposition
Convert your data to a ts object
Decompose it into trend, seasonality, and residuals
Plot each component
Exercise C: Stationarity Check
Exercise D: ACF and PACF Analysis
Exercise E: Build an ARIMA Model
Fit an ARIMA model using auto.arima() or manual
specification
Interpret the model output
Forecast future values (e.g., next 6–12 periods)
Exercise F: Write a Summary
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOiANCiAgICBoaWdobGlnaHQ6IG1vbm9jaHJvbWUNCiAgICB0aGVtZTogcmVhZGFibGUNCi0tLQ0KDQoNCjxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjphdXRvO2Rpc3BsYXk6YmxvY2s6Jz48SU1HICBzcmM9ICAiQzpcVXNlcnNcU2NpZW50aXN0XERvY3VtZW50c1wyMDI1X1JfVFJBSU5JTkdcaW5yb2RfUjREUy5QTkciPjwvZGl2Pg0KIA0KIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gDQo8ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToyNXB4O2NvbG9yOmJsdWU7Jz5GYWNpbGl0YXRvcjogQ0RBTSBFeHBlcnRzPC9kaXY+DQoNCg0KIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyMgU2Vzc2lvbiA4OiBUaW1lIFNlcmllcyBBbmFseXNpcw0KDQojIyBMZWFybmluZyBPYmplY3RpdmVzOg0KDQpCeSB0aGUgZW5kIG9mIHRoaXMgc2Vzc2lvbiwgeW91IHdpbGwgYmUgYWJsZSB0bzoNCg0KICogVW5kZXJzdGFuZCB0aGUgc3RydWN0dXJlIGFuZCBjb21wb25lbnRzIG9mIHRpbWUgc2VyaWVzIGRhdGEgLg0KDQogKiBEZWNvbXBvc2UgdGltZSBzZXJpZXMgaW50byB0cmVuZCAsIHNlYXNvbmFsaXR5ICwgYW5kIHJlc2lkdWFscyAuDQoNCiAqIFZpc3VhbGl6ZSB0aW1lIHNlcmllcyBkYXRhIHVzaW5nIGFwcHJvcHJpYXRlIHBsb3RzLg0KDQogKiBBbmFseXplIGF1dG9jb3JyZWxhdGlvbiBhbmQgcGFydGlhbCBhdXRvY29ycmVsYXRpb24uDQoNCiAqIEJ1aWxkIGJhc2ljIEFSSU1BIG1vZGVscyBmb3IgZm9yZWNhc3RpbmcuDQoNCiAqIEFwcGx5IHRpbWUgc2VyaWVzIGFuYWx5c2lzIHRlY2huaXF1ZXMgdG8gcmVhbC13b3JsZCBkYXRhc2V0cy4NCiANCiMjICAxLiBJbnRyb2R1Y3Rpb24gdG8gVGltZSBTZXJpZXMgRGF0YQ0KDQpXaGF0IGlzIGEgVGltZSBTZXJpZXM/DQoNCkEgdGltZSBzZXJpZXMgaXMgYSBzZXF1ZW5jZSBvZiBkYXRhIHBvaW50cyBpbmRleGVkIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIuDQoNCkV4YW1wbGVzOg0KDQoqIE1vbnRobHkgc2FsZXMgZmlndXJlcw0KDQoqIERhaWx5IHN0b2NrIHByaWNlcw0KDQoqIEhvdXJseSB0ZW1wZXJhdHVyZSByZWFkaW5ncw0KDQoqIFF1YXJ0ZXJseSBHRFAgdmFsdWVzDQoNCiMgR2V0dGluZyBTdGFydGVkDQoNCiMjIHNldCBhIHdvcmtpbmcgZGlyZWN0b3J5ICpEZWZhdWx0IGxvY2F0aW9uIHdoZXJlIFIgbG9va3MgZm9yIGZpbGVzIGFuZCBzYXZlcyBvdXRwdXRzKg0KYGBge3J9DQpzZXR3ZCgifi8yMDI1X1JfVFJBSU5JTkciKSAjIEl0IHRlbGxzIFIgd2hlcmUgdG8gbG9vayBmb3IgZmlsZXMgYW5kIHdoZXJlIHRvIHNhdmUgZmlsZXMNCmBgYA0KDQoNCiMjIDEuIEFuYWx5emUgYW5kIFZpc3VhbGl6ZSBUaW1lIFNlcmllcyBEYXRhOiBMb2FkIGEgdGltZSBzZXJpZXMgZGF0YXNldCBhbmQgcGxvdCBpdC4NCg0KIyMgTG9hZCBhbmQgdmlzdWFsaXplIHRpbWUgc2VyaWVzIGRhdGENCmBgYHtyfQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHN0YXRzKQ0KbGlicmFyeShmb3JlY2FzdCkNCmBgYA0KDQojIyBFeGFtcGxlOiBWaXN1YWxpemUgdGltZSBzZXJpZXMgZGF0YQ0KYGBge3J9DQojIENyZWF0ZSBhIHNhbXBsZSB0aW1lIHNlcmllcw0Kc2V0LnNlZWQoMTIzKSAgIyBFbnN1cmUgcmVwcm9kdWNpYmlsaXR5DQoNCiMgR2VuZXJhdGUgMzYgcmFuZG9tIHZhbHVlcyAoZS5nLiwgbW9udGhseSBkYXRhIGZvciAzIHllYXJzKQ0KZGF0YSA8LSBybm9ybSgzNiwgbWVhbiA9IDEwMCwgc2QgPSAxMCkNCg0KIyBDcmVhdGUgYSB0aW1lIHNlcmllcyBvYmplY3Qgc3RhcnRpbmcgZnJvbSBKYW51YXJ5IDIwMjANCnRzX2RhdGEgPC0gdHMoZGF0YSwgc3RhcnQgPSBjKDIwMjAsIDEpLCBmcmVxdWVuY3kgPSAxMikNCg0KIyBDb252ZXJ0IHRoZSB0cyBvYmplY3QgaW50byBhIGRhdGEgZnJhbWUNCmRmIDwtIGRhdGEuZnJhbWUoDQogIERhdGUgPSBzZXEoYXMuRGF0ZSgiMjAyMC0wMS0wMSIpLCBieSA9ICJtb250aCIsIGxlbmd0aC5vdXQgPSBsZW5ndGgodHNfZGF0YSkpLA0KICBwcmljZSA9IGFzLm51bWVyaWModHNfZGF0YSkpDQpgYGANCg0KDQpgYGB7cn0NCiMgUGxvdCB0aGUgdGltZSBzZXJpZXMNCmdncGxvdChkZiwgYWVzKHggPSBEYXRlLCB5ID0gcHJpY2UpKSArDQogIGdlb21fbGluZShjb2xvciA9ICJibHVlIiwgc2l6ZSA9IDEpICsgICMgTGluZSBwbG90DQogIGdlb21fcG9pbnQoY29sb3IgPSAicmVkIiwgc2l6ZSA9IDIpICsgICMgT3B0aW9uYWw6IEFkZCBwb2ludHMNCiAgbGFicyh0aXRsZSA9ICJUaW1lIFNlcmllcyBQbG90IHVzaW5nIGdncGxvdDIiLA0KICAgICAgIHggPSAiRGF0ZSIsDQogICAgICAgeSA9ICJQcmljZSBvZiBHb29kcyIsDQogICAgICAgY2FwdGlvbiA9ICJTb3VyY2U6IENEQU0gRXhwZXJ0cywgMjAyNSIpICsNCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiViICVZIiwgZGF0ZV9icmVha3MgPSAiNiBtb250aHMiKSArICAjIEZvcm1hdCB4LWF4aXMNCiB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQojIDIuIERlY29tcG9zZSBUaW1lIFNlcmllczogVXNlIGRlY29tcG9zZSgpIHRvIHNlcGFyYXRlIHRoZSB0cmVuZCwgc2Vhc29uYWxpdHksIGFuZCByZXNpZHVhbHMuDQpgYGB7cn0NCiMgRXhhbXBsZTogRGVjb21wb3NlIHRpbWUgc2VyaWVzDQojIENyZWF0ZSBhIHRpbWUgc2VyaWVzIG9iamVjdA0KdHNfZGF0YSA8LSB0cyhkZiRwcmljZSwgZnJlcXVlbmN5ID0gMTIsIHN0YXJ0ID0gYygyMDIzLCAxKSkNCg0KIyBEZWNvbXBvc2UgdGhlIHRpbWUgc2VyaWVzDQpkZWNvbXBvc2VkX2RhdGEgPC0gZGVjb21wb3NlKHRzX2RhdGEpDQoNCiMgUGxvdCB0aGUgZGVjb21wb3NpdGlvbg0KcGxvdChkZWNvbXBvc2VkX2RhdGEpDQpgYGANCg0KIyMgMy4gQXV0b2NvcnJlbGF0aW9uIEZ1bmN0aW9uIChBQ0YpOiBVc2UgYWNmKCkgdG8gYW5hbHl6ZSBhdXRvY29ycmVsYXRpb24uDQpgYGB7cn0NCiMgRXhhbXBsZTogQXV0b2NvcnJlbGF0aW9uIGZ1bmN0aW9uDQphY2YodHNfZGF0YSwgbGFnLm1heCA9IDIwKQ0KYGBgDQoNCiMjIDQuIEJ1aWxkIGFuIEFSSU1BIE1vZGVsOiBGaXQgYW4gQVJJTUEgbW9kZWwgdXNpbmcgYXV0by5hcmltYSgpIGZyb20gdGhlIGZvcmVjYXN0IHBhY2thZ2UuDQpgYGB7cn0NCiMgRXhhbXBsZTogRml0IGFuIEFSSU1BIG1vZGVsDQoNCiMgRml0IHRoZSBBUklNQSBtb2RlbA0KYXJpbWFfbW9kZWwgPC0gYXV0by5hcmltYSh0c19kYXRhKQ0KDQojIFByaW50IHRoZSBtb2RlbCBzdW1tYXJ5DQpzdW1tYXJ5KGFyaW1hX21vZGVsKQ0KYGBgDQoNCg0KYGBge3J9DQojIEZvcmVjYXN0IGZ1dHVyZSB2YWx1ZXMNCmZvcmVjYXN0X3ZhbHVlcyA8LSBmb3JlY2FzdChhcmltYV9tb2RlbCwgaCA9IDYpICAjIEZvcmVjYXN0IG5leHQgNiBwZXJpb2RzDQoNCiMgUGxvdCB0aGUgZm9yZWNhc3QNCnBsb3QoZm9yZWNhc3RfdmFsdWVzKQ0KYGBgDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMjIEhvbWV3b3JrDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqIFdvcmsgd2l0aCBhIFRpbWUgU2VyaWVzIERhdGFzZXQgOg0KDQoqIExvYWQgYSB0aW1lIHNlcmllcyBkYXRhc2V0IChlLmcuLCBzdG9jayBwcmljZXMsIHdlYXRoZXIgZGF0YSwgb3Igc2FsZXMgZGF0YSkNCg0KKiBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGFza3M6DQoNCiogVmlzdWFsaXplIHRoZSB0aW1lIHNlcmllcyBkYXRhLg0KDQoqIERlY29tcG9zZSB0aGUgdGltZSBzZXJpZXMgaW50byB0cmVuZCwgc2Vhc29uYWxpdHksIGFuZCByZXNpZHVhbHMuDQoNCiogQW5hbHl6ZSBhdXRvY29ycmVsYXRpb24gdXNpbmcgQUNGLg0KDQoqIEJ1aWxkIGFuZCBldmFsdWF0ZSBhbiBBUklNQSBtb2RlbCBmb3IgZm9yZWNhc3RpbmcuDQoNCiMjIEhvbWV3b3JrIEFzc2lnbm1lbnQNCg0KIyMgRXhlcmNpc2UgQTogSW1wb3J0IGEgVGltZSBTZXJpZXMgRGF0YXNldA0KDQoqIERvd25sb2FkIGEgcHVibGljIHRpbWUgc2VyaWVzIGRhdGFzZXQoc3ludGhldGljX1RTLmNzdikNCg0KKiBMb2FkIGl0IGludG8gUiB1c2luZyByaW8oKSBvciByZWFkLmNzdigpDQoNCiogUHJpbnQgZmlyc3QgZmV3IHJvd3MgYW5kIGNoZWNrIHN0cnVjdHVyZQ0KDQojIyBFeGVyY2lzZSBCOiBUaW1lIFNlcmllcyBEZWNvbXBvc2l0aW9uDQoNCiogQ29udmVydCB5b3VyIGRhdGEgdG8gYSB0cyBvYmplY3QNCg0KKiBEZWNvbXBvc2UgaXQgaW50byB0cmVuZCwgc2Vhc29uYWxpdHksIGFuZCByZXNpZHVhbHMNCg0KKiBQbG90IGVhY2ggY29tcG9uZW50DQoNCiMjIEV4ZXJjaXNlIEM6IFN0YXRpb25hcml0eSBDaGVjaw0KDQoqIFBsb3QgdGhlIHRpbWUgc2VyaWVzDQoNCiogVXNlIHRoZSBBREYgdGVzdCB0byBjaGVjayBmb3Igc3RhdGlvbmFyaXR5DQoNCiogRGlmZmVyZW5jZSB0aGUgc2VyaWVzIGlmIG5lY2Vzc2FyeQ0KDQojIyBFeGVyY2lzZSBEOiBBQ0YgYW5kIFBBQ0YgQW5hbHlzaXMNCg0KKiBQbG90IEFDRiBhbmQgUEFDRg0KDQoqIElkZW50aWZ5IHBvc3NpYmxlIEFSIGFuZCBNQSBvcmRlcnMgZm9yIEFSSU1BDQoNCiMjIEV4ZXJjaXNlIEU6IEJ1aWxkIGFuIEFSSU1BIE1vZGVsDQoNCiogRml0IGFuIEFSSU1BIG1vZGVsIHVzaW5nIGF1dG8uYXJpbWEoKSBvciBtYW51YWwgc3BlY2lmaWNhdGlvbg0KDQoqIEludGVycHJldCB0aGUgbW9kZWwgb3V0cHV0DQoNCiogRm9yZWNhc3QgZnV0dXJlIHZhbHVlcyAoZS5nLiwgbmV4dCA24oCTMTIgcGVyaW9kcykNCg0KIyMgRXhlcmNpc2UgRjogV3JpdGUgYSBTdW1tYXJ5DQoNCiogU3VtbWFyaXplIHlvdXIgZmluZGluZ3MgY2xlYXJseSBpbiBwbGFpbiBsYW5ndWFnZQ0KDQoqIEluY2x1ZGU6DQoNCiAgICAqIFdoYXQgcXVlc3Rpb24geW91IHdlcmUgYW5zd2VyaW5nDQogICAgDQogICAgKiBXaGV0aGVyIHRoZSBzZXJpZXMgd2FzIHN0YXRpb25hcnkNCiAgICANCiAgICAqIFdoaWNoIG1vZGVsIHlvdSBjaG9zZSBhbmQgd2h5DQogICAgDQogICAgKiBXaGF0IHRoZSBmb3JlY2FzdCBzdWdnZXN0cw0KICAgIA0KIyMgQWRkaXRpb25hbCBSZXNvdXJjZXMNCg0KKiBPZmZpY2lhbCBSIERvY3VtZW50YXRpb24gZm9yIHN0YXRzIDogaHR0cHM6Ly9zdGF0LmV0aHouY2gvUi1tYW51YWwvUi1kZXZlbC9saWJyYXJ5L3N0YXRzLw0KDQoqIEZvcmVjYXN0aW5nIFByaW5jaXBsZXMgYW5kIFByYWN0aWNlIChGcmVlIEJvb2spIGJ5IFJvYiBKIEh5bmRtYW4gJiBHZW9yZ2UgQXRoYW5hc29wb3Vsb3M6IGh0dHBzOi8vb3RleHRzLmNvbS9mcHAzLw0KDQoqIFRpbWUgU2VyaWVzIENoZWF0IFNoZWV0IDogaHR0cHM6Ly9wb3NpdC5jby9kb3dubG9hZC9yc3R1ZGlvLWNoZWF0c2hlZXRzDQoNCiogSW50cm9kdWN0aW9uIHRvIFN0YXRpc3RpY2FsIExlYXJuaW5nIChJU0xSKSDigJMgRnJlZSBib29rIHdpdGggUiBsYWJzOiBodHRwOi8vZmFjdWx0eS5tYXJzaGFsbC51c2MuZWR1L2dhcmV0aC1qYW1lcy9JU0wvDQoNCg0KDQo=