R - 时间序列分析:初学者指南

你好,未来的数据巫师们!我很高兴带领你们踏上一段使用R进行时间序列分析的激动人心的旅程。作为一个教授计算机科学多年的人(我们就说一说软盘真正柔软的时代吧),我见证了无数学生从完全的初学者转变为自信的分析师。所以,如果你是编程新手,不用担心——我们将从最基础的知识开始,一起逐步学习。

R - Time Series Analysis

什么是时间序列分析?

在我们深入R代码之前,让我们先聊聊时间序列分析究竟是什么。想象一下,你正在跟踪一年内你的当地商店每天销售的冰淇淋蛋筒数量。这就是一个时间序列!它仅仅是一系列随时间测量的数据点。时间序列分析帮助我们理解模式、趋势,并根据这些历史数据进行预测。

现在,让我们动手写一些R代码!

R入门

首先,我们需要安装R和RStudio。将R视为引擎,将RStudio视为使驾驶变得更容易的华丽仪表盘。一旦你安装了这两个软件,打开RStudio,让我们开始吧!

# 这是R中的注释。它不会影响代码,但可以帮助我们人类理解正在发生的事情!

# 让我们创建一个简单的时间序列
sales <- c(100, 120, 140, 160, 180)
dates <- as.Date(c("2023-01-01", "2023-01-02", "2023-01-03", "2023-01-04", "2023-01-05"))

# 现在,让我们将它们组合成一个时间序列对象
ts_data <- ts(sales, start = c(2023, 1), frequency = 365)

# 让我们看看我们创建了什么
print(ts_data)

在这个例子中,我们创建了一个非常简单的时间序列,包含每日销售数据。c()函数用于创建一个值向量(可以将其视为列表)。然后我们使用ts()函数创建一个时间序列对象,指定它何时开始以及我们多久测量一次(在这个例子中是每天)。

不同的时间间隔

现在,让我们来谈谈不同的时间间隔。时间序列数据可以是每天的、每月的、每季度的,或者任何你可以想象到的其他间隔。R足够灵活,可以处理所有这些。让我们看一些例子:

# 每月数据
monthly_data <- ts(1:24, start = c(2022, 1), frequency = 12)

# 每季度数据
quarterly_data <- ts(1:8, start = c(2022, 1), frequency = 4)

# 每年数据
yearly_data <- ts(1:10, start = 2013)

# 让我们打印它们
print(monthly_data)
print(quarterly_data)
print(yearly_data)

在这些例子中,我们正在创建具有不同频率的时间序列。对于每月数据,我们使用frequency = 12(一年12个月),对于每季度数据是frequency = 4(一年4个季度),而对于每年数据,我们不需要指定频率。

可视化时间序列

人们常说一张图片胜过千言万语,在数据分析中,这一点尤为正确。让我们可视化我们的时间序列:

# 首先,让我们创建一个更有趣的数据集
set.seed(123)  # 这确保我们所有人得到相同的“随机”数字
sales <- 100 + cumsum(rnorm(100))  # 随机数的累积和
dates <- seq(as.Date("2023-01-01"), by = "day", length.out = 100)
ts_data <- ts(sales, start = c(2023, 1), frequency = 365)

# 现在,让我们绘制它
plot(ts_data, main = "每日销售", xlab = "日期", ylab = "销售")

这段代码创建了一个看起来更真实的销售数据集,并带有一些随机性,然后将其绘制出来。plot()函数是一种快速且简单的方式来可视化你的时间序列。

多个时间序列

在现实世界中,我们通常希望一起分析多个时间序列。让我们创建并可视化多个序列:

# 创建两个时间序列
set.seed(123)
sales_A <- 100 + cumsum(rnorm(100))
sales_B <- 120 + cumsum(rnorm(100))

# 将它们组合成一个多个时间序列
multi_ts <- ts(cbind(sales_A, sales_B), start = c(2023, 1), frequency = 365)

# 绘制两个序列
plot(multi_ts, main = "销售对比", xlab = "日期", ylab = "销售", col = c("蓝色", "红色"))
legend("topleft", legend = c("产品A", "产品B"), col = c("蓝色", "红色"), lty = 1)

在这里,我们创建了两个序列,并使用cbind()将它们组合起来。然后我们绘制它们,使用不同的颜色来区分序列。

常见时间序列分析方法

现在我们已经涵盖了基础知识,让我们看看一些在时间序列分析中常用的方法。下面是一个总结这些方法的表格:

方法 描述 R函数
移动平均 平滑短期波动 ma()来自forecast
指数平滑 给予近期观测更大的权重 ets()来自forecast
ARIMA 自回归积分移动平均 arima()auto.arima()
分解 将序列分解为趋势、季节性和残差成分 decompose()stl()

让我们尝试其中一种方法——分解:

# 分解我们的时间序列
decomposed <- decompose(ts_data)

# 绘制分解
plot(decomposed)

这个分解将我们的时间序列分为三个组成部分:趋势、季节性和随机性。它是理解你数据中潜在模式的一个很好的方法。

结论

恭喜你!你刚刚踏入了R语言时间序列分析这个迷人的世界。我们已经覆盖了创建、可视化和分析时间序列数据的基础。记住,像学习任何新技能一样,熟能生巧。不要害怕尝试不同的数据集和方法。

在我多年的教学经验中,我发现那些表现出色的学生都是带着好奇心和坚持精神去解决问题的。所以,继续探索,继续提问,最重要的是,继续编码!

Credits: Image by storyset