精华内容
下载资源
问答
  • 提出了一种基于经验模式分解和支持向量回归的线性、非平稳时间序列预测建模方法。首先,针对时间序列的平稳特征,通过经验模式分解将其分解为若干个本征模式分量,使其中每个分量均成为平稳序列;其次,对每个...
  • 提出一种基于二进正交小波变换和AR-LSSVM方法非平稳时间序列预测方案.首先利用Mallat 算法对非平稳时间序列进行分解和重构,分离出非平稳时间序列中的低频信息和高频信息;然后对高频信息构建自回归模型,对低频信息...
  • 基于支持向量机方法非平稳时间序列的预测!
  • 平稳时间序列预测

    千次阅读 2017-06-24 09:43:47
    所谓预测,就是要利用序列已知的样本值对序列在未来的某个时刻的取值进行估计。目前对平稳序列最常用的预测方法是线性最小方差预测。线性是指预测值为观察值序列的线性函数,最小方差是指预测方差达到最小。

    所谓预测,就是要利用序列已知的样本值对序列在未来的某个时刻的取值进行估计。目前对平稳序列最常用的预测方法是线性最小方差预测。线性是指预测值为观察值序列的线性函数,最小方差是指预测方差达到最小。

    AR(p)序列预测

    下载并调用forecast()
    -object:拟合信息文件名。
    -h:预测期数。
    -level:置信区间的置信水平,不特殊指定的话,系统会自动给出置信水平的分别为80%和95%的置信区间。

    根据1950-2008年的观察值序列预测2009-2013年的新增加里程数:

     library(forecast)
    > a<-read.table("D:/R-TT/book4/4R/data/file8.csv",sep=",",header = T)
    > x<-ts(a$kilometer,start=1950)
    > x.fit<-arima(x,order = c(2,0,0))
    > x.fore<-forecast(x.fit,h=5)
    > x.fore
         Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
    2009       9.465515 -15.02434 33.95537 -27.98848 46.91951
    2010       6.215194 -23.94089 36.37128 -39.90456 52.33495
    2011       8.392736 -21.76507 38.55054 -37.72964 54.51512
    2012      11.678108 -19.95476 43.31098 -36.70019 60.05640
    2013      12.885903 -19.44653 45.21833 -36.56228 `
    2.33409

    系统默认输出预测图
    plot(x.fore)
    预测区间

    MA(q)序列预测

    方法同上,更改ARIMAl中的order参数.

    ARMA(p,q)序列预测

    方法同上,更改ARIMAl中的order参数.

    展开全文
  • 上篇文章简单提到了应该用平稳时间序列做预测,本文将介绍具体概念和原因。 Stationary Series 平稳序列 平稳序列有三个基本标准: 1、序列的均值(mean)不应该是时间的函数(意思是不应该随时间变化),而应该是一个...

    上篇文章简单提到了应该用平稳时间序列做预测,本文将介绍具体概念和原因。

    Stationary Series 平稳序列

    平稳序列有三个基本标准:

    1、序列的均值(mean)不应该是时间的函数(意思是不应该随时间变化),而应该是一个常数。下面的左图满足这个条件,而右图的均值受时间的变化影响。

    2、序列的方差(variance)不应该是时间的函数。这种特性称为homoscedasticity(同方差性)。下图描绘了平稳序列和非平稳序列,注意右图分布的不同变化范围。

    3、t时间段的序列和前一个时间段的序列的协方差(协方差,衡量的是两个变量在一段时间内同向变化的程度)应该只和时间间隔有关,而与时间t无关,在时间序列中,因为是同一个变量在不同时间段的值序列,所以这里的协方差称为自协方差。右图随着时间的增加,有一段变得越来越紧密了。所以右图的序列的协方差不是常数。

    带有趋势和季节性成分的时间序列都是非平稳的,下图给出了更多的区分平稳性的例子:

    为什么要关注序列的平稳性?

    大多数的统计预测方法都是以平稳时间序列为假设前提来设计的。
    比如,对于时间序列自回归预测来说,我们的假设是变量的历史和现状呈现出的基本特性,在未来阶段的一个长时期里会维持不变,而这里的基本特性一般就是用上面提到的均值、方差、自协方差来表示。
    更具体的说,自回归预测模型本质是'利用序列的滞后阶数(lags)作为自变量'的线性回归模型,比如lags=2表示使用变量的t-1和t-2时刻的值作为自变量来预测t时刻的值。那么通过在历史序列上训练模型后,得到的这个线性回归模型的各自变量的系数就代表了各滞后时刻的值与下一时刻值的相关性,如果时间序列接近平稳,这些相关性在未来一段时间内都不会有大的变化,那么预测未来就成为了可能。
    所以,相对非平稳序列的预测,平稳序列的预测更简单和可靠。

    非平稳序列如何做预测?

    对于非平稳时间序列的预测,我们需要先将其转换为平稳时间序列,方法包括:

    • 差分(一阶或n阶)
    • 取log
    • 开根号
    • 时间序列分解
    • 综合使用上面的方法

    一般来说,做个一阶差分,就可以得到接近平稳的时间序列了,如果方差随时间变化较大,那么先取log再做一阶差分就可以了。

    什么是差分?

    比如有一个序列:[1,5,2,12,20]
    一阶差分,得到:[5-1, 2-5, 12-2, 20-12] = [4, -3, 10, 8]
    二阶差分(即在一阶差分之后,再做一次差分),得到:[-3-4, -10-3, 8-10] = [-7, -13, -2]

    如何测试序列的平稳性?

    对于判断时间序列是否平稳,可以通过肉眼观测时间序列图,就类似上面提到的平稳性的3个基本标准,或者
    将时间序列分成多个连续的部分,计算各部分的均值、方差和自相关性(或协方差),如果结果相差很大,那么序列就不平稳。但是这些方法都不能量化平稳性,也就是用一个数值来表示出时间序列的平稳性。为此,我们可以使用‘Unit Root Tests’即单位根检验,该方法的思想是如果时间序列有单位根,则就是非平稳的。

    以下是常用的两个基于单位根检验思想的实现:

    • Augmented Dickey Fuller test (ADF Test)
      零假设为序列有单位根,是非平稳的,P-Value如果小于显著级别(0.05),则可以拒绝零假设。
    • Kwiatkowski-Phillips-Schmidt-Shin – KPSS test (trend stationary)
      与ADF正好相反,零假设为序列是平稳的。另外,在python中,可以通过指定regression='ct'参数来让kps把“确定性趋势(deterministic trend)”的序列认为是平稳的。所谓确定性趋势的序列就是斜率始终保持不变的序列,比如下面这样的:

    下面是对应的python代码:

    from statsmodels.tsa.stattools import adfuller, kpss
    df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv', parse_dates=['date'])
    
    # ADF Test
    result = adfuller(df.value.values, autolag='AIC')
    print(f'ADF Statistic: {result[0]}')
    print(f'p-value: {result[1]}')
    for key, value in result[4].items():
        print('Critial Values:')
        print(f'   {key}, {value}')
    
    # KPSS Test
    result = kpss(df.value.values, regression='c')
    print('\nKPSS Statistic: %f' % result[0])
    print('p-value: %f' % result[1])
    for key, value in result[3].items():
        print('Critial Values:')
        print(f'   {key}, {value}')
    

    输出:

    ADF Statistic: 3.14518568930674
    p-value: 1.0
    Critial Values:
       1%, -3.465620397124192
       Critial Values:
       5%, -2.8770397560752436
       Critial Values:
       10%, -2.5750324547306476
    
    KPSS Statistic: 1.313675
    p-value: 0.010000
    Critial Values:
       10%, 0.347
       Critial Values:
       5%, 0.463
       Critial Values:
       2.5%, 0.574
       Critial Values:
       1%, 0.739
    

    白噪声和平稳序列的区别

    白噪声的遵循均值为0的随机分布,没有丝毫的模式可言。用python制造一个白噪声序列,并可视化如下:

    randvals = np.random.randn(1000)
    pd.Series(randvals).plot(title='Random White Noise', color='k')
    

    去除趋势

    • 减去最佳拟合线
    • 减去均值线,或者移动平均线
    • 减去/除以 利用时间序列分解出的趋势序列

    去除季节性

    • 季节性窗口内的移动平均法,平滑季节性
    • 季节性差分,就是用当前值减去一个季节窗口之前对应的时刻的值
    • 减去/除以 利用时间序列分解出的季节性序列

    如何判断序列是否有季节性?

    • 通过肉眼看图
    • 通过自相关函数判断
    from pandas.plotting import autocorrelation_plot
    df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv')
    
    # Draw Plot
    plt.rcParams.update({'figure.figsize':(9,5), 'figure.dpi':120})
    autocorrelation_plot(df.value.tolist())
    

    • 通过时间序列分解出的季节性序列来计算,其思想是越没有季节性,那么Rt的方差和Rt+St的方差越应该区别不大,反之,这个方差的比值越应该小于1,公式如下:

      Fs越接近0,越没有季节性,越接近1,季节性越强。

    ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。

    展开全文
  • 本文中,我们提出两种估计ARMA(自回归滑动平均)模型参数的新方法。第一种方法是对迭代逆滤波法(ITIF)的改进,第二种方法基于谱转换技术。两种方法都是迭代算法,文中将两种新方法的计算结果与ITIF法进行了比较。
  • 提出一种基于二进正交小波变换和AR-LSSVM方法非平稳时间序列预测方案。首先利用Mallat算法对非平稳时间序列进行分解和重构,分离出非平稳时间序列中的低频信息和高频信息;然后对高频信息构建自回归模型,对低频...
  • 提出基于二进正交小波变换和残差GM(1,1)-AR方法非平稳时间序列预测方案.首先利用Mallat算法对非平稳时间序列进行分解和重构,分离出非平稳时间序列中的低频信息和高频...
  • 非平稳时间序列趋势分析

    万次阅读 2017-06-25 10:21:01
    有些时间序列具有非常显著的趋势,有时我们分析的目的就是要找到序列中的这种趋势,并利用这种趋势对未来的发展作出合理的预测。趋势拟合法趋势拟合法就是把时间作为自变量,相应的序列观测值做为因变量,建立序列值...

    有些时间序列具有非常显著的趋势,有时我们分析的目的就是要找到序列中的这种趋势,并利用这种趋势对未来的发展作出合理的预测。

    趋势拟合法

    趋势拟合法就是把时间作为自变量,相应的序列观测值做为因变量,建立序列值随时间变化的回归模型的方法。根据序列所表现出的线性或者非线性特征,拟合方法又可以具体分为线性拟合曲线拟合。

    线性拟合

    如果长期趋势呈现出线性特征,那我们可以用线性模型来拟合。
    R语言使用lm函数拟合线性趋势。
    lm(Y ~ a + X1 + X2 +…+Xn,data = )

    -Y:响应变量
    -a:指定是否需要常数项
    (1)a = 1,模型有非零常数项,这是默认设置。
    (2)a = 0,模型不需要常数项。
    -X1,…,Xn:自变量。
    -data:数据框名。如果自变量和响应变量不是独立输入变量而是共同存在于某个数据框中,则需要指定数据框名。

    #读入数据
    x<-c(8444,9215,8879,8990,8115,9457,8590,9294,8997,9574,9051,9724,9120,
         + 10143,9746,10074,9578,10817,10116,10779,9901,11266,10686,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)
    Call:
    lm(formula = x ~ t)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -853.06 -329.64   63.54  314.46  794.04 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept) 8491.765    137.964   61.55   <2e-16 ***
    t             90.009      5.864   15.35   <2e-16 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 428.1 on 38 degrees of freedom
    Multiple R-squared:  0.8611,    Adjusted R-squared:  0.8575 
    F-statistic: 235.6 on 1 and 38 DF,  p-value: < 2.2e-16
    
    #绘制拟合效果图
    x<-ts(x)
    plot(x)

    时序图

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

    拟合效果图

    曲线拟合

    如果长期趋势呈现出非线性特征,那么我们可以用曲线典线模型来拟合它。对曲线模型进行参数估计时,能转换成线性模型的都转化成线性模型,用线性最小二乘法进行参数估计,实在不能转化成线性模型的,就用迭代法进行参数估计。
    这里写图片描述
    这里写图片描述
    R语言针对非线性趋势的拟合也分为两类:一类可以写成关于时间t的多项式,这时仍然可以用lm函数拟合。另一类无法通过适当的变换变成线性回归模型,只能通过非线性回归解决,这时要用nls函数。
    nls(Y ~ f(x1,…,xn),data=,start=)

    -Y:响应变量。
    -X1,…,Xn:自变量
    -f:非线性函数
    -data:数据框名
    -start:如果需要利用迭代计算未知参数,可以指定迭代初始值。

    1949-2008年化肥产量序列进行曲线拟合’
    lm函数拟合

    a<-read.table("D:/R-TT/book4/4R/data/file12.csv",sep=",",header = T)
    x<-ts(a$output,start=1949)
    #lm函数拟合
    t1<-c(1:60)
    t2<-t1^2
    x.fit1<-lm(x~t1+t2)
    summary(x.fit1)
    Call:
    lm(formula = x ~ t1 + t2)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -532.12 -164.92   24.68  105.51  716.37 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept) 319.0255   105.3371   3.029  0.00369 ** 
    t1          -57.7690     7.9679  -7.250 1.22e-09 ***
    t2            2.3551     0.1266  18.601  < 2e-16 ***
    ---
    Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1
    
    Residual standard error: 263 on 57 degrees of freedom
    Multiple R-squared:  0.9755,    Adjusted R-squared:  0.9746 
    F-statistic:  1133 on 2 and 57 DF,  p-value: < 2.2e-16

    nls函数拟合

     x.fit2<-nls(x~a+b*t1+c*t1^2,start = list(a=1,b=1,c=1))
    > summary(x.fit2)
    
    Formula: x ~ a + b * t1 + c * t1^2
    
    Parameters:
      Estimate Std. Error t value Pr(>|t|)    
    a 319.0255   105.3371   3.029  0.00369 ** 
    b -57.7690     7.9679  -7.250 1.22e-09 ***
    c   2.3551     0.1266  18.601  < 2e-16 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 263 on 57 degrees of freedom
    
    Number of iterations to convergence: 1 
    Achieved convergence tolerance: 3.059e-08

    根据输出结果可以知道,这两个函数得到的拟合结果完全一致,1949-2008年我国化肥序列的拟合模型为:
    Xt = 319.0255 - 57.769t +2.3551t^2 N(0,263^2)

    y<-predict(x.fit2)
    y<-ts(y,start = 1949)
    plot(x,type = "p")
    lines(y,col=2,lwd=2)

    这里写图片描述

    平滑法

    平滑法是进行趋势分析和预测时常用的一种方法,它是利用修匀技术,消弱短期随机波动的序列的影响,使序列平滑化,从而显示出变化的规律。它具有调节灵活、计算简便的特征,广泛应用于计量经济、人口研究等诸多领域。根据所有的平滑技术的不同,平滑法又可以具体分为移动平均法与指数平滑法。

    移动平均法

    移动平均法的基本思想是对于一个时间序列{Xt},我们可以假定在一个比较短的时间间隔内,序列的预测值是比较平稳的,它们之间的差异主要是由随机波动造成的,根据这种假定,我们可以使用一定时间间隔的平均值作为下一期的估计值。
    移动平均的期数对原序列的修匀效果影响很大,要确定移动平均的期数,一般会从如下三个方面加以考虑:
    (1)事件的发展有无周期性。
    (2)对趋势平滑性的要求。
    (3)对趋势反映近期灵敏度的要求。
    在R语言中,TTR程序包中的SMA函数是专门用来作简单移动平均趋势拟合的函数。
    SMA(x,n)

    -x:需要做简单的移动平均的序列名
    -n:移动平均期数

    对北京市1949年-1998年每年最高气温序列进行进行5期移动平均拟合。

    library(TTR)
    a<-read.table("D:/R-TT/book4/4R/data/file6.csv",",",header = T)
    x<-ts(a$temp,start = 1949)
    x.ma<-SMA(x,n=5)
    plot(x,type = "o")
    lines(x.ma,col=2,lwd=2)

    这里写图片描述

    指数平滑法

    移动平均法实际上就是用一个简单的加权平均数作为某一期的趋势的估计值。
    原理为近期的结果对现在的影响大些,远期的结果对现在的影响小些。
    各期权重随时间间隔的增大而呈指数衰减,这就是指数平滑法的基本思想。
    1.简单的指数平滑
    这里写图片描述
    2.Holt两参数指数平滑
    适用于对含有线性趋势的序列进行修匀。它的基本思想是假定序列有一个比较固定的线性趋势——每期都递增r或者递减r,那么第t期的估计值就应该等于第t-1期的观察值加上每期固定的趋势变动。
    这里写图片描述
    这里写图片描述
    3.Holt-Winters三参数指数平滑
    假定要进行指数平滑的序列为{Xt},{Xt}序列既含有趋势又含有季节。这个季节因子可以随每年的具体情况波动,因为引入了季节因子,所以构建了三参数模型。
    在R语言中,HoltWinters函数可以完成上述三种平滑趋势拟合。
    HoltWinters(x,alpha=,beta=,gamma=,seasonal=)

    -x:要进行指数平滑的序列名
    -alpha:随机波动部分的参数
    -beta:趋势部分的参数
    -gamma:季节部分的参数
    这三个指数联合起来,确定要拟合的指数平滑模型类型:
    (1)当alpha不指定时,beta = F,gamma=F,表示拟合简单指数平滑模型。
    (2)当alpha和beta不指定时,gamma=F时,表示拟合Holt两参数指数平滑模型。
    (3)当三个参数都不指定时,表示拟合Holt-Winters三参数指数平滑模型。
    -seasonal:当既含有季节的又含有趋势时,指定季节与趋势的关系。
    seasonal = “additive”表示加法关系, 这是系统默认选项。seasonal=”multiplicative”表示乘法关系。

    对1964-1999年中国纱年产量序列分析,并预测未来10年的

    #读入序列
    a<-read.table("D:/R-TT/book4/4R/data/file4.csv",sep=",",header = T)
    x<-ts(a$output,start = 1964)
    #进行Holt两参数平滑
    x.fit<-HoltWinters(x,gamma = F)
    x.fit
    Holt-Winters exponential smoothing with trend and without seasonal component.
    
    Call:
    HoltWinters(x = x, gamma = F)
    
    Smoothing parameters:
     alpha: 0.855644
     beta : 0.158537
     gamma: FALSE
    
    Coefficients:
           [,1]
    a 565.55301
    b  12.29066
    #绘制Holt两参数指数平滑拟合效果图
    plot(x.fit)

    这里写图片描述

    #预测序列并绘制预测效果图
    library(forecast)
    x.fore<-forecast(x.fit,h=10)
    x.fore
     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
    2000       577.8437 545.8643 609.8230 528.9355 626.7519
    2001       590.1343 545.1051 635.1636 521.2681 659.0006
    2002       602.4250 544.7497 660.1003 514.2182 690.6318
    2003       614.7157 544.3115 685.1198 507.0417 722.3896
    2004       627.0063 543.6025 710.4101 499.4512 754.5614
    2005       639.2970 542.5375 736.0565 491.3161 787.2779
    2006       651.5876 541.0751 762.1002 482.5733 820.6020
    2007       663.8783 539.1960 788.5606 473.1931 854.5635
    2008       676.1690 536.8922 815.4458 463.1635 889.1744
    2009       688.4596 534.1622 842.7570 452.4821 924.4371
    plot(x.fore)

    这里写图片描述
    对1962年1月和1975年12月平均每头奶牛月产奶量序列进行Holt-Winters三参数指数平滑

    #读入序列
    b<-read.table("D:/R-TT/book4/4R/data/file5.csv",sep=",",header = T)
    x<-ts(b$milk,start = c(1962,1),frequency = 12)
    #进行Holt-winters三参数指数平滑
    x.fit<-HoltWinters(x)
    x.fit
    Holt-Winters exponential smoothing with trend and additive seasonal component.
    
    Call:
    HoltWinters(x = x)
    
    Smoothing parameters:
     alpha: 0.68933
     beta : 0
     gamma: 0.8362592
    
    Coefficients:
              [,1]
    a   885.775547
    b     1.278118
    s1  -16.743296
    s2  -59.730034
    s3   47.492731
    s4   56.203890
    s5  115.537545
    s6   84.554817
    s7   39.580306
    s8   -4.702033
    s9  -54.554684
    s10 -51.582594
    s11 -85.953466
    s12 -42.907363
    #绘制Holt-winters三参数指数平滑拟合效果图
    plot(x.fit)

    这里写图片描述

    #预测序列并绘制预测效果图
    x.fore<-forecast(x.fit,h=24)
    plot(x.fore)
    

    月度产奶量Holt-Winters三参数指数平滑序列预测图
    月度产奶量Holt-Winters三参数指数平滑序列预测图

    展开全文
  • 文章目录一、方差不平稳二、具有趋势性1、回归分析法2、随机趋势3、平滑法 一、方差不平稳 最简单的是做对数变换,使得前后方差没有那么变化。 二、具有趋势性 1、回归分析法 对于一个有线性趋势的序列,可以做一个...


    前言

    时间序列为什么要平稳后建模?

    • 时间序列是平稳的,则没有任何预测价值,因为均值不变,所以实际上人们只会对非平稳时间序列感兴趣
    • 之所以研究平稳时间序列,因为总希望可以通过差分等方式把非平稳序列变成平稳的,而平稳时间序列可以通过数学公式予以解释

    一、方差不平稳

    最简单的是做对数变换,使得前后方差没有那么变化。

    #Log transform: variance stationary
    data(AirPassengers)
    AirPassengers
    par(mfrow=c(1,2))
    plot(AirPassengers)
    plot(log(AirPassengers))
    

    在这里插入图片描述

    二、具有趋势性

    1、确定性趋势的删除——趋势拟合法

    最简单的处理方法就是考虑均值函数可以由一个时间的确定性函数来描述,比如可以用回归模型来描述。对于一个有线性趋势的序列,可以做一个线性模型。

    • Linear trend
    ##read the gasline data
    ##Abraham and Ledolter (1983) on the
    ##monthly gasoline demand in Ontario over the period 1960 - 1975.
    gas = scan("gas.dat")
    ## note that read.table() would give an error here since the data is not in rectangular format.
    gas.ts = ts(gas, frequency = 12, start = 1960)
    gas.ts
    plot(gas.ts, main = "Gasoline demand in Ontario", ylab = "Million gallons")
    #fit trend:OLS with constant and trend
    time = 1:length(gas.ts)
    fit = lm(gas.ts~time)
    summary(fit)#R-squared:  0.8225
    par(mfrow=c(2,1))
    plot(time, gas.ts, type='l', xlab='months', ylab='Million gallons gasoline',
    main="OLS fit")
    legend(.1, 256000, c("Time plot", "OLS fit"), col = c(1,2), text.col = "black",
    merge = TRUE, lty=c(1,1))
    abline(fit,col=2,lwd=2)
    plot(time, fit$resid, type='l', xlab="months", ylab="Residuals",main="Residuals OLS [yt-fit(yt)]")
    abline(a=0, b=0)#残差在0附近点波动
    #savePlot("plot of Residuals_gas",type="pdf")
    

    在这里插入图片描述

    • Quadratic trend
    fit2 = lm(gas.ts~time+I(time^2))
    summary(fit2)#R-squared:  0.8327
    names(fit2)
    par(mfrow=c(2,1))
    plot(time, gas.ts, type='l', xlab='months', ylab='Million gallons gasoline',
         main="OLS fit")
    legend(.1, 256000, c("Time plot", "OLS fit"), col = c(1,2), text.col = "black",
           merge = TRUE, lty=c(1,1))
    lines(time,fitted(fit2),col=2)   
    plot(time, fit2$resid, type='l', xlab="months", ylab="Residuals",main="Residuals OLS [yt-fit(yt)]")
    abline(a=0, b=0)
    

    在这里插入图片描述

    • Polynomial trend

    2、随机趋势的删除——差分法

    随机趋势的删除——差分法。

    • 一阶差分可以使线性趋势的序列实现趋势平稳
    Zt = as.ts(rnorm(1000, sd = 20))
    RW1 = as.ts(cumsum(Zt))
    par(mfrow = c(2,2))
    plot(RW1, main = "Random walk")
    acf(RW1, main = "Correlogram random walk")
    Yt=as.ts(diff(RW1))
    plot(Yt,main='Diff(RW1)')
    acf(Yt)
    

    在这里插入图片描述

    • 序列蕴含着曲线趋势,通常低阶(二阶或三阶)差分可提取出曲线趋势的影响 ,这里效果不好的话,可以先取对数,再做差分
    • 对于蕴含着固定周期的序列进行步长为周期长度的差分运算,通常可以较好地提取周期信息
    • 差分的阶数要适度,避免过差分

    3、未知趋势的删除——平滑法

    平滑法——顾名思义,使序列变平滑。 期望结果,是显示出趋势变化的规律。

    1. 移动平均法

    假定在短的时间间隔内,序列的取值是比较稳定的,序列的大小差异主要是由随机波动造成的。用一段时间间隔内的平均值作为某一期的估计值。

    • 简单移动平均
    ##Moving average Model
    Vt5 = filter(Zt, rep(1/5, 5), sides = 2)
    Vt21 = filter(Zt, rep(1/21, 21), sides = 2)
    par(mfrow = c(2,2))
    plot(Vt5, main = "Moving 5-point average of above white noise series")
    acf(Vt5, main = "Correlogram 5-point moving average", lag.max = 40, na.action = na.pass)
    plot(Vt21, main = "Moving 21-point average of above white noise series")
    acf(Vt21, main = "Correlogram 21-point moving average", lag.max = 40, na.action = na.pass)
    par(mfrow = c(1,1))
    

    在这里插入图片描述

    • 权重移动平均

    2. 指数平滑法

    4、季节性

    Seasonality means an effect that happens at the same time and with the same magnitude and direction every year. 从而使得经过季节调整的序列能够较好的反应社会经济指标运行基本态势。

    1.Method1: 减掉趋势成分后取平均

    ## Investigating seasonality
    library(fields)
    z = matrix(fit$resid, ncol=12, byrow=TRUE)
    colnames(z) = c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
    bplot(z, xlab="Month", ylab="Detrended demand of gasoline", main="Annual seasonality of the detrended demand of gasoline")    
    mean=matrix(0, nrow=ncol(z), ncol=1) #mean for each month
    for(i in 1:ncol(z)){
      mean[i,1]=mean(z[,i])
    }
    Seas = as.matrix(rep(mean,16)) # matrix with seasonal term
    des.gas = fit$resid - Seas   # detrended and now deseasonized series
    par(mfrow=c(2,1))
    plot(fit$resid, type='l', xlab="months", ylab="Residuals", main="Residuals OLS [yt-fit(yt)]")
    abline(a=0, b=0)
    plot(des.gas, type='l', xlab="months", ylab="Deseasonized residuals", main="Deseasonized ResidualsOLS")
    abline(a=0, b=0)
    

    在这里插入图片描述

    2.Method2:使用哑元变量做回归分析

    ##seasonal modeling and estimating seasonal trends
    ##such as for the average monthly temperature data 
    library(TSA)  #install package TSA
    win.graph(width=4.875, height=2.5,pointsize=8)
    data(tempdub); 
    plot(tempdub,ylab='Temperature',type='o')
    month.=season(tempdub) # period added to improve table display
    model2=lm(tempdub~month.) # -1 removes the intercept term
    summary(model2)
    
    Call:
    lm(formula = tempdub ~ month.)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -8.2750 -2.2479  0.1125  1.8896  9.8250 
    
    Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
    (Intercept)       16.608      0.987  16.828  < 2e-16 ***
    month.February     4.042      1.396   2.896  0.00443 ** 
    month.March       15.867      1.396  11.368  < 2e-16 ***
    month.April       29.917      1.396  21.434  < 2e-16 ***
    month.May         41.483      1.396  29.721  < 2e-16 ***
    month.June        50.892      1.396  36.461  < 2e-16 ***
    month.July        55.108      1.396  39.482  < 2e-16 ***
    month.August      52.725      1.396  37.775  < 2e-16 ***
    month.September   44.417      1.396  31.822  < 2e-16 ***
    month.October     34.367      1.396  24.622  < 2e-16 ***
    month.November    20.042      1.396  14.359  < 2e-16 ***
    month.December     7.033      1.396   5.039 1.51e-06 ***
    ---
    Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 3.419 on 132 degrees of freedom
    Multiple R-squared:  0.9712,	Adjusted R-squared:  0.9688 
    F-statistic: 405.1 on 11 and 132 DF,  p-value: < 2.2e-16
    
    展开全文
  • 非平稳时间序列分析

    千次阅读 2019-12-14 17:12:01
    §1.数据平稳性 协方差平稳时间序列的期望和方差是有限...非平稳是指动态变化无规律可循,累积冲击的效果。 随机趋势:单位根过程 yt=yt−1+εtεt∼iid(0,σ2)yt−1=yt−2+εt−1⇒yt=∑i=0tεiy_t=y_{t-1}+\va...
  • 由于排版和图片原因,请尽量转制原文观看,在此只是作为个人的一个记录。 作者:AISHWARYA SINGH 翻译:陈之炎 校对:丁楠雅 ...本文约3600字,建议阅读10分钟...本文将重点介绍时间序列数据的平稳性检验方法。  ...
  • 时间序列预测季节性ARIMA及季节性SARIMA

    万次阅读 多人点赞 2019-03-24 21:55:00
    我们将首先介绍和讨论自相关,平稳性和季节性的概念,并继续应用最常用的时间序列预测方法之一,称为ARIMA。 介绍 时间序列提供了预测未来价值的机会。基于以前的价值观,可以使用时间序列来预测经济,天气和...
  • 平稳非平稳的理解

    千次阅读 2019-11-23 10:12:15
    平稳非平稳最直观的理解就是。平稳信号包含的信息量小,其统计特性随时间不变化,典型代表高斯白噪声和人类口腔中的浊音。这种信号的特点就是我说的统计特性不变,什么意思呢,就是当你对他进行了一定时间的观测后...
  • 2.3-非平稳时间序列分析

    千次阅读 2018-07-12 01:18:23
    时间序列分析 第三节 非平稳时间序列分析 等待补充
  • 时间序列(或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。时间序列分析的主要目的是根据已有的历史数据对未来进行预测。经济数据中大多数以时间序列的形式给出。
  • 非平稳时间序列综合分析

    千次阅读 2017-06-25 20:14:50
    之前我们介绍了单纯的趋势分析方法与单纯和单纯的季节效应分析方法,在这一节我们介绍既有趋势起伏又有季节效应的复杂序列的分析方法
  • 时间序列预测方法最全总结!

    千次阅读 多人点赞 2021-03-12 00:15:38
    时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。需要明确一点的是,与回归分析预测模型...
  • 非平稳时间序列及建模

    千次阅读 2017-11-13 10:50:00
    实际上我们经常会遇到一些非平稳时间序列,往往会呈现明显的趋势性或周期性,可以通过适当差分等手段,将它化为平稳时间序列,再采用ARMA模型建模   差分运算 差分运算公式   一阶差分    ...
  • 时间序列预测方法 时间序列预测 (Time Series Forecasting) 背景 (Background) We learned various data preparation techniques and also set up a robust evaluation framework in my previous articles. Now, we...
  • 手把手教你用Python处理非平稳时间序列(附代码)

    千次阅读 多人点赞 2018-11-16 16:33:57
    作者:AISHWARYA SINGH翻译:陈之炎校对:丁楠雅本文约3600字,建议阅读10分钟。本文将重点介绍时间序列数据的平稳性检验方法。简介预测一个家庭未来三个月的用...
  • 时间序列不同于更传统的分类和回归预测建模问题。 时间结构为观察增加了一个顺序。这种强加的顺序意味着需要专门处理关于这些观察的一致性的重要假设。 例如,在建模时,假设观测的汇总统计数据是一致的...
  • 平稳序列的预测

    2017-08-17 00:25:00
    简单平均法适合对较为平稳时间序列进行预测,即当时间序列没有趋势时,用该方法比较好,但如果时间序列有趋势或者季节成分,该方法预测则不够准确,此外简单平法将远期的数值与近期的数值看做对未来同等重要,但...
  • 简介 ...随着我们周围世界产生的数据越来越多,时间序列预测已成为数据科学家必须掌握的一项越来越关键的技能。 然而,时间序列是一个复杂的话题,它具有多面性。 首先,要想使预测模型正常...
  • 非平稳时间序列季节效应分析

    千次阅读 2017-06-25 19:48:50
    把“季节”广义化,凡是呈现出固定的周期性变化的事件,都称为具有“季节”效应。现在“季节”效应已经变成周期效应的代名词。而“季”也变成了周期内每一期的代名词。
  • ARIMA模型意为求和自回归滑动平均模型(IntergratedAut少regressive MovingAverageModel),简记为ARIMA(p,d,q),p,q分别为自回归和滑动平均部分的阶次,d为差分运算阶次,对于某些非平稳时间序列{ y(t) },其一般形式为 ...
  • 作者:AISHWARYA SINGH;翻译:陈之炎;校对:丁楠雅本文约3600字,建议阅读10分钟。本文将重点介绍时间序列数据的平稳性检验方法。简介预测一个家庭未来三个月...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,274
精华内容 4,909
关键字:

平稳时间预测方法非平稳