finmetricssplus中金融数据数量分析的工具.docx
《finmetricssplus中金融数据数量分析的工具.docx》由会员分享,可在线阅读,更多相关《finmetricssplus中金融数据数量分析的工具.docx(7页珍藏版)》请在冰豆网上搜索。
finmetricssplus中金融数据数量分析的工具
finmetrics-s-plus中金融数据数量分析的工具
Finmetrics:
时间序列统计分析的好的教学模块
欧阳资生
摘要:
对于专业统计学研究人员来说,各国用的最多的是功能强大和灵活的S-plus软件。
近来,一个新的模块---Finmetrics,被添加到S-plus中,它被用来专门处理金融时间序列数据,对金融时间序列进行数量分析。
本文中,我们对Finmetrics模块的功能作了介绍,希望对广大金融时间序列定量分析人员起到抛砖引玉的作用。
关键词:
S-plus,Finmetrics模块,数值计算
一、引言
对于专业统计学家来说,各国用的最多的是功能强大和灵活的S-plus软件。
它是美国AT&T公司的贝尔实验室开发的。
用S-plus编程序很方便,入门容易。
它的统计方法丰富,而且在不断增长。
S-plus透明度大,很容易知道它在作什么。
在S-plus中可以任意加入自己编写的程序,或修改原来的一些程序,为创造性的统计学家所钟爱。
许多最新的统计方法都是一些统计学家用S-plus程序编写出来的,甚至可以从互联网上下载下来。
原来的S-plus主要是为统计学家编程而用,现在的最新版本也已经更加友好,已经实现可视化,很容易操作,同时还保留了其原来的优点,不失为一个好软件。
近来,一个新的模块---Finmetrics模块,被添加到S-PLUS中,它被用来专门处理金融时间序列数据,对金融时间序列进行数量分析。
S-PLUS本身可在许多不同的平台上操作(Windows、Linux、Solaris、Unix),但是Finmetrics模块却只能在Windows、Linux、Unix上实现,而且Finmetrics模块只能添加到S-PLUS6及以上版本上,S-PLUS2000及以下版本,这个模块无法运行。
二、Finmetrics模块的一般回顾
S-plus语言的基础是S语言,它是对S语言的界面化和菜单化,有优秀的内在帮助系统和作图功能,它能够轻松地转到商业支持的S-Plus程序(如果需要使用商业软件)。
S-plus有一个强大的,容易学习的语法,有许多内在的统计函数,通过用户自编程序,S语言很容易延伸和扩大,它是计算机编程语言.类似于UNIX语言、C语言、Pascal、Gauss语言等。
对于熟练的编程者,它将觉得该语言比其他语言更好用。
但是它与C语言、Pascal、Gauss语言不同,它是一种面向对象的程序语言。
S-PLUS语言的函数可以由菜单和命令语句得到,但由命令语句得到的函数要比由菜单得到的多得多。
而且,对Finmetrics模块,使用者只能使用命令语句才能得到函数。
这事实上就要求使用者必须对S语言的语法和编程比较熟悉。
但是,Finmetrics模块并不是标准的S-PLUS软件的一部分,因此,它必须独立于S-PLUS,要求单独安装。
模块的学习帮助通过在线帮助和两个PDF格式的文件形式提供给使用者。
一个文件是对这个模块中的所有函数类(包括198个主要函数)及其使用方法进行了详细的说明,我们在表一中列出了这些说明.另一个文件是由Zivot,E.和Wang,J.H.(2002)两人合作的,专门介绍每个函数族的计算机编程的书。
这本书的计算机程序也可在Zivot,E.的个人网页上下载。
表1:
Finmetrics模块中函数类型
时间/日期效用函数(Time/datautilityfunctions)
时间序列格子图函数(Timeseriestrellisplottingfunctions)
动态的最小二乘法(Dynamicordinaryleastsquares)
表面上不相关回归(Seeminglyunrelatedregression)
单位根、协整过程和VECM(Unitroot,cointegrationandVECM)
长记忆模型(Longmemorymodelling)
固定收益分析(Fixedincomeanalytics)
古典的极值理论(Classicalextremevaluetheory)
状态空间模型(Statespacemodelling)
时间序列控制与插值(Timeseriesmanipulationandinterpolation)
统计概述与统计检验(Summarystatisticsandteststatistics)
滚动估计(Rollingestimation)
自回归与矢量自回归(AutoregressionandVectorautoregression)
GARCH波动模型(GARCHvolatilitymodelling)
技术分析(Technicalanalysis)
多因子统计模型(Statisticalmulti-factormodel)
多元极值Copula估计和分析(Extremevalueanalysiswithstatisticalcopulaestimation)
从表1可以看出,Finmetrics模块包含了许多其他金融分析软件不具备的函数族,在其他金融风险分析的软件里,我们很难找到像技术分析、极值理论和Copulas等相关的内容的。
1960年1月5日到1987年10月16日共6986个日收盘价数据。
Danish.dat包含了自1980年元月3日到1990年11月31日之间丹麦保险公司的理赔额超过一百万丹麦克朗的火灾保险理赔额。
这些数据的来源和使用可在在线帮助中很容易查到,这为我们在使用这个模块时提供了很好的便利。
三、Finmetrics模块的编程
S-PULS是一种面向对象的程序语言,因此,数据结构可以通过类获得。
Finmetrics模块的数据库是基于Timeseries类的。
在Timeseries类中,时间间隙从年、月、日到小时、分钟、秒,相当精确,当然,这也是研究高频数据的需要。
时间序列的数据类型也可以包含任何类型:
数值型、字符串型等等均可以。
前面已经说过,Finmetrics模块不能通过S-PLUS的图形界面或菜单直接得到,因此它必须编程。
这意味着使用者必须对模块中的函数要相对熟悉,幸运的是,我们可以借助这个模块的很好的在线帮助来编程。
为了对利用模块编程语法有个直观的了解,我们通过下面例子来说明。
我们的例子来自于Zivot,E.和Wang,J.H.(2002),我们在例子中分析了利用极值理论中Peak-over-Threshold(POT)方法计算S&P500指数(该数据名为sp.raw)的在险风险值(VaR)的编程方法。
注意,在每一个语句前,我们以命令“>”开始。
我们首先可以通过以下程序观察S&P500指数的收盘价和日收益率折线图(见图1)。
>spto87=getReturns(sp.raw,type="discrete",percentage=T)
>par(mfrow=c(2,1))
>plot(sp.raw,main="DailyClosingPrices")
>plot(spto87,main="DailyPercentageReturns")
图1
当然,我们可以分析收益率分布是否服从正态分布,这可以通过以下一句语句实现。
>qqPlot(spto87)
在Peak-over-Threshold(POT)方法中,一个关键的问题是怎样适当选取门限值,这可以通过平均超出函数图来判断。
Finmetrics模块的实现程序是:
>me.sp500=meplot(-spto87)
对于这个数据集而然,它的平均超出函数图如图2,从中我们可以判断出门限值取1比较恰当。
图2
因此,我们就可以得到S&P500指数的VaR了。
pquantile
[1]0.951.2539
[2]0.992.0790
即置信水平为95%的VaR为1.2539(%),置信水平为99%的VaR为2.0790(%)。
我们也可以将利用极值方法所得结果与利用正态假设所得结果进行比较,利用正态假设计算VaR的语句为:
>sp500.mu=mean(-spto87)
>sp500.sd=sqrt(var(-spto87))
>var.95=sp500.mu+sp500.sd*qnorm(0.95)
>var.99=sp500.mu+sp500.sd*qnorm(0.99)
>var.95
[1]1.299
>var.99
[1]1.848
即在收益率服从正态假设时,置信水平为95%的VaR为1.299(%),置信水平为99%的VaR为1.848。
从这个例子,我们可以看出,只要熟悉了Finmetrics模块中的函数,编程还是相当简单、便捷的。
四、Finmetrics模块的数值计算的精确性
几乎所有的金融时间序列模型都是高度非线形的。
因此,我们在进行数值计算时,就对计算的精度提出了较高的要求。
Finmetrics模块恰好满足了这一要求。
由于模型的非线性,各个参数的解析解是很难得到了,这就要求对其分析解进行精确的数值逼近。
在Finmetrics模块中,参数的估计都是通过其对数似然函数的最优化得到。
当然,最优问题涉及到计算精度的默认值,算法的选择和初始值等。
McCullough&Renfro(1999)和Brooksetal.(2001)就指出,就是最简单的GARCH(1,1)模型,使用不同的软件就会产生不同的结果。
现在我们就利用GARCH(1,1)模型来分析Finmetrics模块是怎样实现数字的精确计算的。
GARCH(1,1)模型已经为金融工所熟悉,它的模型形式是:
,
(1)
(2)
我们利用Ford公司的股票收益率数据(自1984年2月2日到1991年11月31日共2000个数据)来进行分析(在模块的数据库中,该数据名为ford.s)。
GARCH(1,1)模型的参数通过下面语句得到
>garch(ford.s~1,~garch(1,1))
在上面的语句中,我们事实上是使用了所有的默认值。
当然,在这个模型中,我们是无法设定参数的初始值的。
默认的收敛偏差和步长均为0.0001。
当然,我们可以对精度作进一步的要求,将上面运算的收敛偏差和相应的步长由0.0001加强为1*10^(-12),即利用下面的程序我们可以得到更为精确的结果。
具体见图3。
>garch(ford.s~1,~garch(1,1),control=bhhh.control(tol=1e-12,delta=1e-12))
在图3中,我们给出了GARCH(1,1)模型的四个参数的估计的折线图。
用“o”标出的点是收敛偏差和步长取默认值时的估计值。
对这个数据而言,模型的默认值似乎太大,并不能很好的估计模型的参数。
很明显,参数的估计依赖于最大似然估计,而最大似然估计依赖于收敛准则。
从这个例子可以看出,在Finmetrics模块中,我们可以根据自己的要求进行精确计算。
图3
五、Finmetrics模块的评论和结论
Finmetrics提供了先进且丰富的金融数据分析模型。
利用这个模块,我们可以方便地对金融数据进行模型构建、分析及可视化。
与其他的套装软件不同,Finmetrics可以轻易地计算出技术指标及移动平均运算子,它的其他高级的分析技术,包含回归方法(单变数、最小平方、双变数、多变量及联立方程式)等,可对金融数据做更可靠、更有效的分析。
Finmetrics包含了可做固定收益分析的重要函数,也包含了许多极值分析方法,可用于保险公司对风险值分析及构建灾难超额损失模型的应用。
Finmetrics包含了估计FARIMA模型及波动率模型的功能,如单变数及多变数GARCH模型(有EGARCH、TGARCH、powerGARCH及fractionintegratedGARCH模型),因此,它提供了现今最完整的GARCH模型组合。
Finmetrics让你使用最有效的状态空间模型功能来发现隐藏的金融市场消息。
Finmetrics包含了许多统计的多因子模型,提供你更大的精确性及可靠度来处理投资组合的绩效及风险。
Finmetrics支持被先进的计量分析专家所钟爱的滚动估计和回馈检验来检测你的金融模型。
总之,正如Insight公司所评价的,“Finmetrics是一个无价的计量经济分析工具,提供现代的、弹性的财经、金融数据分析功能。
不像其他的竞争软件,Finmetrics提供所有重要的分析方法,从滚动回归(rollingregression),回馈检验,到极值理论,到时间序列分析完全在一个环境中。
……,所以我们相信Finmetrics可以提供我们一个无价的工具。
对财经、金融分析人员而言,她是必备的软件。
”目前,已经有越来越多的金融行业的研究和实践人员、经济和金融学院的研究人员、经济学或金融学的高级MBA以及研究生在使用这个软件。
这也吸引了许多从事金融研究的学者,如Gourierous,C.,Jasiak,J.(2001),Chen,N.H.(2002),在他们的著作中使用S-PLUS和这个模块来实现他们的结果,并附上他们的Finmetrics模块程序。
(单位:
湖南商学院信息系)