蒋 涛 梁 凤 周 昊 黄德生,4 关 鹏△
3
时间序列分析是处理时间序列数据的常用方法[1],在此方法中,需要定义日期,SPSS软件界面data=>Define Dates提供了定义日期的常用类型,由year_,quarter_,month_,week_,day_,hour_,minute_,second_和date_组成,但是并不是所有这些时间的自由组合。例如weeks只能和days、hours组合,而无法和year形成周期为52周的组合。对于一些其他的周期性数据也存在同样的问题,本文主要将主流统计软件中定义不常见周期性时间数据的方法加以介绍。
在定义时间数据时,使用DATE命令,为:
DATE keyword[starting value[periodicity]],其中keyword为关键词,starting value为第一个个案值,periodicity为周期。长时间段的keyword为YEAR、QUARTER、MONTH。短时间段的keyword包括WEEK、DAY、HOUR、MINUTE、SECOND。对于其他任意时间段,可以使用CIRCLE、OBS为keyword。
对于分年份的周数据,我们可以假设一年有52个星期,则periodicity取52,Default starting value取1,在语句窗口执行:
DATE OBS 1 52
则产生如下三个变量,分别是CIRCLE_、OBS_、DATE_。第一个个案三个变量的取值分别为1、1、1 1,第二个个案三个变量的取值分别为1、2、1 2,以此类推。这样我们就定义了以52周为周期的时间序列。数据结果如下:
CYCLE_ OBS_ DATE_
1 1 1 1
1 2 1 2
1 3 1 3
1 4 1 4
1 5 1 5
⋮
1 50 1 50
1 51 1 51
1 52 1 52
2 1 2 1
2 2 2 2
在其他统计软件中也尝试进行周期为52周的时间序列数据的定义:
(1)R软件通过加载TSA软件包利用ts函数定义时间序列[2-3],包括数据、首发时间start,结束时间end,在基础的单位时间长度上数据的个数frequency或者倒数deltat=1/frequency。对于以周为单位的数据可以定义为:
z <- ts(c(1:312),frequency = 52,start = c(2011,1)) # 1st of 2011
输出结果:
Time Series:
Start = c(2011,1)
End = c(2016,52)
Frequency = 52
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
[55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
[91] 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
[109] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
[127] 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
[145] 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
[163] 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
[181] 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
[199] 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
[217] 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
[235] 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
[253] 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
[271] 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
[289] 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306
[307] 307 308 309 310 311 312
(2)在SAS软件中,通过函数intnx定义时间序列[4],intnx函数的三个参数,第一个参数是指定等时间间隔,可以是day,week,month,quarter,year等。第二个参数是指定参照时间。第三个参数是_n_k,用来调整开始观测指针,k为正整数时指针由参照时间向未来拨k期;k取负整数时反之。
time=intnx( ‘month’,‘01jan2005’d,_n_-1);
data example1_2;
input case ;
time=intnx( ‘week’,‘01jan2005’d,_n_);
format time weekdate.;
cards;
34
50
70
46
72;
proc print data=example1_2;
run;
输出结果:
Obs case time
1 34 Sunday,January 2,2005
2 50 Sunday,January 9,2005
3 70 Sunday,January 16,2005
4 46 Sunday,January 23,2005
5 72 Sunday,February 30,2005
(3)Stata软件则需要先建立一个时间变量[5],然后使用tsset命令来定义时间变量[1],基本格式为:
tsset timevar[,options]
options包括两类,一个是定义时间单位,包括时钟时间、天、周、月、季节、半年、年及自定义时间;时间周期采用delta(#),若从菜单上执行操作会更简便一些。
statistics=>Time Series=>Setup and utilities=>declare dataset to be time-series data.
在Stata中,tsset t,generic delta(5),输入数据的方式为0,5,10,15,20等。综上所述,定义时间序列的通用方式是所使用的时间单位、开始时间、周期。只要读者能够掌握这三个原则,即可应对任意周期的时间序列的定义。