时间序列数据中的观察值是按照时间顺序依次观察到的,观察的时间间隔通常是整数,如一天、一个星期、一个月或一年。一个时间序列代表了一个总体的动态变化过程。时间序列分析主要关注三个问题。第一个是识别总体变化的趋势,第二个是用模型来表示这个趋势,第三个是根据过去的数据和模型对未来进行预测。
在matlab中,创建一个时间序列数据要用到timeseries这个命令。就是你要告诉matlab这是个时间序列的数据。
ts=timeseries(data,time, ‘Name’, tsname)
其中data是要转化为时间序列的原始数据,time定义了这个时间序列的长度,matlab默认的时间长度是从0:N-1,N为数据的长度。用户也可以自己定义为1:N。’Name’可以给所定义的时间序列数据取一个名字,名字叫做tsname,当然这个可以自己定义。
举例:
>>loadcount.dat %加载数据
从workspace中可以看出这个数据有24行3列。下面定义三个时间序列变量:
>>count1=timeseries(count(:,1),1:24, ‘name’, ‘intersection1’);
>>count2=timeseries(count(:,2),1:24, ‘name’, ‘intersection2’);
>>count3=timeseries(count(:,3),1:24, ‘name’, ‘intersection3’);
注意到上述的三个时间序列变量有两个名字,以第一行为例:count1是变量名,intersection1被称作internal object name(可以成为:内部object名称)。当用matlab的内置方程分析时间序列数据时,要用count1;matlab还有一种分析时间序列数据的方法,称为object,这时需要用intersection1这个内部object名称。
Matlab默认的时间间隔是1秒,当然也可以根据自己的要求修改时间间隔的单位。例如要修改count1的时间间隔:
>>count1.TimeInfo.Units=’hours’; %将时间间隔改为小时,因此count1的数据表示一天24小时每个小时所观测的交通流量。
还可以修改时间序列中数据的单位,我们已经知道count中数据表示的是每个时间点在每个路口观测到的汽车的数量,因此时间序列中每个数据的单位是辆。可以用下面的命令:
>>count1.DataInfo.Units=’cars’;
还可以修改数据的差值方法:
>>count1.DataInfo.Interpolation=tsdata.interpolation(‘zoh’);
将数据差值的方法改为zero orderhold (zoh)。
可以打开所创建的时间序列数据,对数据的结构有个更直观的认识:右键点击workspace中count1,然后选择open in time seris tools.
在时间序列数据中可以定义Events,换句话说你比较关注哪个时间点上的数据,就定义哪个点为events,例如我们可能比较关注早上8点和晚上18点的交流流量:
>>e1=tsdata.event(‘AMCommute’,8); %将第一个event定义在早8点。
>>e1.Units=’hours’; %定义时间单位。
>>count1=addevent(count1,e1); %将event添加到count1中。
>>e2=tsdata.event(‘PMCommute’,18);
>>e2.Units=’hours’;
>>count1=addevent(count1,e2);
想看一下定义了events之后的数据,可以直接
>>plot(count1)
图形上对8点和18点的数据进行了加重。