R语言-时间序列
时间序列:可以用来预测未来的参数,
1.生成时间序列对象
sales <- c(18, 33, 41, 7, 34, 35, 24, 25, 24, 21, 25, 20,
22, 31, 40, 29, 25, 21, 22, 54, 31, 25, 26, 35)
# 1.生成时序对象
tsales <- ts(sales,start = c(2003,1),frequency = 12)
plot(tsales)
# 2.获得对象信息
start(tsales)
end(tsales)
frequency(tsales)
# 3.对相同取子集
tsales.subset <- window(tsales,start=c(2003,5),end=c(2004,6))
tsales.subset


结论:手动生成的时序图
2.简单移动平均
案例:尼罗河流量和年份的关系
library(forecast)
opar <- par(no.readonly = T)
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=3)',ylim = ylim)
plot(ma(Nile,15),main = 'Simple Moving Averages (k=3)',ylim = ylim)
par(opar)

结论:随着K值的增大,图像越来越平滑我们需要找到最能反映规律的K值
3.使用stl做季节性分解
案例:Arirpassengers年份和乘客的关系
# 1.画出时间序列
plot(AirPassengers)
lAirpassengers <- log(AirPassengers)
plot(lAirpassengers,ylab = 'log(Airpassengers)')
# 2.分解时间序列
fit <- stl(lAirpassengers,s.window = 'period')
plot(fit)
fit$time.series
par(mfrow=c(2,1))
# 3.月度图可视化
monthplot(AirPassengers,xlab='',ylab='')
# 4.季度图可视化
seasonplot(AirPassengers,year.labels = T,main = '')


原始图 对数变换


总体趋势图 月度季度图
4.指数预测模型
4.1单指数平滑
案例:预测康涅狄格州的气温变化
# 1.拟合模型
fit2 <- ets(nhtemp,model = 'ANN')
fit2
# 2.向前预测
forecast(fit2,1)
plot(forecast(fit2,1),xlab = 'Year',
ylab = expression(paste("Temperature (",degree*F,")",)),
main="New Haven Annual Mean Temperature")
# 3.得到准确的度量
accuracy(fit2)

结论:浅灰色是80%的置信区间,深灰色是95%的置信区间

4.2有水平项,斜率和季节项的指数模型
案例:预测5个月的乘客流量
# 1.光滑参数
fit3 <- ets(log(AirPassengers),model = 'AAA')
accuracy(fit3)
# 2.未来值预测
pred <- forecast(fit3,5)
pred
plot(pred,main='Forecast for air Travel',ylab = 'Log(Airpassengers)',xlab = 'Time')
# 3.使用原始尺度预测
pred$mean <- exp(pred$mean)
pred$lower <- exp(pred$lower)
pred$upper <- exp(pred$upper)
p <- cbind(pred$mean,pred$lower,pred$upper)
dimnames(p)[[2]] <- c('mean','Lo 80','Lo 95','Hi 80','Hi 95')
p


结论:从表格中可知3月份的将会有509200乘客,95%的置信区间是[454900,570000]
4.3ets自动预测
案例:自动预测JohnsonJohnson股票的趋势
fit4 <- ets(JohnsonJohnson)
fit4
plot(forecast(fit4),main='Johnson and Johnson Forecasts',
ylab="Quarterly Earnings (Dollars)", xlab="Time")

结论:预测值使用蓝色线表示,浅灰色表示80%置信空间,深灰色表示95%置信空间
5.ARIMA预测
步骤:
1.确保时序是平稳的
2.找出合理的模型(选定可能的p值或者q值)
3.拟合模型
4.从统计假设和预测准确性等角度评估模型
5.预测
library(tseries)
plot(Nile)
# 1.原始序列差分一次
ndiffs(Nile) dNile <- diff(Nile)
# 2.差分后的图形
plot(dNile)
adf.test(dNile)
Acf(dNile)
Pacf(dNile)
# 3.拟合模型
fit5 <- arima(Nile,order = c(0,1,1))
fit5
accuracy(fit5)
# 4.评价模型
qqnorm(fit5$residuals)
qqline(fit5$residuals)
Box.test(fit5$residuals,type = 'Ljung-Box')
# 5.预测模型
forecast(fit5,3)
plot(forecast(fit5,3),xlab = 'Year',ylab = 'Annual Flow')


原始图 一次差分图形


正态Q-Q图(如果满足正态分布,点会落在图中的线上) 使用Arima(0,1,1)模型的预测值
Arima自动预测
案例:预测3个月之后的太阳黑子
fit6 <- auto.arima(sunspots)
fit6
forecast(fit6,3)
accuracy(fit6)
plot(forecast(fit6,3), xlab = "Year",
ylab = "Monthly sunspot numbers")

结论:函数自动选定(2,1,2)与其他模型相比,AIC的值最小,预测结果更准确
R语言-时间序列的更多相关文章
- R语言-时间序列图
1.时间序列图 plot()函数 > air<-read.csv("openair.csv") > plot(air$nox~as.Date(air$date,& ...
- 基于R语言的时间序列指数模型
时间序列: (或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列.时间序列分析的主要目的是根据已有的历史数据对未来进行预测.(百度百科) 主要考虑的因素: 1.长期趋势(Lon ...
- Rserve详解,R语言客户端RSclient【转】
R语言服务器程序 Rserve详解 http://blog.fens.me/r-rserve-server/ Rserve的R语言客户端RSclient https://blog.csdn.net/u ...
- 【R语言学习】时间序列
时序分析会用到的函数 函数 程序包 用途 ts() stats 生成时序对象 plot() graphics 画出时间序列的折线图 start() stats 返回时间序列的开始时间 end() st ...
- 用R语言的quantreg包进行分位数回归
什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...
- R语言学习笔记-机器学习1-3章
在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...
- R入门<三>-R语言实战第4章基本数据管理摘要
入门书籍:R语言实战 进度:1-4章 摘要: 1)实用的包 forecast:用于做时间序列预测的,有auto.arima函数 RODBC:可以用来读取excel文件.但据说R对csv格式适应更加良好 ...
- R语言实战(三)基本图形与基本统计分析
本文对应<R语言实战>第6章:基本图形:第7章:基本统计分析 =============================================================== ...
- 机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现
Twritters的异常检测算法(Anomaly Detection)做的比较好,Seasonal Hybrid ESD算法是先用STL把序列分解,考察残差项.假定这一项符合正态分布,然后就可以用Ge ...
随机推荐
- 【深度学习系列】迁移学习Transfer Learning
在前面的文章中,我们通常是拿到一个任务,譬如图像分类.识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性.时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型, ...
- 反编译class文件并重新编译的方法
在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...
- join on用法
内连接和外连接 内连接用于返回满足连接条件的记录:而外连接则是内连接的扩展,它不仅会满足连接条件的记录,而且还会返回不满足连接条件的记录 内连接 内连接查询返回满足条件的所有记录,默认情况下没有指定任 ...
- PHP中文网上的无限极分类
原文地址:http://www.php.cn/code/3966.html fenlei.php <?php class fenlei { public $db; //构造函数,构造函数没有返回 ...
- zabbix监控-部署(一)
zabbix之自动化监控-部署篇(一) 标签(空格分隔): linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 浅谈监控 监控命令 查看硬件的温度/风扇转 ...
- 什么是Servlet,Servlet的作用,生命周期,如何创建、配置Servlet
什么是Servlet,作用是? servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.servlet由se ...
- Python CRM项目七
仿照Django Admin实现对readonly的字段进行设置 功能点: 1.页面不可进行更改 2.如果改变html代码中的值,则需要进行后端的数据库数据校验 3.可以对某些字段进行自定制校验规则 ...
- 爬取西刺网的免费IP
在写爬虫时,经常需要切换IP,所以很有必要自已在数据维护库中维护一个IP池,这样,就可以在需用的时候随机切换IP,我的方法是爬取西刺网的免费IP,存入数据库中,然后在scrapy 工程中加入tools ...
- 在SecureCRT中无需输入密码登录Linux主机
服务器端操作系统:CentOs 5.8客户端:SecureCRT5.1.3第一步:密钥对的生成.在SecureCRT中建立一个新的连接.protocol选ssh2hostname输入要连接的主机IP. ...
- Linux tail,cat,head命令
tail命令用于将文件的最后部分输出到标准设备,通常是终端,也可以支持更新操作,当文档内容发生变化时,tail会自己主动刷新,确保你看到最新的档案内容. 1.tail -f filename 监视fi ...