精华内容
下载资源
问答
  • 上篇文章简单提到了应该用平稳时间序列做预测,本文将介绍具体概念和原因。 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。

    展开全文
  • 平稳时间序列分析

    2020-06-09 12:55:31
    平稳时间序列分析 方法性工具 差分运算 一阶差分 p阶差分 k步差分 延迟算子 线性差分方程 ARMA模型 AR模型 AR模型平稳性判别 特征根判别 平稳域判别 平稳AR模型统计性质 MA模型 MA模型统计性质 ...

    平稳时间序列分析

    方法性工具

    差分运算

    • 一阶差分
    • p阶差分
    • k步差分

    延迟算子

    线性差分方程

    ARMA模型

    AR模型

    • AR模型平稳性判别

      • 特征根判别
      • 平稳域判别
    • 平稳AR模型的统计性质

    MA模型

    • MA模型的统计性质

      • 均值
      • 方差
      • 自协方差q阶截尾
      • 自相关系数q阶截尾
    • MA模型的可逆性

    • 偏自行管系数截尾

    ARMA模型

    • 平稳条件 & 可逆条件
    • 传递形式 & 逆转形式
    • ARMA(p,q)模型的统计性质

    平稳序列建模

    建模步骤

    • 求序列的样本自相关系数ACF和样本偏自相关系数PACF值
    • 根据两个系数的性质,选择阶数适当的ARMA(p,q)模型进行拟合
    • 估计模型中未知参数的值
    • 检验模型有效性。如果拟合不符,返回步骤2重新选择模型拟合
    • 模型优化。通过检验,返回步骤2,充分考虑各种可能,建立多个拟合模型,选择最优模型
    • 利用拟合模型,预测序列将来走势

    样本自相关系数 & 偏自相关系数

    模型识别

    参数估计

    • 矩估计
    • 极大似然估计
    • 最小二乘估计

    模型检验

    • 模型显著性检验
    • 参数显著性检验

    模型优化

    • 问题提出
    • AIC准则
    • SBC(BIC)准则

    序列预测

    线性预测函数

    预测方差最小原则

    线性最小方差与预测的性质

    • 条件无偏最小方差估计值
    • AR§序列预测
    • MA(q)序列预测
    • ARMA(p,q)序列预测

    导图

    #AR模型平稳性判别
    #1、arima.sim函数拟合
    #arima.sim(n,list(ar=,ma=,order=),sd=)
    #n:拟合序列长度
    #list:指定具体的模型参数
    #(1)拟合平稳AR(p)模型,要给出自回归系数,如果指定拟合的AR模型为非平稳模型,系统会报错
    #(2)拟合MA(q)模型,要给出移动平均系数
    #(3)拟合平稳ARMA(p,q)模型需要同时给出自回归系数和移动平均系数,如果指定拟合的ARMA模型为非平稳模型,系统会报错
    #(4)拟合ARIMA(p,d,q)模型(第5章介绍),除了需要给出自回归系数和移动平均系数,还需要增加order选项。order=c(p,d,q)
    # 其中,p为自回归阶数;d为差分阶数;q为移动平均阶数
    #sd:指定序列的标准差,不特殊指定,系统默认 sd=1
    
    #2、filter函数拟合
    #filter(e,filter=,method=,circular=)
    #e:随机波动序列的变量名
    #filter:指定模型系数
    #(1)AR(p)模型为filter=c(∅1,∅2,…,∅p)
    #(2)MA(q)模型为filter=c(1,-θ1,-θ2,…,-θq)
    #method:指定拟合的是AR模型还是MA模型
    #(1)method=“recursive”为AR模型
    #(2)method=“convolution”为MA模型
    #circular:拟合MA模型时专用的一个选项,circular=T可以避免NA数据出现
    
    #3.1
    x1=arima.sim(n=100,list(ar=0.8))
    x3=arima.sim(n=100,list(ar=c(1,-0.5)))
    e=rnorm(100)
    x2=filter(e,filter=-1.1,method = "recursive")
    x4=filter(e,filter = c(1,0.5),method="recursive")
    
    layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))
    
    #layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
    # layout() 输入一个矩阵,2行2列,
    #第1个图占两个1,第2个图占2,第3个图占3
    
    ts.plot(x1) #平稳
    ts.plot(x2) #非平稳
    ts.plot(x3) #平稳
    ts.plot(x4) #非平稳
    
    #3.5
    x1=arima.sim(n=1000,list(ar=0.8))
    x2=arima.sim(n=1000,list(ar=-0.8))
    x3=arima.sim(n=1000,list(ar=c(1,-0.5)))
    x4=arima.sim(n=1000,list(ar=c(-1,-0.5)))
    
    #AR模型样本自相关图
    layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))
    acf(x1)
    acf(x2)
    acf(x3)
    acf(x4)
    
    #AR模型样本偏自相关图
    layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))
    pacf(x1)
    pacf(x2)
    pacf(x3)
    pacf(x4)
    
    #3.6
    x1=arima.sim(n=1000,list(ma=-2))
    x2=arima.sim(n=1000,list(ma=-0.5))
    x3=arima.sim(n=1000,list(ma=c(-4/5,16/25)))
    x4=arima.sim(n=1000,list(ma=c(-5/4,25/16)))
    
    layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))
    acf(x1)
    acf(x2)
    acf(x3)
    acf(x4)
    
    layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))
    pacf(x1)
    pacf(x2)
    pacf(x3)
    pacf(x4)
    
    #3.8
    x=arima.sim(n=1000,list(ar=0.5,ma=-0.8))
    acf(x)
    pacf(x)
    
    #3.9
    #读入数据,并绘制时序图
    layout(matrix(c(1), 1, byrow = TRUE))
    
    a=read.table("E:/data/file8.csv",sep=",",header=T)
    x=ts(a$kilometer,start=1950)
    plot(x)
    
    #白噪声检验
    for(i in 1:2) print(Box.test(x,type="Ljung-Box",lag=6*i))
    
    #绘制自相关图和偏自相关图
    acf(x)
    pacf(x)
    
    #3.10(有误)
    #读入数据,并绘制时序图
    overshort<-read.table("E:/data/file9.csv",sep=",",header=T)
    overshort<-ts(overshort)
    plot(overshort)
    
    #白噪声检验
    for(i in 1:2) print(Box.test(overshort,type="Ljung-Box",lag=6*i))
    
    #绘制自相关图和偏自相关图
    acf(overshort)  #一阶截尾
    pacf(overshort)  #拖尾
    
    #3.11
    #读入数据,并绘制时序图
    b=read.table("E:/data/file10.csv",sep=",",header=T)
    dif_x=ts(diff(b$change_temp),start=1880)
    plot(dif_x)
    
    #白噪声检验
    for(i in 1:2) print(Box.test(dif_x,type="Ljung-Box",lag=6*1))
    
    #绘制自相关图和偏自相关图
    acf(dif_x)
    pacf(dif_x)
    
    #auto.arima函数:先安装packages:zoo & forecast,然后用library调用程序包
    #auto.arima(x,max.p=5,max.q=,ic=)
    #x:需要定阶的序列名
    #max.p:自相关系数最高阶数,不特殊指定的话,系统默认值为5
    #max.q:移动平均系数最高阶数,不特殊指定的话,系统默认值为5
    #ic:指定信息量准则,ic有"aicc","aic"和"bic"三个选项,系统默认AIC准则
    
    library(zoo)
    library(forecast)
    
    #3.9 系统自动定阶
    auto.arima(x)
    
    #3.10 系统自动定阶
    auto.arima(dif_x)
    
    #3.11 系统自动定阶
    auto.arima(dif_x)
    
    #arima(x,order=,include.mean=,method=)
    #x:要进行模型拟合的序列名
    #order:指定模型阶数。order=c(p,d,q)
    #(1)p为自回归阶数
    #(2)d为差分阶数,本章不涉及缠粉问题,所以d=0
    #(3)q为移动平均阶数
    #include.mean:要不要包含常数项
    #(1)include.mean=T,需要拟合常数项,这也是系统默认设置
    #(2)如果不需要拟合常数项,需要特别指定include.mean=F
    #method:指定参数估计方法
    #(1)method="CSS-ML",默认的是条件最小二乘与极大似然估计混合方法
    #(2)method="ML",极大似然估计
    #(3)mrthod="CSS",条件最小二乘估计
    
    #3.9续
    a=read.table(file="E:/data/file8.csv",sep=",",header=T)
    x=ts(a$kilometer,start=1950)
    x.fit=arima(x,order=c(2,0,0),method="ML")
    x.fit
    
    #3.10续(有误)
    overshort=read.table("E:/data/file9.csv",sep=",",header = T)
    overshort=ts(overshort)
    overshort.fit=arima(overshort,order=c(0,0,1))
    overshort.fit
    
    #3.11续
    b=read.table("E:/data/file10.csv",sep=",",header = T)
    dif_x=ts(diff(b$change_temp),start = 1880)
    dif_x.fit=arima(dif_x,order=c(1,0,1))
    dif_x.fit
    
    #3.9续
    a=read.table(file="E:/data/file8.csv",sep=",",header = T)
    x=ts(a$kilometer,start = 1950)
    x.fit=arima(x,order=c(2,0,0),method = "ML")
    for(i in 1:2) print(Box.test(x.fit$residuals,lag=6*i))
    
    #3.10续(有误)
    overshort=read.table("E:/data/file9.csv",sep=",",header = T)
    overshort=ts(overshort)
    overshort.fit=arima(overshort,order=c(0,0,1))
    for(i in 1:2) print(Box.test(overshort.fit$residual,lag=6*i))
    
    #3.11续
    b=read.table("E:/data/file10.csv",sep=",",header = T)
    dif_x=ts(diff(b$change_temp),start = 1880)
    dif_x.fit=arima(dif_x,order=c(1,0,1),method="CSS")
    for(i in 1:2) print(Box.test(dif_x.fit$residual,lag=6*i))
    
    #pt(t,df=,lower.tail=)
    #t:t统计量的值
    #df:自由度
    #lower.tail:确定计算概率的方向
    #(1)lower.tail=T,计算Pr(X≤x)。对于参数显著性检验,如果参数估计值为负,选择lower.tail=T
    #(2)lower.tail=F,计算Pr(X>x)。对于参数显著性检验,如果参数估计值为正,选择lower.tail=F
    
    #3.9续
    a=read.table(file="E:/data/file8.csv",sep=",",header = T)
    x=ts(a$kilometer,start = 1950)
    x.fit=arima(x,order=c(2,0,0),method="ML")
    x.fit
    
    #3.15(有误)
    #读入数据,绘制时序图
    x=read.table(file="E:/data/file11.csv",sep=",",header = T)
    x=ts(x)
    plot(x)
    
    #序列白噪声检验
    for(i in 1:2) print(Box.test(x,lag=6*i))
    
    #绘制自相关图和偏自相关图
    acf(x)
    pacf(x)
    
    #拟合MA(2)模型
    x.fit1=arima(x,order=c(0,0,2))
    x.fit1
    
    #MA(2)模型显著性检验
    for(i in 1:2) print(Box.test(x,fit1$residual,lag=6*1))
    
    #拟合AR(1)模型
    x.fit2=arima(x,order=c(1,0,0))
    x.fit2
    
    #AR(1)模型显著性检验
    for(i in 1:2) print(Box.test(x.fit2$residual,lag=6*i))
    
    
    #forecast(objuct,h=,level=)
    #object:拟合信息文件名
    #h:预测期数
    #level:置信区间的置信水平。不特殊指定的话,系统会自动给出置信水平分别为80%和95%的双层置信区间
    
    #3.9续
    a=read.table(file="E:/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
    
    #系统默认输出预测图
    plot(x.fore)
    
    #个性化输出预测图
    L1=x.fore$fitted-1.96*sqrt(x.fit$sigma2)
    U1=x.fore$fitted+1.96*sqrt(x.fit$sigma2)
    L2=ts(x.fore$lower[,2],start = 2009)
    U2=ts(x.fore$upper[,2],start = 2009)
    c1=min(x,L1,L2)
    c2=max(x,L2,U2)
    plot(x,type="p",pch=8,xlim=c(1950,2013),ylim=c(c1,c2))
    lines(x.fore$fitted,col=2,lwd=2)
    lines(x.fore$mean,col=2,lwd=2)
    lines(L1,col=4,lty=2)
    lines(U1,col=4,lty=2)
    lines(L1,col=4,lty=2)
    lines(L2,col=4,lty=2)
    lines(U2,col=4,lty=2)
    
    
    
    展开全文
  • 文章目录一、方差平稳二、具有趋势性1、回归分析法2、...一阶差分可以使线性趋势的序列实现趋势平稳 序列蕴含着曲线趋势,通常低阶(二阶或三阶)差分可提取出曲线趋势影响 ,这里效果不好话,可以先取对数,再


    前言

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

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

    一、方差不平稳

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

    #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
    
    展开全文
  • 平稳时间序列预测

    千次阅读 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参数.

    展开全文
  • 平稳时间序列分析

    千次阅读 2019-12-14 17:12:01
    协方差平稳时间序列的期望和方差是有限常数,协方差只跟时间间隔有关而不随时间变化。 含义:主要分布参数(一阶和二阶矩)在时间维度上具有稳定性。 平稳是指动态变化有规律可循,受到冲击衰减。 非平稳是指动态...
  • 作者:五雷 ...首先要理解什么是平稳的时间序列,一般时间序列书中给出的平稳的定义以弱平稳为主也就是一个随机变量无条件期望不变、方差恒定且协方差不随时间改变,也就是,注意关键在于方差
  • 时间序列的平稳性、随机性检验 在拿到时间序列数据后,首先要对数据的随机性和平稳性进行检测, 这两个检测是时间序列预测的重要部分。根据不同检测结果需要采取不同的分析方法。 为什么时间序列要求平稳性呢?平稳...
  • 将时间序列分为 S个子序列片断,用周期图方法估计时间序列的谱密度,在此基础上用3σ原理和两因素 方差分析比较各子序列的异同,用以分别检验时间序列的均值函数和协方差函数的平稳性。较其它方法避免了复 杂的计算,...
  • Python量化基础:时间序列的平稳性检验

    万次阅读 多人点赞 2019-01-31 16:06:43
    时间序列数据的平稳性...而当一个时间序列的特征维持稳定,比如它的均值和方差是稳定的,那么我们认为在之后的一段时间里,它的数据分布跟历史的数据分布大概率是保持一致的,这时,我们就可以基于历史数据对未来的...
  • 时间序列-平稳

    千次阅读 2019-02-19 17:07:31
    1.时间序列的平稳性  1.1 任何一个时间序列都可以被看做是由随机过程产生的结果。和普通两变量和多变量不一样,任何一个时间点上的值都是随机过程产生的,也是都是随机的。  1.2 如果一个随机过程所产生的时间...
  • 目录1 概述2 平稳和非平稳时间序列3 让序列数据平稳4 差分转换4.1 线性增长趋势4.2 季节性趋势5 总结 1 概述 时间序列数据集可能包含趋势和季节性,在建模之前可能需要将其删除。 趋势可能导致随时间变化平均值...
  • 平稳性是时间序列中最重要概念之一。 一个平稳的序列意味着它均值、方差和协方差不随时间变化。 图一:均值是变化(增长),整体是向上增长趋势。在- 个平稳的序列里,它不应该有任何变化趋势。 图二:...
  • 主要内容: 1. 自相关性和自相关系数 ...而当一个时间序列的特征维持稳定,比如它的均值和方差是稳定的,那么我们认为在之后的一段时间里,它的数据分布跟历史的数据分布大概率是保持一致的,这时.
  • 自相关函数/自相关曲线ACF AR(1)模型的ACF: 模型为: 当其满足平稳的必要条件|a1|&... y(t)和y(t-s)的方差是有限常数,y(t)和y(t-s)的协方差伽马s 除以伽马0,可求得ACF如下: 由于{rhoi}其在平稳条...
  • 时间序列 简而言之,时间序列就是带时间戳的数值序列。...所谓时间序列的平稳性,是指时间序列的均值,方差以及协方差都是常数,与时间t无关。这样的序列才可以作为我们基于历史预测未来的基础。 满足以上条件属...
  •  1.2 如果一个随机过程所产生的时间序列期望和方差在任何时间过程上都是常数,并且任何两个时期之间协方差不依赖于这两个时期距离或之后,而不依赖于计算这两个协方差实际时间,就称改时间序列平稳的。...
  • 时间序列的预处理

    2020-06-09 08:47:50
    平稳时间序列的定义 严平稳 宽平稳 通过特征统计量定义 平稳时间序列的统计性质 常数均值 每一个统计量都拥有大量的样本观察值 减少了随机变量的个数,增加了待估变量的样本变量 简化了统计分析的难度,...
  • 平稳性定义所谓时间序列的平稳性,是指时间序列的均值,方差以及协方差都是常数,与时间t无关。这样的序列才可以作为我们基于历史预测未来的基础。满足以上条件属于严平稳,一般达到弱平稳都是可以接受的。平稳性是...
  • 平稳性定义所谓时间序列的平稳性,是指时间序列的均值,方差以及协方差都是常数,与时间t无关。这样的序列才可以作为我们基于历史预测未来的基础。满足以上条件属于严平稳,一般达到弱平稳都是可以接受的。平稳性是...
  • 本文为本科课程笔记 原创思路是老师~~ 不知道会不会侵犯啥权益,所以声明一下~~ 用作记录~~ 2.1 平稳性检验 一 、概率分布与特征统计量 ...特征统计量: 期望E(Xt)E(X_t)E(Xt​),方差D(Xt)D(X_t)D(Xt​...
  • 时间序列

    2021-03-16 20:02:07
    经典的统计分析都嘉定数据序列具有独立性,而时间序列分析则侧重研究数据序列的相互依赖关系。 二、时间序列分类 1.白噪声序列 纯随机序列,没有预测价值。 2.平稳非白噪声序列 均值/方差都是常数:AR MA ARMA 3.非...
  • 时间序列 平稳性检测 平稳定义:围绕一个常数上下波动且波动范围有限,即有常数均值和常数方差。如果有明显趋势或者周期性,那它通常不是平稳序列。检测方法有三种: (1)时序图检测 (2)自相关...
  • 2.1 时间序列的建立 定义:我们把获取时间序列以及对其进行检查,整理和预处理等工作,称之时间序列的建立。...2.2 非平稳时间序列的平稳化处理 2.2.1 方差非平稳序列的平稳化处理:BOX-COX变换 如果
  • 时间序列预测基本原理

    千次阅读 2019-08-26 21:40:06
    均值:使用常数均值才能用来较好进行预测(常数均值即在平稳时间序列均值,这样才能保证使用均值预测结果不会偏离真实结果太大) 方差:每个样本值与全体样本值平均数之差平方值平均数 自相关...
  • 对比分析了检测时间序列是否平稳的两种方法:一种是基于简单的统计方法检测时间序列非平稳性的run-test(简称RT)方法(考虑了3种典型...同时,分析了3种不同的RT方法对不同类型时间序列的平稳性检测能力,表明方差RT方
  • 对观测值序列的纯随机性和平稳性的检测称为"序列的预处理",根据检测结果可将序列分为不同类型.记γ(s,t)=Cov(Xs,Xt) 2.特征统计量: 一.平稳性检测 (1)平稳序列: "平稳序列"(Stationary Series)是指在某1常数附近...
  • 若一时间序列的概率分布与t无关,则为严格(狭义)平稳时间序列平稳随机过程,实践当中是非常困难甚至是不可能的 宽平稳时间序列(二阶宽平稳定义) 如果序列的一、二阶矩存在,且对任意时刻t满足: (1)均值为...
  • 时间序列预测

    2018-03-29 15:15:09
    最近学习了时间序列的预测:我先总结一些时间序列预测的构建步骤:1)假定序列X={x1,x2,x3,........xn},判断序列是否平稳,主要有一下判断的方法, 1,方差判断: 判断该序列的方差是否平稳,方差应该不随时间t变化...
  • [ML]有效的时间序列

    2019-10-05 01:51:33
    1.序列的平稳性 弱平稳性时间方差恒定 强平稳性,严格平稳性 ...python的StatsModels库tsa.stattools.kpss(x)函数来检验时间序列的平稳性。 转载于:https://www.cnblogs.com/xmxkkk/p/7340478.html...
  • 一、平稳时间序列的意义 时间序列数据结构的特殊性 可列多个随机变量,而每个变量只有一个样本观察值 平稳性的重大意义 极大地减少了随机变量的个数,并增加了待估变量的样本容量 极大地简化了时序分析的难度,...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 157
精华内容 62
关键字:

平稳时间序列的方差