R -- 时序分析

brief

横截面数据对应着某个时间点的数据。
纵向的数据对应着一系列时间点的数据,某个变量随着时间的变动被反复测量。
研究纵向数据,也许会得到“时间”的答案。

R -- 时序分析_第1张图片
R -- 时序分析_第2张图片

描述时间序列

在这里插入图片描述

生成时序对象

x <- runif(20)

ts(x)
ts(x,frequency = 12)
ts(x,frequency = 7)

y <- ts(x,start =2,frequency = 7)
plot(y)

# 时序的起止点,频率等
start(y)
end(y)
frequency(y)

R -- 时序分析_第3张图片
R -- 时序分析_第4张图片

R -- 时序分析_第5张图片

  • frequence = 7 对应 daily data
  • frequence = 0.2 对应每五个时间单位抽样一次

平滑时序对象

R -- 时序分析_第6张图片

# install.packages("forecast")
library(forecast)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))
ylim <- c(min(Nile), max(Nile))
plot(Nile, main="Raw time series")
plot(ma(Nile, 3), main="Simple Moving Averages (k=3)", ylim=ylim)
plot(ma(Nile, 7), main="Simple Moving Averages (k=7)", ylim=ylim)
plot(ma(Nile, 15), main="Simple Moving Averages (k=15)", ylim=ylim)
par(opar)

R -- 时序分析_第7张图片

分解时序对象

R -- 时序分析_第8张图片
R -- 时序分析_第9张图片
R -- 时序分析_第10张图片

  • 实例
plot(AirPassengers)

可以看到趋势很明显,但是季节性波动越来越大,可能是个相乘性的模型
R -- 时序分析_第11张图片

lAirPassengers <- log(AirPassengers)
plot(lAirPassengers, ylab="log(AirPassengers)")

可以看到做log转化后,方差稳定了,变成了趋势性季节性相加模型了
R -- 时序分析_第12张图片

fit <- stl(lAirPassengers, s.window="period")
plot(fit)

log transform 的data
季节项随时间的变化
趋势项随时间的变化
随机误差项在时间点上的表现等
R -- 时序分析_第13张图片

fit$time.series # log转化后的结果
exp(fit$time.series) # 原始尺度上的数值

季节项,趋势项,随机项的具体数值
R -- 时序分析_第14张图片

其他的季节性分解可视化函数:

par(mfrow=c(2,1))
library(forecast)
monthplot(AirPassengers, xlab="", ylab="")
seasonplot(AirPassengers, year.labels="TRUE", main="")

R -- 时序分析_第15张图片

预测时间序列

指数预测模型

R -- 时序分析_第16张图片
R -- 时序分析_第17张图片

单指数预测模型

R -- 时序分析_第18张图片
R -- 时序分析_第19张图片
R -- 时序分析_第20张图片
R -- 时序分析_第21张图片

R -- 时序分析_第22张图片

  • 平均误差和平均百分比误差,误差值的和平均数,用处不大,正负误差会相互抵消
  • RMSE:平均误差平方和的 平方根
  • 平均绝对百分误差:误差在真实值中的占比,没有单位,可以用于比较不同模型的预测准确性
  • 平均绝对标准化误差:也可以用来比较不同模型的预测准确性

holt指数预测测模型

R -- 时序分析_第23张图片

library(forecast)
fit <- ets(log(AirPassengers), model="AAN")
fit # 返回 alpha beta 值
#评估模型
accuracy(fit)
# 进行预测
pred <- forecast(fit, 5)
pred

holt-winters指数预测模型

R -- 时序分析_第24张图片

library(forecast)
fit <- ets(log(AirPassengers), model="AAA")
fit # 返回 alpha beta  gamma值
#评估模型
accuracy(fit)
# 进行预测
pred <- forecast(fit, 5)
pred

ets()函数的其他能力

R -- 时序分析_第25张图片
在这里插入图片描述
R -- 时序分析_第26张图片

ARIMA预测模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

概念介绍部分

  • 滞后阶数
    R -- 时序分析_第27张图片

  • 时序的自相关
    ACk即一些列观察测值(Yt)和K时期之前的观测值(Yt-k)之间的相关性
    比如,AC1就是1阶滞后序列与0阶滞后序列之间的相关性

    AC1,AC2,AC3…ACk构成的图即为自相关图(ACF图)

    stats包中的acf()函数或者forecast包中的Acf()函数可以生成ACF图

  • 时序的偏相关
    R -- 时序分析_第28张图片

  • 差分
    就是将序列中的观测值Yt 变为 Yt-1 - Yt
    在这里插入图片描述
    在这里插入图片描述

  • 自回归项
    AutoRegressive, AR项

  • 移动平均项
    Moving Averages, MA项

模型简介

R -- 时序分析_第29张图片
R -- 时序分析_第30张图片

  • 验证序列的平稳性
    可以先做差分图看看,在做ADF统计检验看看
library(forecast)
plot(Nile)
ndiffs(Nile) # 自动检测最佳的差分数d等于几
dNile <- diff(Nile)
plot(dNile)

貌似差分后数据在均值附近波动了
R -- 时序分析_第31张图片

library(tseries)
adf.test(Nile)
adf.test(dNile)

前面说过ADF检验P值显著性说明方差稳定
R -- 时序分析_第32张图片

  • 模型选择
    可以根据ACF 和PACF图选择模型参数
# 针对的都是差分后的数据
Acf(dNile) # 自相关
Pacf(dNile) #偏自相关

R -- 时序分析_第33张图片
R -- 时序分析_第34张图片

  • 拟合模型
library(forecast)
fit <- arima(Nile, order=c(0,1,1)) #ts=时序,order=c(p,d,q)
fit

R -- 时序分析_第35张图片

  • 模型评价
    在这里插入图片描述
qqnorm(fit$residuals)
qqline(fit$residuals)

残差项或者说误差项满足正态性则会分布在直线上
R -- 时序分析_第36张图片
检验残差值的相关性系数是否显著不为0
R -- 时序分析_第37张图片

  • 预测
    用forecast进行预测,forecast(model,k)
forecast(fit, 3)

自动预测

library(forecast)
fit <- auto.arima(sunspots)
fit  #返回比较合适的模型参数

你可能感兴趣的:(R,统计学,r语言)