一、拟合线性趋势

用lm函数可以拟合线性趋势,命令格式为:

   lm(y~a+x1+x2,data=)

其中:y:因变量

      a:指定是否需要常数项,a=1时有常数项,a=0时无常数项

      x1,x2:自变量

      data:数据框名,如果自变量和因变量不是独立输入变量而是共同存在某数据框,则需指定数据框名

例如:用线性函数拟合澳大利亚政府1981-1990每季度的消费支出数据

读取数据:

x<-c(8444,9215,8879,8990,8115,9457,8590,9294,8997,9574,9051,9+724,9120, 10143,9746,10074,9578,10817,10116, 10779,9901,11266,106

+86,10961,10121, 11333,10677,11325,10698,11624,11502, ,11393,10609,

+12077,11376,11777, 11225,12231,11884,12109)

输入自变量:

t<-c(1:40)

拟合模型:

x.fit<-lm(x~t)

查看拟合信息:

summary(x.fit)

可输出拟合信息:

  

Python arima模型结果拟合 arima模型拟合图怎么做_时序数据库

回归方程估计结果:

Python arima模型结果拟合 arima模型拟合图怎么做_算法_02

 

绘制拟合效果图,可输入:

x<-ts(x)

plot(x)

abline(lm(x~t),col=2)

则输出图形:

Python arima模型结果拟合 arima模型拟合图怎么做_拟合_03

二、拟合非线性趋势

如果序列表现出非线性趋势,则应该用nls函数进行曲线拟合,命令格式为:

   nls(y~f(x1,x2,xn),data=,start=)

其中:

y:因变量

x1,x2xn:自变量

f:非线性函数

data:数据框名

start:如果用迭代法估计未知参数,可以指定迭代初始值

例如:对我国1949-2008化肥产量序列进行曲线拟合,根据序列的曲线特点,采用二次函数拟合:


Python arima模型结果拟合 arima模型拟合图怎么做_r语言_04


 

输入:

a<-read.table("E:/R/data/file12.csv",sep=",",header = T)

x<-ts(a$output,start=1949)

t1<-c(1:60)

x.fit2<-nls(x~a+b*t1+c*t1^2,start = list(a=1,b=1,c=1))

summary(x.fit2)

可得如下结果:

Python arima模型结果拟合 arima模型拟合图怎么做_Python arima模型结果拟合_05

即拟合模型为:

Python arima模型结果拟合 arima模型拟合图怎么做_r语言_06


 

输入如下命令,可以观察拟合效果:

y<-predict(x.fit2)

y<-ts(y,start = 1949)

plot(x,type = "p")

lines(y,col=2,lwd=2)

拟合效果图如下:

Python arima模型结果拟合 arima模型拟合图怎么做_拟合_07

平滑法

1,移动平均法

下载TTR程序包,并用library加载,其中的SMA函数可对序列作简单移动平均,命令格式为:

   SMA(x,n=)

其中:x:序列名

      n:移动平均期数

2,指数平滑法,分三种类型:简单指数平滑(适用于没有趋势的序列),Holt两参数平滑(适用于有线性趋势的序列),Holt-Winters三参数平滑(适用于有季节效应的序列)。

HoltWinters函数可以进行三种类型指数平滑拟合,命令格式如下:

HoltWinters(x,alpha=,beta=,gamma=,seasonal=)

其中:

x:序列名

alpha:随机波动部分的参数

beta:趋势部分的参数

gamma:季节部分的参数

(1)当alpha不指定,beta=F,gamma=F时,表示拟合简单指数平滑

(2)当alpha和beta不指定,gamma=F时,拟合Holt两参数指数平滑

(3)当三个参数都不指定时,拟合HoltWinters三参数指数平滑

seasonal:当拟合HoltWinters三参数模型时,要指定季节与趋势的关系

seasonal="additive"表示加法关系(默认项)

seasonal="multiplicative"表示乘法关系

例如:对1962年1月-1975年12月平均每头奶牛月产奶量序列进行HoltWinters三参数平滑,并预测未来两年的序列值。可输入:

b<-read.table("E:/R/data/file5.csv",sep=",",header = T)

x<-ts(b$milk,start = c(1962,1),frequency = 12)

x.fit<-HoltWinters(x)

x.fit

可以得出如下结果:

Python arima模型结果拟合 arima模型拟合图怎么做_算法_08

 

可以观察拟合效果图和预测效果图:

plot(x.fit)

x.fore<-forecast(x.fit,h=24)

plot(x.fore)

Python arima模型结果拟合 arima模型拟合图怎么做_算法_09

Python arima模型结果拟合 arima模型拟合图怎么做_拟合_10

 

综合分析

当序列既有趋势,又有季节效应时,应该进行综合分析,综合分析时可采用加法模型和乘法模型:

  1. 加法模型:
  2. 乘法模型:

 

进行综合分析用的函数是decompose,命令格式为:

         decompose(x,type=)

其中:x:序列名

      type:指定是加法模型还是乘法模型

  1. type="additive",加法模型
  2. type="multiplicative",乘法模型

例如:对1993年1月到2000年12月中国社会消费品零售总额进行确定性因素分解

首先,读取数据,绘制时序图:

c<-read.table("E:/R/data/file14.csv",sep=",",header = T)

x<-ts(c$sales,start = c(1993,1),frequency = 12)

plot(x)

Python arima模型结果拟合 arima模型拟合图怎么做_拟合_11

从图像可以看出,序列既有上升趋势,又有季节效应,而且季节波动幅度随着序列值的增大而增大,所以应采用乘法模型。

输入:

x.fit<-decompose(x,type="mult")

#确定性因素分解

x.fit$figure

plot(x.fit$figure,type = "o")

#查看季节指数,并画季节指数图

x.fit$trend

plot(x.fit$trend)

#查看趋势拟合值,并画趋势拟合图

x.fit$random

plot(x.fit$random)

#查看残差值,并画残差图

x.fit

plot(x.fit)

查看拟合值,并画出时序的因素分解图

Python arima模型结果拟合 arima模型拟合图怎么做_时序数据库_12