时间序列分析(二)
2018-02-26 13:38
405 查看
imetime series data mining主要包括decompose(分析数据的各个成分,例如趋势,周期性),prediction(预测未来的值),classification(对有序数据序列的feature提取与分类),clustering(相似数列聚类)等。时序数据prediction(forecast,预测)使用最广泛的两个算法: Holt-Winters 和 ARIMA。其它的常用函数说明如下:
stats::ts() --生成时序对象
stats::start() --返回时间序列的开始时间
stats::end() --返回时间序列的开始时间
stats::frequency --返回时间序列中时间点的个数
stats::window() --对时间序列取子集
graphics::plot() --画出时间序列拆线图
stats::monthplot() --画出时序中的季节项
forecast::seasonplot --生成季节图
stats::stl() -- 用 LOESS光滑将时序分解为季节项、趋势项和随机项。局限之处——只能处理相加模型
stats::decompose() -- 对相加与相乘模型都可以直接进行季节分解
forecast::ma() -- 拟合一个简单的移动平均模型
stats::HoltWinters() -- 三次平滑指数法,拟合指数平常模型
forecast::ets() -- 拟合指数平滑模型,同时也可以自动选取最优模型
forecast::accuracy() -- 返回时序的拟合优度度量
tseries::adf.test() -- 对序列做ADF检验以判断其是否平稳
stats::lag() -- 返回取过指定滞后项后的时序
base::diff() -- 返回取过滞后项和差分后的序列
forecast::ndiffs() -- 找到最优差分次数以移除序列中的趋势项
forecast::acf() -- 估计自相关函数
forecast::pacf() -- 估计偏自相关函数
stats::arima() -- 似合 ARIMA模型
forecast::auto.arima() --自动选择 ARIMA模型,可能不准确
forecast::forecast() --预测时序的未来值
stats::Box.test() -- 进行Ljung-Box 检验以判断模型的残差是否独立
tseries::bds.test() -- 进行BDS检验以判断序列中的随机变量是否服从独立分布
stats::ts(): 生成时序对象
ts(data, frequency=n, start=x, end=y, names=c(a,b,c,...))
data: 观察到的时间序列值的向量或矩阵。
frequency: 频次,n=1 为年, n=4为季度,n=7 为周, n=12 为月等
start: 起始时点
按天时间段
另一种写法:
stats::decompose() 对相加与相乘模型都可以直接进行季节分解
decompose(x, type = c("additive", "multiplicative"), filter = NULL)
在分解季节成分的基础上,如果有需要的话,我们可以对时间序列进行季节因素调整,将这一部分信息从原始数据中去除。
forecast::ets():拟合指数平滑模型
ets(ts, model="ZZZ",.....)
限制模型的字母有三个。第一个字母代表误差项,第二个字母代表趋势项,第三个字母则代表季节项。
可选的字母包括:相加模型(A)、相乘模型(M)、无(N)、自动选择(Z)。
通过ets()函数自动选取对原始数据拟合优度最高的模型。
效果图
预测
stats::ts() --生成时序对象
stats::start() --返回时间序列的开始时间
stats::end() --返回时间序列的开始时间
stats::frequency --返回时间序列中时间点的个数
stats::window() --对时间序列取子集
graphics::plot() --画出时间序列拆线图
stats::monthplot() --画出时序中的季节项
forecast::seasonplot --生成季节图
stats::stl() -- 用 LOESS光滑将时序分解为季节项、趋势项和随机项。局限之处——只能处理相加模型
stats::decompose() -- 对相加与相乘模型都可以直接进行季节分解
forecast::ma() -- 拟合一个简单的移动平均模型
stats::HoltWinters() -- 三次平滑指数法,拟合指数平常模型
forecast::ets() -- 拟合指数平滑模型,同时也可以自动选取最优模型
forecast::accuracy() -- 返回时序的拟合优度度量
tseries::adf.test() -- 对序列做ADF检验以判断其是否平稳
stats::lag() -- 返回取过指定滞后项后的时序
base::diff() -- 返回取过滞后项和差分后的序列
forecast::ndiffs() -- 找到最优差分次数以移除序列中的趋势项
forecast::acf() -- 估计自相关函数
forecast::pacf() -- 估计偏自相关函数
stats::arima() -- 似合 ARIMA模型
forecast::auto.arima() --自动选择 ARIMA模型,可能不准确
forecast::forecast() --预测时序的未来值
stats::Box.test() -- 进行Ljung-Box 检验以判断模型的残差是否独立
tseries::bds.test() -- 进行BDS检验以判断序列中的随机变量是否服从独立分布
stats::ts(): 生成时序对象
ts(data, frequency=n, start=x, end=y, names=c(a,b,c,...))
data: 观察到的时间序列值的向量或矩阵。
frequency: 频次,n=1 为年, n=4为季度,n=7 为周, n=12 为月等
start: 起始时点
> t <- ts(testSrc$tp,start = c(2016,1),frequency= 12) > start(t) [1] 2016 1 > end(t) [1] 2017 12 > frequency(t) [1] 12
按天时间段
> library(zoo) > zoo <- zoo(testSrc$dp,order.by = as.Date(as.character(testSrc$biztime), format='%Y-%m-%d')) > ts <- ts(zoo) > str(ts) Time-Series [1:742] from 1 to 742: 62772 57541 59310 66895 71020 ... - attr(*, "index")= Date[1:742], format: "2016-01-01" "2016-01-02" "2016-01-03" "2016-01-04" ...
另一种写法:
xl<- ts(testSrc$dp,start=c(2016,01,01),frequency=365) str(xl)
stats::decompose() 对相加与相乘模型都可以直接进行季节分解
decompose(x, type = c("additive", "multiplicative"), filter = NULL)
xl<- ts(testSrc$dp,start=c(2016,01,01),frequency=365) ##季节分解 ml <- decompose(xl,c("multiplicative")) plot(ml)
在分解季节成分的基础上,如果有需要的话,我们可以对时间序列进行季节因素调整,将这一部分信息从原始数据中去除。
xl<- ts(testSrc$dp,start=c(2016,01,01),frequency=365) ##季节分解 ml <- decompose(xl,c("multiplicative")) plot(ml)
data2 <- xl - ml$seasonal
par(mfrow=c(1,2))
plot(xl)
plot(data2)
forecast::ets():拟合指数平滑模型
ets(ts, model="ZZZ",.....)
限制模型的字母有三个。第一个字母代表误差项,第二个字母代表趋势项,第三个字母则代表季节项。
可选的字母包括:相加模型(A)、相乘模型(M)、无(N)、自动选择(Z)。
通过ets()函数自动选取对原始数据拟合优度最高的模型。
> library(forecast) > x <- ets(data2) Warning message: In ets(data2) : I can't handle data with frequency greater than 24. Seasonality will be ignored. Try stlf() if you need seasonal forecasts. > x ETS(M,A,N) Call: ets(y = data2) Smoothing parameters: alpha = 0.9999 beta = 1e-04 Initial states: l = 60125.3605 b = 1757.7865 sigma: 0.0459 AIC AICc BIC 20049.03 20049.12 20072.08 > plot(x)
效果图
预测
> pre <- forecast(x,h=30) > pre$mean Time Series: Start = c(2018, 13) End = c(2018, 42) Frequency = 365 [1] 2159078 2160914 2162751 2164588 2166424 2168261 2170097 2171934 2173771 2175607 2177444 2179281 2181117 2182954 2184790 [16] 2186627 2188464 2190300 2192137 2193974 2195810 2197647 2199483 2201320 2203157 2204993 2206830 2208667 2210503 2212340 > plot(pre)
相关文章推荐
- 时间序列分析之ARIMA上手-Python
- 时间序列分析之一次指数平滑法
- [时间序列分析][5]--非平稳时间序列模型与差分
- R并行做大数据时间序列分析与bootstrap
- 时间序列分析
- 金融时间序列分析:1. 基础知识
- 金融时间序列分析:8. MA模型实例(Python)
- 利用Python进行数据分析--时间序列
- 时间序列分析之AR模型、MA模型和ARMA模型(二)
- 时间序列分析之一次指数平滑法
- R语言实现金融数据的时间序列分析及建模
- 时间序列分析之ARIMA模型预测
- R语言时间序列分析
- 时间序列数据库——索引用ES、聚合分析时加载数据用什么?docvalues的列存储貌似更优优势一些。那分布式计算呢?ES做
- 用R分析时间序列(time series)数据
- ElasticSearch 使用不同表结构存储时间序列数据的查询效率分析
- 时间序列分析记录一
- 时间序列(五)股票分析
- R语言学习笔记(一):时间序列分析
- 时间序列分析(一) 如何判断序列是否平稳