esai大树聚吧 关注:13贴子:345
  • 1回复贴,共1

R语言对时间序列数据的指数预测模型

只看楼主收藏回复

1. 创建时间序列
cc1[,5]<-substr(cc1[,1],1,4);head(cc1)
cc11<-cc1[,c(5,2)];cc11;head(cc11)
cc111<-tapply(cc11[,2],cc11[,1],mean);cc111
str(cc111);plot(cc111)

2. 简单指数平滑法构建模型
cc111e<-ets(cc111,model='ANN');cc111ef<-forecast(cc111e)$mean;cc111e;cc111ef;cc111e

3. 其它指数模型方法
霍特模型AAN(相加误差,相加趋势,无季节性)
温特斯模型AAA(相加误差,相加趋势,有季节性)
4.模型判据
判断模型优劣也可以通过summary(),它可以查到更多判断条件;
R语言还自带zzz模型可智能选取最优模型;
判断条件以AIC标准,AIC越小模型越好,AIC评价模型兼顾了模型的简洁性和精确性。


IP属地:湖南1楼2022-03-08 10:18回复
    #多项式回归/拟合
    cc<-sunspots[1:120];x=1:120
    fitm<-lm(cc~poly(x,5))
    plot(cc,col=rainbow(12),type='o',tck=0.01);
    lines(fitm$fitted,lty=3,lwd=3,col='green')
    summary(fitm);
    coef(fitm);confint(fitm);anova(fitm)
    deviance(fitm);df.residual(fitm) #拟合模型的偏差及残差自由度
    plot(hatvalues(fitm));plot(rstudent(fitm)); #帽子值,学生化残差值、距离统计量近似值
    plot(cooks.distance(fitm))
    #根据模型预测——多项式
    ccpred<-predict(fitm,data.frame(x=121:140));ccpred
    plot(cc,xlim=c(1,140),col=terrain.colors(12),type='o',tck=0.01);
    lines(fitm$fitt,col='blue',lwd=4)
    points(121:140,ccpred,col='red',pch=15,cex=0.6)
    =============================================
    出现错误:
    Warning message:
    'newdata'必需有60行 但变量里有180行
    训练集里面的变量名与验证集上变量名不一样;
    而训练集因为取出的时候重新命名了所以没有影响
    predict()使用时,newdata的列名必须和training set的列名相同;
    test_hat<-predict(lm2,newdata=data_test,interval="predict")#得到新数据集的预测值,interval="predict"表示给出置信区间
    ===============================================
    报错三种:
    #1. object 'lm2' not found#某个变量名找不到
    #2.numeric 'envir' arg not of length one#这个错误很明显,一看就知道是新数据就一个数或向量,就不用解释了(已经说了必须是数据框)
    #3. 'newdata' had 2 rows but variables found have 7 rows #新数据集的行数和模型的数据量不匹配,其实即使匹配了预测得到的结果也不是你想要的结果,而是原模型自身的拟合结果,不信你完全可以试试,预测之后你可以对比原模型的拟合值(只需调用lm2$fitted.values即可),你会发现不管你怎么改变新数据集,预测值都还是原模型的拟合值(即lm2$fitted.values)。

    解决:
    #这里最关键的步骤就是必须保证data_test的列名必须和data1完全保持一致,不然肯定会报错或者警告;
    #假设因变量就是data1的第一列
    colnames(data_test)<-colnames(data1)[-1]#这一步绝对不能省,否则必然报错


    IP属地:湖南2楼2022-05-17 20:09
    回复