主要内容时间序列的定义与扩展相关图绘制与白噪声检验移动平均滤波与指数平滑法ARIMA模型SARIMA模型ARIMAX模型单位根检验向量自回归模型协整与向量误差修正模型ARCH族模型实验12-1:时间序列的定义与扩展实验基本原理在利用stata对时间序列数据进行分析之前,我们通常需要定义时间变量。只有这样,我们才能方便地使用各种时间序列算子以及相关的时间序列分析命令。此外,有些时候,随着时间的推移,我们又获得了新的观测值,或者,我们需要对时间序列进行预测,这时,有必要对时间区间进行扩展。这些,都可以通过stata方便地实现。实验内容及数据来源利用本书附带光盘data文件夹下的“tsexmp.dta”工作文件,我们来讲解时间变量的设定。“tsexmp.dta”中,主要变量包括:time=整数的时间变量,time1=字符串格式的时间变量。利用这些数据,我们会讲解时间序列数据的设定,时间区间的扩展,以及前滞变量、滞后变量、差分变量、季节差分变量的设定等。实验操作指导1时间序列数据的设定(1)定义时间变量的基本命令设定时间序列(timeseriesset)变量的基本命令格式为:tssettimevar[,options]其中,tsset是“定义时间变量”的基本命令,timevar为用于标识时间序列数据的变量名,options代表其他选项。可用的options选项主要分两类,一类设定时间变量的单位(unitsoftimevar),一类设定时间变量的周期(periodoftimevar)。表12.2给出了各个单位选项(unitoptions)。其中,默认规则意味着,如果事先通过format命令设定了timevar的显示格式为%t*格式,则不必再设定单位选项(unitoptions),stata会根据时间变量的显示格式自动获得时间变量的单位;否则,可以设定单位选项。周期选项(deltaoptions)设定时间变量相邻观测值之间的间隔时间为几个单位,表12.3给出了各个具体的选项。下面,我们利用“tsexmp.dta”的数据,对tsset命令及选项做进一步说明。如果我们要设定时间变量为time,输入命令:tssettime进行时间变量的设定之后,stata会自动将数据按设定的时间变量从小到大排序,从而方便相关命令的使用。如果要查看已设定的时间变量,可键入不带后缀的tsset命令。在数据被重新排序之后,想要恢复按时间序列排序,也可以通过tsset命令实现。也就是说,设定time为时间变量之后,如下两条命令会产生相同的效果。①tsset②sorttime在设定时间变量之后,我们可以保存一下数据,这样,下次使用时,就不必再重新设定时间变量。(2)调整时间设定的初始值我们注意到,变量time的起始值为1,事实上,我们可以通过函数将起始时间调整到任何一个我们想要的时间。如过time=1代表2003年6月,那么我们可以生成一个新变量让其起始值为2003年6月。输入命令:generatenewm=tm(2003m6)+time-1listtimenewmin1/5其中,第一步为生成新变量newm,并令其第一个值代表2003年6月。函数tm()可将时间转换成stata系统默认的格式。第二步列出变量time和newm的前5个值。我们可以将变量newm转换成%tm格式使其更易读。键入命令:formatnewm%tmlisttimenewmin1/5其中,format命令用于定义变量的格式。之后,我们可以重新将newm设定为时间变量:tssetnewm当然,如果我们不先使用format命令,直接键入:tssetnewm,monthly或tssetnewm,format(%tm)也可以实现相同的效果。在前面的讲解中,我们假定time为月度变量,并使用了函数tm()以及格式%tm,与之对应,如果数据单位为毫秒、日、周、季度、半年、年,我们有相应的函数tc()、td()、tw()、tq()、th()、ty()以及相应的格式%tc、%td、%tw、%tq、%th、%ty。(3)将字符串变量转换为时间变量在“tsexmp.dta”中,time1为字符串格式的变量,如果我们要将其变为时间变量,可以通过如下的命令实现:gendoublenewc=clock(time1,”MDYhms”)注意,我们这里将产生的新变量设为“双精度”(double)格式。这是因为以毫秒为单位的时间非常大,如果使用默认的“float”格式,新变量newc将被四舍五入,造成结果的不精确甚至是错误。因为变量time1是按照“月-日-年小时:分:秒”的格式呈现的,所以我们在clock()命令中使用选项”MDYhms”告诉stata数据的书写格式。与clock命令对应,当数据的单位为日、周、月、季度、半年、年,我们有命令date()、weekly()、monthly()、quarterly()、halfyearly()、yearly();选项的格式依数据的具体书写格式而定。在此之后,可以通过如下命令将newc设为时间变量。tssetnewc,clocktime其中,选项clocktime表明,我们设定时间序列数据的单位为毫秒。但事实上,数据是每隔20分钟记录一次的,这样,我们有必要将其周期变为20分,以方便滞后算子L、差分算子D等运算符号的使用。选项delta()可以做到这一点。命令为:tssetnewc,delta((1000*60*20))其中,选项delta()中的表达式(1000*60*20)表明,我们设定数据的周期为1000*60*20个单位,这里即1000*60*20毫秒,即20分钟。2扩展时间区间扩展时间区间的基本命令格式为:tsappend,{add(#)|last(date|clock)tsfmt(string)}其中,选项add()指定要增加的观测值的个数。如果不设定选项add(),就必须同时设定last(date|clock)和tsfmt(string)。last()指定我们要将时间扩展到的日期,tsfmt()用于将last()选项中的日期转化成stata默认时间所对应的整数,可用的string包括tc、td、tw、tm、tq、th和ty。需要注意的一点是,在使用tsappend命令之前必须先用tsset设置时间变量。例如,对于“tsexmp.dta”的数据,我们先按照前面所讲,设定时间变量:generatenewm=tm(2003m6)+time-1tssetnewm,monthly这时,时间变量的区间为2003年6月到2005年11月。如果我们想增加12个观测值,可键入命令:tsappend,add(12)这样,时间变量被扩展到2006年11月。当然,我们也可以使用另一种方式:tsappend,last(2006m11)tsfmt(tm)这里,选项last(2006m11)用于指定扩展后时间变量的最后一个观测值为2006年11月,tsfmt(tm)指定变量格式为月数据。如果时间变量有间隔(gaps),例如,在上面的例子中03年6月和03年9月之间缺失了两个月,tsappend命令也会自动补齐。当然,对于有间隔(gaps)的时间变量,我们也可以通过专门的命令tsfill将其补齐。命令格式为:tsfill在使用命令tsfill之前,也需要先用tsset定义时间序列。3时间序列算子在进行时间序列分析时,我们经常要用到某变量的滞后值或差分值等,这可以通过时间序列算子实现。常用的算子及其含义列于表12.4中。实验12-2:相关图绘制与白噪声检验实验基本原理实验内容及数据来源本书附带光盘data文件夹下的“wpi1.dta”工作文件包括了1960年第1季度到1990年第4季度的美国批发价格指数的数据。主要的变量包括:t=时间,wpi=批发价格指数,ln_wpi=wpi的对数。利用这些数据,我们将讲解自相关函数和偏自相关函数的绘图以及白噪声的检验。实验操作指导1计算并绘制自相关函数与偏自相关函数图计算自相关函数、偏自相关函数以及Q统计量的命令为:corrgramvarname[if][in][,corrgram_options]其中,corrgram代表“计算自相关与偏自相关函数以及Q统计量”的基本命令语句,varname代表要分析的变量的名称,if代表条件语句,in代表范围语句,corrgram_options代表其他选项。表12.6列示了各主要选项。此外,我们还可以对自相关和偏自相关图分别进行绘制。绘制带置信区间的自相关函数的命令为:acvarname[if][in][,ac_options]绘制带置信区间的偏自相关函数的命令为:pacvarname[if][in][,pac_options]表12.7给出了这两个命令的选项。下面,我们对数据文件“wpi1.dta”中的变量ln_wpi计算自相关与偏自相关函数以及Q统计量的值。输入命令:corrgramln_wpi,lags(20)其中,选项lags(20)表明设置滞后期为20。当然,我们也可以在变量名上加上滞后算子。例如,我们要对ln_wpi的一阶差分值绘制带置信区间的自相关函数值和偏自相关函数值。可输入命令:acD.ln_wpipacD.ln_wpi2白噪声检验corrgram命令可以同时汇报Q统计量,用于白噪声检验。此外,我们还有专门的命令来进行白噪声检验。用Q统计量进行白噪声检验的基本命令为:wntestqvarname[if][in][,lags(#)]其中,wntestq代表“Q统计量白噪声检验”的基本命令语句,varname代表要分析的变量的名称,if代表条件语句,in代表范围语句,选项lags(#)用于设定滞后期为#。通过Bartlett检验来判断序列是否为白噪声的基本命令为:wntestbvarname[if][in][,tablelevel(#)]其中,wntestb代表“Bartlett白噪声检验”的基本命令语句,选项table表示用列表而非图形来展示结果,level(#)用于设置置信度。下面,我们分别使用Q统计量和Bartlett检验来对序列D.ln_wpi进行白噪声的检验。用Q统计量检验的命令为:wntestqD.ln_wpi用Bartlett检验的命令为:wntestbD.ln_wpi实验12-3:移动平均滤波与指数平滑法实验基本原理实验内容及数据来源本书附带光盘data文件夹下的“sales.dta”工作文件给出了某50个月的图书销售数据。变量主要包括:t=时间,sales=销售额。对于这些销售数据,我们想分析其随时间的变化趋势,并希望通过模型对其进行拟合及预测。这样,利用“sales.dta”的数据,我们来讲解移动平均滤波、单指数平滑法、双指数平滑法以及Holt-Winters平滑法的操作和相关的预测。实验操作指导1移动平均滤波对于“sales.dta”的销售数据,我们想把其分解成两部分:信号和噪声。通过移动平均滤波,我们可以消除噪声。输入命令:tssmoothmasm=sales,window(212)其中,生成的平滑变量被命名为sm,选项window(212)说明我们利用两期滞后值、当期值和两期领先值来做移动平均,且各个值的权重相同。在进行移动平均滤波分析的时候,我们通常希望噪声中没有自相关。下面,我们对其进行检验:gennoise=sales-smacnoise这里,第一步生成一个新变量noise,其值为原序列与平滑序列之差,也就是噪声;第二步绘制变量noise的自相关图。考虑重新指定权重,进行移动平均:tssmoothmasm2=sales,weights(12321)这里,选项weight设置各个值的权重。可以验证,这种形式的平滑之后,噪