R语言时间序列代码整理

本文整理了R语言中时间序列分析的关键步骤,包括读取数据、平滑化、季节性分解、指数平滑预测(ETS)和ARIMA模型。通过示例代码展示了如何进行简单移动平均、STL分解、ETS模型拟合以及ARIMA模型的选择和预测,为时间序列预测提供了实用的R代码参考。

R语言时间序列代码整理

时间序列:
data<-read.csv('/Users/ji_fanyang/Desktop/test2.csv')
myseries<- ts(data[1],start=c(2017,1),end=c(2020,7),frequency=12)
install.packages('forecast')
library(forecast)

1.时序的平滑化
平滑曲线,居中移动平均
opar<-par(no.readonly=TRUE)
par(mfrow=c(2,2))
ylim<-c(min(myseries),max(myseries))
plot(myseries,main="Raw time series")
plot(ma(myseries,3),main="simple moving average(k=3)",ylim=ylim)
plot(ma(myseries,7),main="simple moving average(k=7)",ylim=ylim)
plot(ma(myseries,15),main="simple moving average(k=15)",ylim=ylim)

2.季节性分解(趋势因子,季节因子,随机因子)
stl=(ts,s.window=,t.window=),为相加模型

S.window:控制季节效应变化的速度,s.window=“periodic”,使得季节效应在每个月都是一致的
t.window:控制趋势变化的速度

myseries2<-log(myseries)
fit<-stl(myseries,s.window="period")
plot(fit)
fit$time.series
exp(fit$time.series):将结果转化为原始尺寸

将季节分解进行可视化
par(mfrow=c(2,1))
monthplot(myseries,xlab='',ylab='')
seasonplot(myseries,year.labels="TRUE")

3.指数预测模型
fit<-ets(log(myseries),model='AAA')
fit(输出)
ETS(A,A,A)

Call:
 ets(y = log(myseries), model = "AAA")

  Smoothing parameters:
    alpha = 1e-04  #水平项
    beta  = 1e-04  #趋势项,小意味着近期观测值的斜率不需要更新
    gamma = 4e-04  #季节项

  Initial states:
    l = 6.2117
    b = -0.0077
    s = -0.5525 -0.056 -0.7451 -1.2488 1.635 0.4444
           1.7078 0.8398 -1.1126 0.2562 -0.2587 -0.9094

  sigma:  3.3361

     AIC     AICc      BIC
279.3346 303.8146 309.2750


accuracy(fit) #
                   ME     RMSE      MAE       MPE     MAPE      MASE
Training set 0.03006177 2.643563 2.103576 -33.22007 56.21131 0.6137234

pred <-forecast(fit,5)  #预测接下来5个月

plot(pred,main='',ylab='log(myseries)',xlab='Time')
pred$mean <-exp(pred$mean)    #返回均值
pred$lower <-exp(pred$lower)    
pred$upper <-exp(pred$upper)   #分别包含80%和95%置信区间的下界和上界
p<-cbind(pred$mean,pred$lower,pred$upper)


3.ets()和自动预测
fit2<-ets(myseries)
生成数据:
fit2
ETS(M,N,M)

Call:
 ets(y = myseries)

  Smoothing parameters:
    alpha = 0.1207
    gamma = 0.1438

  Initial states:
    l = 88818.7326
    s = 0.6389 0.0308 1.2384 0.0096 1.3914 2.5175
           0.4078 3.1015 0.013 0.6068 1.7915 0.2527

  sigma:  1.1362

     AIC     AICc      BIC
971.3118 989.0896 997.7298
> pred2<-forecast(fit2)


4.ARIMA模型
1.验证序列的平稳性
library(forecast)
library(tseries)
ndiff(myseries)   #找到最优值
dmyseries <-diff(myseries,1)
adf.test(dmyseries)

2.选择模型
Acf(dmyseries)
Pacf(dmyseries)

3.拟合模型
fit<-arima(dmyseries,order=c(0,1,1))

4.模型评价(QQ图)
qqnorm(fit$residuals)
qqline(fit$residuals)   #如果数据满足正态分布,则数据中的点会落在图中的线上
Box.test(fit$residuals,type=“Ljung-Box”)  #可以检验残差的自相关系数是否都为0

5.预测:如果残差满足QQ图或者自相关系数为0
forecast(fit,3)
accuracy(forecast)

—Arima自动预测
fit<-auto.arima(myseries)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值