您的位置:首页 > 其它

R语言建立时间序列的两个函数

2016-07-22 09:47 183 查看

金融数据必须是时间序列,才可进行经济统计分析。建立时间序列,必须有日期作为数据框的一列。R语言建立时间序列的两个函数是ts()和as.xts()。

1.ts()

        library(stats)          #stats软件包是R语言环境启动的7个软件包        ts(gm,frequency=12,start=c(1975,1))        这个命令表示:        (1)  frequency=12表明时间单位为年,而且在每一个时间单位中有12个均匀间隔的观察值。                  因此gm是月数据,在金融数据中,常用的有月收益率数据。        (2)  start=c(1975,1)表示开始时间为1975年1月。        (3)  gm应是列数据,而不能是多列金融数据。而且gm在数据框中选择出来时,应有日期在同一个数据框中。       frequency和start是R中ts()函数产生时间序列对象需要的两个基本参数。frequency的用法,           (a)frequency=4表明时间单位是年,每一个时间单位中有4个季节观察值。           (b)frequency=365表明时间单位是年,每一个时间单位中有365个日期观察值。              若样本容量T<365,则可用frequency=T表示。       start的用法。           (a)若ts(gm,frequency=365,start=c(2014,1,1))建立时间序列。                  但是,若用  ts(gm,frequency=365,start=c(2014,1,1),end(2014,12,31))结果将不同。           (b)若用ts(gm,frequency=1,start=c(2014,1,1))则,创建的时间序列start和end不同,将1年的时间单位用1天表示。                  这个用法一般是gm只有一年的数据,对此年的数据进行以天为单位的经济统计。                然而金融数据大多数并不是以365个数据为一年的数据,比如股市一年的有效数据一般在240多天,因此frequence的选择应该与一年的实际数据为准。  完整的函数表示:     ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1,        ts.eps = getOption("ts.eps"),  class = , names = )        详细信息可见R语言系统    >?ts       e.g. 参数class
class to be given to the result, or none if
NULL
or
"none"
. The default is
"ts"
for a single series,
c("mts", "ts", "matrix")
for multiple series.
 

2.as.xts()

      as.xts()与ts()不同,要求行名是日期。因此数据框中的日期必须赋值到行名,     而且删除日期所在的列。eg1.  as.xts()建立时间序列的主要命令      da=read.table("m-gm3dxjsh2016.txt",header=T)      gm2016=da[,1:2]   #da[1]是日期,da[2]是金融数据      rownames(gm2016)=gm2016[,1]   #将日期赋值到行名,注意不能用gm2016[1],否则长度不同      gm=gm2016[-1]    # 去掉第一列      gm1=as.xts(gm[,1])  # 建立金融数据的时间序列,实际上这个语句并能运行,原因见eg2.     将日期赋值到行名的编程方法有很多,第二个程序的数据文件不同。eg2.as.xts()建立时间序列的完整程序> da=read.table("D:/programsdata/financialCapital/m-gm3dx2016.txt",head=T)      >head(da)      date       gm       vw       ew       sp1 19750131 0.252033 0.141600 0.299260 0.1228122 19750228 0.028571 0.058411 0.053918 0.0598863 19750331 0.054487 0.030191 0.081497 0.0216944 19750430 0.045593 0.046497 0.031093 0.0472655 19750530 0.037209 0.055140 0.072876 0.0441016 19750630 0.107955 0.051473 0.071792 0.044323>gm2016=da[,1:2]   #gm2016是数据框>head(gm2016)date       gm1 19750131 0.2520332 19750228 0.0285713 19750331 0.0544874 19750430 0.0455935 19750530 0.0372096 19750630 0.107955> dim(gm2016)      [1] 408   2> str(gm2016)    #成员date是int型'data.frame':   408 obs. of  2 variables: $ date: int  19750131 19750228 19750331 19750430 19750530 19750630 19750731 19750829 19750930 19751031 ... $ gm  : num  0.252 0.0286 0.0545 0.0456 0.0372 ...   > d=as.character(gm2016[,1])       #将int型日期转换成Date型> d1=as.Date(d,format="%Y%m%d")> head(d1)[1] "1975-01-31" "1975-02-28" "1975-03-31" "1975-04-30" "1975-05-30"[6] "1975-06-30"                         > class(d1)[1] "Date"> gm=gm2016[,2,drop=FALSE]   #获得数据框gm2016的第二列,drop=FALSE防止出现向量> class(gm)      #gm是数据框[1] "data.frame"> head(gm)        gm1 0.2520332 0.0285713 0.0544874 0.0455935 0.0372096 0.107955> str(gm)    #成员gm的类型是num数值型'data.frame':   408 obs. of  1 variable: $ gm: num  0.252 0.0286 0.0545 0.0456 0.0372 ...> rownames(gm)=d1   #gm的行名是R语言标准时间表示> head(gm)                 gm1975-01-31 0.252033    #注意19750131是不允许的1975-02-28 0.0285711975-03-31 0.0544871975-04-30 0.0455931975-05-30 0.0372091975-06-30 0.107955>library(xts)>gm2=as.xts(gm)

比较

ts()和as.xts()两个函数产生的时间序列的plot图略有不同。然而acf图和pacf图则相同。nm1=as.xts(data1)nm2=ts(data1,frequency=365,start=c(2014,1,1),end=c(2014,12,31))acf(nm1,lag=20) pacf(nm1,lag=20)acf(nm2,lag=20)pacf(nm2,lag=20)plot(nm1)plot(nm2)                                                                         图1        acf和pacf图                                                                    图2     两个函数产生的时间序列的plot图可以看到plot图中,ts()产生的时间序列更为精细,而as.xts()的时间序列则略微粗糙。经济分析同类文章:http://rsoftware.h.baike.com/category-407327.html。建立时间序列是ARIMA和ARCH模型的基础。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息