您的当前位置:首页正文

基于MATLAB的金融风险因子分析

2023-10-19 来源:好走旅游网


基于MATLAB 的金融风险因子分析

摘 要

从定性的角度分析,金融危机对整个经济社会的稳定性造成极大的危害,这一点已经得到普遍的认识。加入WTO后,面对金融开放,中国的金融更加复杂,局部性的金融波动增加,金融机构的国内国际传导效应增强,会产生更强的“多米诺骨牌”效应,金融风险的不断增大已经成为中国经济中的突出问题,进一步发展下去将会对中国的经济稳定发展造成严重威胁。为了对中国的金融风险状况有一个客观准确的把握,需要对金融风险进行系统分析,即定量分析为主,辅之以定性分析。本案例以此为出发点,用因子分析来对金融风险进行定量分析,以把握金融风险的发展趋势,运用MATLAB软件进行统计分析,找出影响金融风险的因素,制定防范和化解金融风险的有效措施。

关键词

因子分析 MATLAB 金融风险

指标选取

金融风险可以划分为宏观、中观、微观三个层次,这个例子的金融风险是宏观层次上的风险,即引发整个金融系统出现严重动荡不稳的可能性,诸如存款挤兑、金融企业大量倒闭、汇率急剧变动、恶性通货膨胀等等。我们在选取指标时要遵循以下原则:

1.规范性原则。所建立的评价指标体系应当包括《巴塞尔协议》等国际金融准则中的风险管理指标,同时还应该从我国的实际情况和金融管理的现行政策和制度出发,选择符合我国实际需要的金融安全评价指标,以便实际实施。

2.宏观性原则。国家金融安全评价着眼于宏观层次上的金融安全管理,因而评价指标体系应既能够反映整体承受的金融风险状况,也能反映金融体系自身的可持续发展能力,也对宏观金融风险的主要方面有完整的表述。

3.灵敏性原则。所选取的指标数值上的细微变化敏感地反映了金融形势的变化,而金融形势的细微变化也能在这些指标体系的变化中得到体现。

4.操作性原则。所选取的各指标都能快捷的搜集到相当准确的、可靠的、指标值。 遵循上述原则,在认识金融危机产生根源、基本类型,及发生后所带来的社会经济变化的基础上,结合我国当前金融风险的特殊性和统计数据索取的可能性,共选取了宏微观两个层次,6个方面9个监测指标,如表9-15所示。评估指标临界点的确定,一方面是参照国际上公认的标准,另一方面充分结合了我国的实际情况。

表9-15 金融风险预警监测指标 指标名称 GDP增长率(X1) M2增长率(X2) 股票市价总值(X3) 国有商业银行资本充足率(X4) 国有商业银行资本收益率(X5) 国债负担率(X6) 进出口/GDP(X7) 外债偿债率(X8) 短期外债/外汇储备(X9) 临界值 8% 10% 30% 8% 社会平均收益率的一半 20% 5% 25% 25% 因子分析原理

因子分析产生于20世纪初,是主成分分析法的一种自然延伸,也属于多元统计分析。 因子分

析法通过对大量数据的观测,解析数据集合,用较少有代表性的因子来说明众多变量所提取的主要信息,分析多个变量间的关系。 因子分析按样本与描述样本的指标间的关系可分为Q型因子析和R型因子分析;按对数据变换方法的不同又可分为抽象因子分析(AFA)和目标因子分析(TFA)。 因子分析法用于金融风险评定已有较多的研究成果发表。20世纪70年代,法国数学家Benzecri提出了对应因子分析法,利用R型因子分析和Q型因子分析的对偶性,把二者结合起来研究变量之间、 样本之间的相关关系,找到它们之间存在的潜在环境影响因素。 R型因子分析主要用于研究指标变量之间的相关关系,Q型因子分析则主要用于研究样本之间 的相互关系。

因子分析的基本数据模型如下:

X111112LX222122LMMMMXppp1p2L上述关系简记为XμAF+ε, 且满足:E(F)0

1

2MMMpmFmp1mF12mF2E(ε)0

Var(F)I,即各个公共因子不相关且方差为1。

22Var(ε)diag(12,2,,p),即各个特殊因子不相关,方差不要求相等。

Cov(F,ε)0,即公共因子与特殊因子是不相关的。

其中X为实测的p维向量; F为潜在因子或公共因子,是pm阶矩阵,并且 m

因子分析的目标之一就是要对所提取的抽象因子的实际含义进行合理解释,即对因子进行命名。有时直接根据特征根、特征向量求得的因子载荷阵难以看出公共因子的含义。例如,可能同一个变量在多个公共因子上都有较大的载荷,也可能多个变量在同一个公共因子上都有较大载荷,说明该因子对多个变量都有较明显的影响作用。这种因子模型反而很难对因子的实际背景进行合理的解释。这时需要通过因子旋转的方法,使每个变量仅在一个公共因子上有较大的载荷,而在其余的公共因子上的载荷比较小,至多达到中等大小。这时对于每个公共因子而言(即载荷矩阵的每一列),它在部分变量上的载荷较大,在其它变量上的载荷较小,使同一列上的载荷尽可能地向靠近1和靠近0两极分离。这时就突出了每个公共因子和其载荷较大的那些变量的联系,该公共因子的含义也就能通过这些载荷较大的变量做出合理的说明。

因子旋转方法有正交旋转和斜交旋转两类,这里我们重点介绍正交旋转。对公共因子作正交旋转就是对载荷矩阵A作一正交变换,右乘正交矩阵Γ,使得旋转后的因子载荷阵B=AΓ*有更鲜明的实际意义。旋转以后的公共因子向量为FΓF,它的各个分量F1,F2,,Fm也是互不相关的公共因子。根据正交矩阵Γ的不同选取方式,将构造出不同的正交旋转的方

法。实践中常用的方法是最大方差旋转法,其原理是使得旋转后因子载荷阵的每一列元素的方差之和达到最大,从而实现使同一列上的载荷尽可能地向靠近1和靠近0两极分离的目的。 值得说明的是,旋转后的因子载荷阵B与旋转前的因子载荷阵A相比,各因子的方差贡献

g2j发生了变化,已经不再等于样本协差阵的第j大特征根,但提取出的全部m个因子的总

方差贡献率

gg2jj1j1mp2j仍然等于

,另外,因子旋转在改变因子载荷阵的同

iii1i1mp时,也改变了因子得分。

因子得分是因子分析的最终体现。当因子载荷阵确定以后,便可以计算各因子在每个样本上的具体数值,称为因子得分。得到了因子得分之后,就可以像主成分分析那样,用因子得分来代替原始变量,从而达到降维的效果。

在因子分析模型XAF+ε,如果不考虑特殊因子的影响,当mp且A可逆时,我们可以非常方便地从每个样品的指标取值X计算出其在因子F上的相应取值:FA1X,即该样本在因子F上的“得分”情况,简称为该样品的因子得分。

可以证明,如果使用回归法,则因子得分可以由下面的式子给出: F=AX。其中,为样本协差阵,称矩阵W=A为因子得分系数矩阵。应该注意,如果因子载荷阵经过了旋转,则上式中的因子载荷阵A应该是旋转后的因子载荷阵。

基于MATLAB的因子分析过程因子分析的MATLAB实现过程可分为以下7步 1、对原始数据进行标准化处理

原始数据标准化的目的是消除量纲不同引起的差别,计算公式为:

-1-1

其中,

x.j为第j列的平均值,

j为第j列的标准差。

2、 对标准化后的样本变量矩阵 X 再进行对应变换 对应变换应先分别按行、列求和,得到变换后的新矩阵Z中的元素:

xig、

xgj,然后求和Txi1j1nmij,进而得到对应

zijxij(xigy)/Tgjxyigij(i1,2...n,j1,2,...m)

gj其中,

x为原始矩阵中的元素;

zij为变换后新矩阵中的元素。

3、 计算矩阵Z的协方差矩阵 R

矩阵Z的协方差矩阵R的计算过程为:

RZZ(rij)mn

式中,矩阵R中的元素为:

nTrijzikzkj(i,j1,2...m)

k14、 确定矩阵R的特征值及其对应的特征向量

用雅可比算法求得特征值和特征向量 , 然后特征值按由大到小顺序排列:

,...,12im0,其相应的特征向量为

Te(e1i,e2i,...,emi)(i1,2,...,m)

5、 计算R型因子载荷矩阵A

首先计算主分量的累计贡献率,累计贡献率大于85%时,取前面k个成分为主分量,并由此计算R型因子载荷矩阵:

矩阵中的每一列就是相应的特征向量和特征值平方根的乘积。 6、 计算Q型因子载荷矩阵B

R型和Q型的非零特征值相同,并且Q的特征向量可以用R型的特征向量表示出来,从而得到 Q型因子载荷矩阵:

矩阵中的每一列也是相应的特征向量和特征值平方根的乘积。 7、 作图分类

选取R型的最大和次大的两个特征值

、1及相应的特征向量2ee、1在2Rm空间中以

e11和

e22分别构造出两个坐标轴,并记为

F1和

F2。再选取Q型的最大和次大的

两个特征值

、12及相应的特征向量

Ze1

、12Ze 在2Rm空间中以

Ze11和

Ze22分别构造出两个坐标轴,并记为

G和G。这样,每一个指标和样本分别在平面

F-F12和

G-G12上对应一个点,而这两个因子平面的两条直角坐标轴重合。因此可以把

指标和样本在同一因子平面上标示出来,将临近的点归为一类,表明它们有共同的风险指标。

基于MATLAB的因子分析

1、数据收集

本案例选取了1992年到2005年的相关数据,见表9-16。

表9-16 1992-2005年各指标数据

年度 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 X1 14.2 13.5 12.6 10.5 9.6 8.8 7.8 7.1 8 7.3 9.1 10 10.1 9.9 X2 31.3 37.3 34.5 29.5 25.3 19.6 14.8 14.7 12.3 17.6 16.8 19.8 14.6 17.6 X3 3.93 10.2 7.89 5.94 14.5 23.44 24.52 31.82 53.79 45.37 20 25.84 35.26 35.58 X4 0.05 0.03 0.04 0.04 0.03 0.03 0.05 0.04 0.05 0.05 0.07 0.06 0.09 0.11 X5 1.78 1.33 0.28 0.51 0.45 0.15 0.09 0.31 0.33 0.22 0.23 0.21 0.22 0.21 X6 4.82 4.45 4.9 5.66 6.35 7.4 9.91 12.85 14.56 16.28 12.44 11.54 11.5 11.49 X7 34.27 32.56 43.61 40.11 35.08 36.05 33.73 36.39 43.92 43.98 48.85 60.01 64.13 49.1 X8 7.1 10.2 9.1 7.6 6 7.3 10.9 11.3 9.2 7.5 7.89 6.85 3.19 3.07 X9 55.8 63.9 20.2 16.2 13.4 13 12 9.8 7.9 23.8 17.1 19.1 19.5 19.07 2、读取数据

将表9-16的数据输入到Excel中,记为1,然后在Matlab中输入程序读取数据 >> [x,textdata] = xlsread('1.xls'); % 从文件1.xls中读取数据 >> varname = textdata(1,2:end); % 变量名 >>obsname = textdata(2:end,1); % 年度 3、对数据进行标准化变换

>> z = zscore(x); % 调用zscore函数对x进行标准化变换,消除量纲的不同 4、对标准化后的数据调用factoran函数作因子分析

>> [lambda,psi,T,stats] = factoran(z,4) %先尝试使用4个公共因子,进行因子旋转

lambda =

-0.7127 0.6658 0.1644 0.1299 -0.7793 0.4763 -0.2394 0.2041 0.8452 -0.2574 0.1907 0.0848 0.2938 -0.0288 0.8593 0.0212 -0.3019 0.9171 -0.1700 -0.1841 0.9348 -0.2544 0.1852 0.1490 0.2362 -0.1751 0.7868 0.3556 0.0590 0.0282 -0.7799 0.1321 -0.3001 0.8775 -0.0641 0.0731 psi =

0.0050 0.0669 0.1758 0.1740 0.0050 0.0050 0.1680 0.3700 0.1305 T =

-0.7283 0.6782 -0.0759 -0.0619 -0.0737 0.0641 0.8242 0.5579 0.6806 0.7306 0.0336 -0.0435 0.0310 0.0461 -0.5602 0.8265

stats =

loglike: -0.9170 dfe: 6

>> Contribut = 100*sum(lambda.^2)/9 %计算贡献率,因子载荷阵的列元素之和除以维数

Contribut =

33.6690 27.1602 23.9309 3.0168

>> CumCont = cumsum(Contribut) %计算累积贡献率

CumCont =

33.6690 60.8292 84.7600 87.7768

从贡献率和累积贡献率来看,前三个因子对原始数据总方差的贡献率分别为33.6690%、27.1602%和23.9309%,累积贡献率达到了84.7600%,这说明因子模型中公共因子的数目还可以进一步减少,只考虑3个公共因子。

>> [lambda,psi,T,stats,F] = factoran(z,3) %使用3个公共因子,进行因子旋转

lambda =

-0.7033 0.6839 0.1805 -0.7648 0.5097 -0.1612 0.8532 -0.2460 0.2049 0.2997 -0.0123 0.7490

-0.3143 0.8670 -0.2242 0.9187 -0.2655 0.2326 0.2209 -0.1691 0.9027 0.0601 0.0441 -0.6753 -0.2716 0.9050 -0.0700 psi =

0.0050 0.1294 0.1696 0.3490 0.0992 0.0313 0.1078 0.5385 0.1024 T =

-0.7373 0.6686 0.3744 0.2847 0.5624 0.6870

stats =

loglike: -1.6373 dfe: 12 F =

-0.5142 2.3942 -0.5535 2.0553 -1.8163 -0.3338 -1.2116 -0.7146 -0.8692 -0.8394 -0.5683 -1.0764 0.1801 -0.9059 1.0491 -0.4464 1.3873 0.1154 0.0971 0.8825 -0.4602 -0.3119 -0.8399 0.6951 -0.3732 -0.8571 -0.8423 -1.1275 -1.2129 -0.0194

1.9442 0.3972 -0.3560 0.4695 -0.1809 0.5217 0.0817 -0.2058 1.4281 0.1465 -0.2188 2.0652 0.2746 -0.0399 1.2301

>> Contribut = 100*sum(lambda.^2)/9 %计算贡献率,因子载荷阵的列元素之和除以维数

Contribut =

32.9594 27.3322 22.6843

>> CumCont = cumsum(Contribut) %计算累积贡献率

CumCont =

32.9594 60.2917 82.9760 >> [varname' num2cell(lambda)]

ans =

'X1' [-0.7033] [ 0.6839] [ 0.1805] 'X2' [-0.7648] [ 0.5097] [-0.1612] 'X3' [ 0.8532] [-0.2460] [ 0.2049] 'X4' [ 0.2997] [-0.0123] [ 0.7490] 'X5' [-0.3143] [ 0.8670] [-0.2242] 'X6' [ 0.9187] [-0.2655] [ 0.2326] 'X7' [ 0.2209] [-0.1691] [ 0.9027] 'X8' [ 0.0601] [ 0.0441] [-0.6753]

'X9' [-0.2716] [ 0.9050] [-0.0700]

将因子得分F分别按不同因子得分进行排序,以便分析各个因子在不同年份的变化情况 >> obsF = [obsname, num2cell(F)]; % 将年度与因子得分放在一个元胞数组中显示 >> F1 = sortrows(obsF, 1); % 按因子1得分排序 >> F2 = sortrows(obsF, 2); % 按因子2得分排序 >> head = {'年度','因子1','因子2'};

>> result1 = [head; F1]; % 显示按因子1得分排序的结果 >> result2 = [head; F2]; % 显示按因子2得分排序的结果

同理可以得出因子3的得分数据,从因子得分的取值可以看出,因子优势越明显的年份,其对应因子得分值越小;因此用因子得分的负值做出散点图,从散点图上可以看出因子随时间的变化。

作散点图的命令如下:

>> plot(-F(:,1),-F(:,2), 'k.') ; %作因子得分负值的散点图 >> xlabel('第一因子得分(负值)'); %为X轴加标签 >> ylabel('第二因子得分(负值)'); %为Y轴加标签 >> box off ; %去掉坐标系右上的边框

>> gname(obsname); %交互式添加各散点的标注

结果分析

根据9个风险指标之间的相互关系,可以看出,指标变量可以分为三类:第一类是经济增长和国债因子,即 “X1,X2,X3,X6”;第二类是盈利性因子,包括“X5,X9”;第三类是资本因子,包括 “X4,X7,X8”。此外根据因子得分的年份分布可以看出第一类因子呈现出上升的趋势,因此在未来制定防范和化解金融风险的有效措施时我们将优先考虑第一类因子对金融风险的影响程度。

参考文献

[1] 谢中华.MATLAB统计分析与应用[M].1版.北京:北京航空航天大学出版社,2010. [2] 马民涛,郝莉.城市区域环境污染源的因子分析及管理[J].

[3] 王学民.应用多元分析[M].2版.上海:上海财经大学出版社,2004.

因篇幅问题不能全部显示,请点此查看更多更全内容