R 时间序列

R 时间序列 首页 / R入门教程 / R 时间序列

在规则的时间间隔内测量的任何度量标准都会创建一个Time series时间序列。由于工业上的必要性和相关性,Time series分析在商业上很重要,尤其是在预测(需求,供应和销售等)方面。其中每个数据点都与时间戳关联的一系列数据点称为Time series。

一天中股票在不同时间点的价格是Time series的最简单示例。一年中不同月份降雨量的另一个例子。 R提供了几个用于创建,处理和绘制Time series数据的函数。在R对象中,Time series数据称为Time series对象。就像矢量或数据帧一样。

创建时间序列

R提供ts()函数来创建Time series。 ts()函数的语法如下:

Timeseries_object_name<-  ts(data, start, end, frequency)  

    data            -  它是一个向量或矩阵,其中包含Time series中使用的值。

    start            -  这是第一次观察的开始时间

    end             -  这是最后一次观察的结束时间

    frequency  -  它指定每单位时间的观察次数。

让我们看一个示例,以了解ts()函数如何用于创建Time series。

例子

在下面的示例中,我们将考虑从2013年1月开始的某个位置的年度降雪细节。我们将创建一个12个月期间的RTime series对象,并将其绘制出来。

# 以R向量的形式获取数据点。
snowfall <- c(790,1170.8,860.1,1330.6,630.4,911.5,683.5,996.6,783.2,982,881.8,1021)  
# 将其转换为时间序列对象。
snowfall_timeseries<- ts(snowfall,start = c(2013,1),frequency = 12)  
# 打印TimeSeries数据。
print(snowfall_timeseries)  
# 向图表文件提供名称。
png(file = "snowfall.png")  
# 绘制时间序列的图表。
plot(snowfall_timeseries)  
# 保存文件
dev.off()  

输出:

R Time Series AnalysisR Time Series Analysis


加法和乘法分解

加法和乘法分解是用于分析序列的模型。如果季节性变化似乎是恒定的,则意味着当Time series的值增加时季节性变化不发生变化,则我们使用加性模型,否则使用乘法模型。

R Time Series Analysis

让我们看一下逐步过程,以了解如何使用加法和乘法模型分解Time series时间序列。对于加性模型,我们使用ausbeer数据集,对于可乘性,我们使用AirPassengers数据集。

第1步:加载数据并创建时间序列

用于附加模型

# 导出 fpp 库 
library(fpp)
# 使用 ausbeer 数据
data(ausbeer)
# 创建ausbeer数据集的时间序列
timeserie.beer = tail(head(ausbeer, 17*4+2),17*4-4)
# 设置图片名称
png(file = "time.png")
plot(as.ts(timeserie_beer), col="magenta")
# 保存文件
dev.off()

输出:

R Time Series Analysis

对于乘法模型

# 导入 Ecdat 库
library(Ecdat)
# 使用 AirPassengers 数据
data(AirPassengers)
# 为AirPassengers数据集创建时间序列
timeserie_air = AirPassengers
# 设置图片名称
png(file = "time.png")
plot(as.ts(timeserie_air))
# 保存文件
dev.off()

输出:

R Time Series Analysis

第2步:检测趋势

用于附加模型

# 检测趋势
trend.beer = ma(timeserie.beer, order = 4, centre = T)
# 设置文件名
png(file = "time.png")
plot(as.ts(timeserie.beer),col="red")
lines(trend.beer,col="red")
plot(as.ts(trend.beer),col="red")
# 保存文件
dev.off()

输出1:

R Time Series Analysis

输出2:

R Time Series Analysis

对于乘法模型:

# 检测趋势
trend.air = ma(timeserie.air, order = 12, centre = T)
# 设置图片名称
png(file = "time.png")
plot(as.ts(timeserie.air),col="blue")
lines(trend.air,col="blue")
plot(as.ts(trend.air),col="blue")
# 保存文件
dev.off()

输出1:

R Time Series Analysis

输出2:

R Time Series Analysis

第3步:时间序列的下降趋势

用于附加模型

# 检测时间序列.
detrend.beer=timeserie.beer-trend.beer # 设置图片名称 png(file = "time.png") plot(as.ts(detrend.beer),col="magenta") # 保存文件 dev.off()

输出:

R Time Series Analysis

对于乘法模型

# 检测时间序列.
detrend.air=timeserie.air/trend.air
# 设置图片名称
png(file = "time.png")
plot(as.ts(detrend.air),col="blue")
# 保存文件
dev.off()

输出:

R Time Series Analysis

第4步:平均季节性

用于附加模型

# 平均季节性
m.beer = t(matrix(data = detrend.beer, nrow = 4))
seasonal.beer = colMeans(m.beer, na.rm = T)
# 设置图片名称
png(file = "time.png")
plot(as.ts(rep(seasonal.beer,16)),col="magenta")
# 保存文件
dev.off()

输出:

R Time Series Analysis

对于乘法模型

# 平均季节性
m.air = t(matrix(data = detrend.air, nrow = 12))
seasonal.air = colMeans(m.air, na.rm = T)
# 设置文件名称
png(file = "time.png")
plot(as.ts(rep(seasonal.air,12)),col="blue")
# 保存文件
dev.off()

输出:

R Time Series Analysis

第5步:检查剩余的随机噪声

用于附加模型

# 检查剩余的随机噪声
random.beer = timeserie.beer - trend.beer - seasonal.beer
# 设置文件名称
png(file = "time.png")
plot(as.ts(rep(random.beer)),col="magenta")
# 保存文件
dev.off()

输出:

R Time Series Analysis

对于乘法模型

# 检查剩余的随机噪声
random.air = timeserie.air/(trend.air * seasonal.air)
# 设置文件名称
png(file = "time.png")
plot(as.ts(random.air),col="blue")
# 保存文件
dev.off()

输出:

R Time Series Analysis

第5步:重建原始信号

用于附加模型

# 重建原始信号
recomposed.beer=trend.beer+seasonal.beer+random.beer
# 设置文件名称
png(file = "time.png")
plot(as.ts(recomposed.beer),col="magenta")
# 保存文件
dev.off()

输出1:

R Time Series Analysis

对于乘法模型

# 重建原始信号
recomposed.air = trend.air*seasonal.air*random.air
# 设置文件名称
png(file = "time.png")
plot(as.ts(recomposed.air),col="blue")
# 保存文件
dev.off()

输出:

R Time Series Analysis

使用decompose()进行分解

用于附加模型

# 导入 forecast , timeSeries ,fpp 库
library(forecast)
library(timeSeries)
library(fpp)
# 使用 ausbeer 数据
data(ausbeer)
# 创建时间序列
timeserie.beer = tail(head(ausbeer, 17*4+2),17*4-4)
# 检测趋势
trend.beer = ma(timeserie.beer, order = 4, centre = T)
# 检测时间序列
detrend.beer=timeserie.beer-trend.beer
# 平均季节性
m.beer = t(matrix(data = detrend.beer, nrow = 4))
seasonal.beer = colMeans(m.beer, na.rm = T)
# 检查剩余的随机噪声
random.beer = timeserie.beer - trend.beer - seasonal.beer
# 重建原始信号
recomposed.beer = trend.beer+seasonal.beer+random.beer
# 分解时间序列
ts.beer = ts(timeserie.beer, frequency = 4)
decompose.beer = decompose(ts.beer, "additive")
# 设置图片名称
png(file = "time.png")
par(mfrow=c(2,2))
plot(as.ts(decompose.beer$seasonal),col="magenta")
plot(as.ts(decompose.beer$trend),col="magenta")
plot(as.ts(decompose.beer$random),col="magenta")
plot(decompose.beer,col="magenta")
# 保存文件
dev.off()

输出:

R Time Series Analysis

对于乘法模型

# 导入所属的库
library(forecast)
library(timeSeries)
library(fpp)
library(Ecdat)
# 使用 Airpassengers 数据
data(AirPassengers)
# 创建时间序列
timeseries.air = AirPassengers
# 检测趋势
trend.air = ma(timeseries.air, order = 12, centre = T)
# 时间序列的去趋势
detrend.air=timeseries.air/trend.air
# 平均季节性
m.air = t(matrix(data = detrend.air, nrow = 12))
seasonal.air = colMeans(m.air, na.rm = T)
# 检查剩余的随机噪声
random.air = timeseries.air/(trend.air * seasonal.air)
# 重建原始信号
recomposed.air = trend.air*seasonal.air*random.air
# 分解时间序列
ts.air = ts(timeseries.air, frequency = 12)
decompose.air = decompose(ts.air, "multiplicative")

# 设置文件名称
png(file = "time.png")

par(mfrow=c(2,2))

plot(as.ts(decompose.air$seasonal),col="blue")
plot(as.ts(decompose.air$trend),col="blue")
plot(as.ts(decompose.air$random),col="blue")
plot(decompose.air,col="blue")

# 保存文件
dev.off()

输出:

R Time Series Analysis

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

程序员的数学基础课 -〔黄申〕

软件工程之美 -〔宝玉〕

趣谈Linux操作系统 -〔刘超〕

摄影入门课 -〔小麥〕

Kafka核心源码解读 -〔胡夕〕

etcd实战课 -〔唐聪〕

爆款文案修炼手册 -〔乐剑峰〕

李智慧 · 高并发架构实战课 -〔李智慧〕

手把手带你写一个MiniSpring -〔郭屹〕

好记忆不如烂笔头。留下您的足迹吧 :)