加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R语言在时间序列分析中的应用(一)

(2013-04-18 23:56:59)
标签:

r

arma

教育

R语言在时间序列分析中的应用(一)

 

     written by MiltonDeng,

     from department of Statistics, XMU

 (复制之后排版太乱,并且没有图片,提供一个下载版

http://wenku.baidu.com/view/6efb18c8d5bbfd0a7956734c.html?st=1

 

一、数据的读入与时间序列化

 

         时间序列数据是R语言中一种特定形式的数据类型。R语言中有许多专门针对时间序列数据编制的函数。但在运用这些函数前,首先需要对序列进行时间序列化,即运用将一组数据转化为时间序列数据这种数据形式。

 

         ts(data = NA, start = 1, end = numeric(), frequency = 1 )

-          data                要进行时间序列化的向量。如果是矩阵,会按列分别处理。

-          start                起始时点。

-          end                  结束时点。

-          frequency      频度。取12时自动识别为月,4时自动识别为季度。

 

         首先,应该注意,与多元统计等统计分析不同,单变量时间序列根本上是一个向量,而不是一个矩阵,或者一个表。因此,在读入时间序列数据时,常常会有一些不必要的麻烦。由于数据整理时,数据编排往往不一致,所以应该注意以何种方式读入时间序列数据。

         txt文件为例,假设这组时间序列为“5,4,2,3,6,1”,在文件中以如下方式出现(人大出版社,王燕老师的《应用时间序列分析》中的数据均以这种形式出现):

                                      2

                                      1

         如果以     read.table()      读入,读入的是一个2*3的矩阵,如果直接以 ts() 时间序列化,R会认为这是3列数据,将对它们分别生成3组时间序列数据。下面提供两种方法:

         1)以scan()直接读入为向量。

         2)以read.table()读入这个矩阵为D,然后

                            D=t(D)                         #因为是以行录入,所以要先转置

                            D=as.vector(D)                  #将矩阵线性化为向量D

 

二、描述时间序列

        

         对于单组时间序列:

         1ts.plot(D)        #可以直接对未ts的向量绘图

         2ts(D); plot(D)

         如果D是一个矩阵或frame,可以对多个序列画在同一张图里。

 

三、自相关与偏自相关

 

         自相关系数可以通过acf() 实现:

         acf( x, lag.max=NULL, type=c("correlation", "covariance", "partial"), plot=TRUE )

-                           :时间序列数据列。

-          lag.max     :所计算的最大滞后阶数。

-          type            :分别为“自相关系数”、“自协方差”、“偏自相关系数”

-          plot             :是否要绘出acf的图形。

偏自相关可以通过 pacf() 实现,原理相似。也可以acf() type=”partial”

         不过注意 acf 是从0开始的,pacf 是从1阶开始的。

四、平稳性检验

 

         1)时序图检验

         平稳时间序列均值、方差为常数,因此可以直接用 plot() 检查时序图,平稳时间序列应始终在一个常数值附近随机波动,而且波动范围有界。

         2)自相关图检验

         平稳序列通常有短期相关性。因此自相关系数会很快地衰减向零。

         3)单位根检验

         后面再讲。

 

         下面我们观察几种特定时间序列的时序图与自相关图。

         1)确定趋势时间序列:

 

         首先我们尝试生成一个带有随机扰动的线性趋势序列:

X=seq(0.1,5,0.02)

Y=2+0.8*X

D=jitter(Y,amount=0.2)

D=ts(D)

plot(D)

         这个序列是D=2+0.8*t掺入随机扰动后形成的。

        

         对一个单增序列来说,acf是非常缓慢下降的序列,而pacf=0

 

2)周期性时间序列:

X=seq(0.1,15,0.1)

Y=sin(X)

D=jitter(Y,amount=0.2)

 

 

         acf有伪周期的特点。

3)伪周期时间序列:

X=seq(0.1,20,0.1)

Y=100*sin(X)/X

D=jitter(Y,amount=3)

        

 

 

五、纯随机检验

 

         也称白噪声序列。当时间序列满足(1)随时间变化,均值为常数(2)不同时点互不相关时,序列为纯随机的。它有两个性质(1)纯随机性:任意两时点协方差为0;(2)方差齐性:任意时点方差为定值。因此,从图形上,纯随机序列的 acf 应该均为0,而且时序图中波动范围是恒定的。

         假设检验的检验定理为Barlett 定理,统计量有 Q 统计量和 LB 统计量,两者均渐进服从卡方分布。原假设“该序列为白噪声序列”,即拒绝时认为序列为非白噪声序列,接受原假设时为不能显著拒绝纯随机假定。

        

         Box.test( x, lag=1, type = c(“Box-Pierce”, “Ljung-Box”), fitdf=0 )

-                  :待检验序列。

-          lag     :滞后阶数。

-          type  “Box-Pierce”Q统计量,“Ljung-Box”LB统计量。

-          fitdf   :自由度调整。

 

让我们模拟并观察纯随机序列的特性。可以简单生成一组服从正态分布的序列,作为纯随机序列。然后绘制时序图、acfpacf图。

 

D=rnorm(300,0)

D=ts(D)

par(mfrow=c(3,1))

plot(D)

acf(D)

pacf(D)

 

         可以看到,纯随机序列如前所述的几个特点:

         1)围绕一个固定水平波动。即均值恒定的特点。

         2)波动范围基本一致。即方差恒定的特点。

         3acf/pacf均基本为0

 

下面进行纯随机性检验。Box.test() 只能针对一个特定阶数进行检验,我们可以通过下面的一段小程序对各阶均进行检验,并整合到一个表格里。

 

Result=0;LAG=0;LB=0;p=0

 

for(i in 1:12){

Btest=Box.test(D,type="Ljung-Box",lag=i)

LAG[i]=i

LB[i]=Btest$statistic

p[i]=Btest$p.value

Result=cbind(LAG,LB,p)

}

 

Result

 

 

      LAG      LB          p

 [1,]   1        0.1813234       0.6702384

 [2,]   2        0.5826921       0.7472571

 [3,]   3        0.5863632       0.8995470

 [4,]   4        0.8876635       0.9263240

 [5,]   5        3.2322386       0.6642308

 [6,]   6        4.9142115       0.5548624

 [7,]   7        6.2369390       0.5123718

 [8,]   8        6.2749378       0.6164647

 [9,]   9        6.4707625       0.6920331

[10,]  10        8.2027704       0.6090380

[11,]  11        8.4882660       0.6690124

[12,]  12        8.8843582       0.7127748

 

         可见,各阶的Bj检验均不能拒绝原假设,因此可以认为该序列是纯随机的。

 


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有