全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 经管代码库
14042 2
2015-03-15
   到这篇学习笔记为止,matlab data analysis 这本书就算是读完了,总体上感觉学习到了一些基本的命令,但是对于研究的帮助不是很大。后面还有一些内容是用matlab GUI分析时间序列数据,估计在实际过程中应用的范围很窄,因为GUI一般仅限于两个变量,即一个自变量,一个因变量。不太适合经济分析。所以决定不再对之后剩余的内容进行更新。因此,这本书的学习就到此结束了。此外,感觉大家的兴趣也不是很大,基本上没有回复,令卤煮也很郁闷。

       因此,决定从下个月开始重新做一本书的读书笔记,目前有几个选择。一本是Applied computiional economics and finance,一本是numerical methods in finance and economics,还有一本是Business economics and finance with matlab, GIS, and Simulation models。还没有决定开始学习哪一本,如果大家感兴趣的话,可以支持一下,并表达一下对哪本书感兴趣。这样也可以使我的工作更好的为大家服务。希望大家积极参与。

       最后附上剩余的时间序列分析部分。


之前介绍了如何将创建的多个时间序列Objects组合成一个数据集 (time seriescollection objects,或TSCO)。Matlab中的内置方程为:tsc=tscollection(TimeSeries)。TSCO是用同一个时间向量将多个时间序列组合起来。

举例:

利用之间创建的count1,count2,count3。(如何创建见前一篇学习笔记)。

>>tsc=tscollection({count1 count2}, ‘name’, ‘count_coll’)     %仅以count1和count2为例,当然可以在其中加入count3。加入count3的另一种方法是:

>>tsc=addts(tsc,count3)

需要注意的是,新加入的时间序列向量的长度要与之前的相同。

对TSCO中的时间序列向量重新抽样。对于之前的tsc数据集,其数据时间间隔为1小时,若现在想选出新的数据使时间间隔为2小时,则可以用下面的命令:

>>tsc1=resample(tsc, 1:2:24)

需要注意的是,重新抽样相当于重新创建了一个时间向量。

如果想要在更短的时间内重新抽样,比如说每半个小时,可以用下面的命令:

>>tsc1=resample(tsc,1:0.5:24)

由于原来的数据中不包含半小时的数据点,因此matlab默认的是用原始数据中定义的插值法进行插值计算,计算出每半个小时上的数据(用户可以根据自己的需要修改原始数据附带的插值法,具体请见上一篇笔记)。

在现有的数据集的基础上添加一个样本点的方法也很直观,例如,现在我们想tsc1这个collection objects中的第一列添加一个数据,将5添加到3.25小时这个时间点:

>>tsc1=addsampletocollection(tsc1, ‘time’, 3.25, ‘intersection1’,5)

由于tsc1有三列,而上面的命令只在其中一列添加了数据,其他两列补齐的方法就是在第二列和第三列的相应位置加上NaN。查看添加数据之后的数据格式是怎样的,可以输入以下的命令:

>>tsc1.intersection1

然后双击ans,就会出来一个对话框,在里边可以看到新添加的数据。

在tsc1的第二列和第三列,也就是intersection2和intersection3有缺失值,对于缺失值可以直接去除,或者通过插值法补齐。时间序列分析中有专门的命令可以用来查找和消除缺失值:

>>tsc1=delsamplefromcollection(tsc1,’index’,find(isnan(tsc1.intersection2.Data)));

查找到缺失值所在的行,“delsamplefromcollection”会将每一列这一行的元素都消除。

插值法就是将NaN所在的位置用新计算的数据补齐。由于刚才的操作已经吧NaN消除了,所以为了使用插值法,还得把之前的过程重复一遍:

>>tsc1=addsampletocollection(tsc1,‘time’, 3.25, ‘intersection1’, 5);

然后再用插值法:

>>tsc1=resample(tsc1,tsc1.Time)

tsc1.Time就是按照tsc1的时间向量进行重复抽样,第一列的数据是完整的,因此重复抽样的结果是复制第一列(因为在每一个时间点上只有一个数据,所以重复抽样的结果就是复制那个数据)。第二列和第三列存在NaN,matlab默认的是用线性插值法补齐缺失值。

如果要去除collectionobject中的一列,如intersection3,可以用下面的命令:

>>tsc1=removets(tsc1,‘intersection3’)

在Matlab中也可以将时间序列数据中的时间向量由数字型变为字符串型。仍以tsc1为例,要记住的是tsc1.TimeInfo表示的是tsc1这个时间序列数据的时间性质,包括时间向量的表达形式。要将时间向量由数字型变为字符串型,首先要定义起始时间StartDate,作为基准的时间变量。

>>tsc1.TimeInfo.StartDate=’DEC-25-2004 00:00:00’;

也就是将基准时间定为2004年12月25日。这样matlab就会根据这个基准的时间,按照之前定义的时间间隔,调整时间向量。为了验证这一点,可以输入:

>>tsc1.intersection2(6)

可以看到时间向量已经变为字符串,很多信息都一目了然。

由于之前去除了tsc1中的一列,可以将剩下的两列画图,看一下经过一系列变化之后的数据:

>>plot(tsc1.intersection1);hold on;

>>plot(tsc1.intersection2)


由于intersection1intersection2所用的插值法不同,分别为zoh和线性,因此图形也是不同的。intersection1两点之间的连线呈阶梯状,而intersection2两点之间的连线是直线。
   

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-11-11 09:30:14

发帖不易,良苦用心 ,感谢楼主,感谢分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-12-12 22:37:30
好文~学习了~多谢楼主分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群