![MATLAB金融风险管理师FRM(高阶实战)](https://wfqqreader-1252317822.image.myqcloud.com/cover/187/36862187/b_36862187.jpg)
2.4 投影
线性相关、Cholesky分解(Cholesky factorization)、特征值分解(eigen decomposition)、SVD分解(singular value decomposition)、PCA分析(principal component analysis),以及上一节介绍的矩阵线性变换等概念之间关系千丝万缕。这一节通过投影(projection)一探究竟。
举一个例子,主成分分析实际上寻找数据在主元空间内投影。图2.20所示杯子,它是一个3D物体。如果想要在一张图展示这只杯子,而且尽可能多地展示杯子的细节,就需要从空间多个角度观察杯子并找到合适角度。这个过程实际上是将三维数据投影到二维平面过程。这也是一个降维过程,即从三维变成二维。图2.21展示的是杯子六个平面上投影的结果。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P74_3712252.jpg?sign=1739450333-64E40XFSRwsTRd1whQSVumz3kUPxO59H-0-df1d2457659fbbd2675a9f719389f87e)
图2.20 咖啡杯六个投影方向
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P75_3712253.jpg?sign=1739450333-2gpMyBUh3gWxf9OcmrB9tjQEvuoQbTyt-0-81f468aca4105bf6fb8ef508d37dd467)
图2.21 咖啡杯在六个方向的投影图像
丛书第三册数学部分介绍过向量投影运算。投影运算一般分两种:标量投影(scalar projection)和矢量投影(vector projection)。首先用余弦解释标量投影,如图2.22(a)所示,b为向量a在v方向标量投影。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P75_3712254.jpg?sign=1739450333-gsm4stVXUbrLCHb7zpSwljsdDSALELGg-0-21204df49c73dfc4ef10e1f46468730f)
下式同样用余弦解释矢量投影:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P75_3712255.jpg?sign=1739450333-PNHYNKwtDlt3fFUyiNmPYHMPQ7UJaRC7-0-483f9b1ba1323d37a00afdf2f97efe30)
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P75_3712256.jpg?sign=1739450333-DlGAZ7cFtjvmNDkGleJbUYrGvMIfLE39-0-ee94808a32dd61192fcaebbe10d39497)
图2.22 向量投影和标量投影
图2.22(b)展示第二种计算投影方法。向量a向v投影得到向量投影â,而向量差a – â 垂直于v;据此构造如下等式:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P75_3712257.jpg?sign=1739450333-dQNCtQCbZJvqx15mEOGd0carKNmWwdeJ-0-db481bb9b74f76ddcfd79b570bd655ae)
上式中,v(vTv)-1vT常被称作帽子矩阵(hat matrix)。帽子矩阵和最小二乘回归有着紧密联系,本书回归部分会深入介绍。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P76_3712258.jpg?sign=1739450333-PSclsHgKZPEdbcMheQwSLeE26jRvdwnM-0-a7502d108d31e52a1edca5f9a0d6dff0)
图2.23 向量向平面和超平面投影
如图2.23(a)所示,两个线性无关向量v1和v2构造一个平面H;图2.23(b)所示为,多个线性无关向量v1、v2、…、vq构造一个超平面F。向量a向H平面投影得到向量â。向量â由v1和v2构造。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P76_3712261.jpg?sign=1739450333-jopdQN97rRLFL2qEGEqMAAdiVSF4ETys-0-ede36f0eb17c16095db3444f52c73d92)
向量差a – â垂直于H平面,因此垂直于平面内任何向量。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P76_3712264.jpg?sign=1739450333-iI9jlDj1nLrEAjKSuJfBUN5onL8iOWM6-0-3d8f2cb7a3af42e5af5f434f53089ecc)
以上结论也适用于图2.23(b)展示超平面情况。
下面来看一看数据点投影。如图2.24所示,平面上一点Q(4, 6)和直线上不同位置点之间距离构成一系列线段,d表示这些线段长度。图2.24下两图展示d和d2(线段长度平方值)随位置变化。这些线段中最短那条,即d2最小,为Q和Q点在直线上投影点P之间距离,QP垂直于直线。寻找最短线段实际上就是优化过程。优化问题构建和求解将会在本书后文详细介绍。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P76_3712265.jpg?sign=1739450333-W3Y1chHb0Fbztt0DgewHfsploGrPPapm-0-83acf1b397488a94ff0865d21f296f9d)
图2.24 平面上一点向直线投影
如图2.25所示,平面上多点投影到同一条直线上,获得一系列投影线段。当直线截距和斜率不断变化时,这些投影线段之和不断变化。可以想象,某个直线截距和斜率组合让投影线段和最小。以上思路即主成分分析和主成分回归核心。本书后面会展开讲解这两种重要分析方法。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P77_3712266.jpg?sign=1739450333-vVqxLeWj4Y7NT7Msd9CkcLTVMy1WvgYq-0-7ea24ab082e69c843b14a4558592eee0)
图2.25 平面上多点向直线投影
以下代码可完成图2.24和图2.25计算和绘图,还绘制出空间多点向空间直线投影图像。
B4_Ch1_4.m clc; close all; clear all v = [1;1/2]; center = [0,1]; t = -2:0.25:10; x = v(1)*t + center(1); y = v(2)*t + center(2); X = [0, 0; 1, 5; 2, -2; 4, 6; 6, 0; 8, -1;]; X_c = X - center; b = X_c*v/(v'*v); X_h = b*v'; X_h = X_h + center; fig_i = 1; figure(fig_i) fig_i = fig_i + 1; plot(x,y); hold on plot(X(4,1),X(4,2),'xb') vectors = [x',y'] - [X(4,1),X(4,2)]; h = quiver(X(4,1)+0*vectors(:,1),X(4,2)+0*vectors(:,1)... ,vectors(:,1),vectors(:,2),'k'); h.ShowArrowHead = 'off'; h.AutoScale = 'off'; daspect([1,1,1]) box off; grid off figure(fig_i) fig_i = fig_i + 1; subplot(2,1,1) vector_length = vecnorm(vectors,2,2); plot(x,vector_length) ylim([0,9]); box off subplot(2,1,2) vector_length = vecnorm(vectors,2,2); plot(x,vector_length.^2) box off figure(fig_i) fig_i = fig_i + 1; plot(x,y); hold on plot(X(:,1),X(:,2),'xb') plot(X_h(:,1),X_h(:,2),'xr') plot([X(:,1),X_h(:,1)]',[X(:,2),X_h(:,2)]','k') daspect([1,1,1]) box off; grid off %% 3D, project points to a line in space v = [1;1/2;2]; center = [0,1,2]; t = -2:1:4; x = v(1)*t + center(1); y = v(2)*t + center(2); z = v(3)*t + center(3); X = [0, 0, 0; 1, 5, 2; 2, -2, 5; 4, 6, -1; 6, 0, 3; 8, -1, 1;]; X_c = X - center; b = X_c*v/(v'*v); X_h = b*v'; X_h = X_h + center; figure(fig_i) fig_i = fig_i + 1; plot3(x,y,z); hold on plot3(X(:,1),X(:,2),X(:,3),'xb') plot3(X_h(:,1),X_h(:,2),X_h(:,3),'xr') plot3([X(:,1),X_h(:,1)]',[X(:,2),X_h(:,2)]',[X(:,3),X_h(:,3)]','k') daspect([1,1,1]) box off; grid off
有了以上向量投影和点投影基础,下面讨论数据投影、特征值分解、SVD分解和Cholesky分解关系。图2.26展示原始数据X,X有2列[x1,x2],1000行,意味着X有两个维度x1和x2,1000个观察点。观察图2.26,发现x1和x2这两个维度概率分布几乎一致。经过处理,数据矩阵X已经列中心化。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P79_3712269.jpg?sign=1739450333-E2GO6x82wfKL90tyoPkiLzBtOU5PlKJP-0-6d15b30ea65572f8eff31bafdcf0c83a)
图2.26 原始数据X统计学特点
回忆丛书第三册数学部分矩阵旋转内容。如图2.27所示,数据矩阵X通过下式绕中心(0, 0)旋转15°得到数据Y。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P79_3712270.jpg?sign=1739450333-IEbAolwcK09o7yOybBvdZcCweXLYW7rR-0-90205f3e42abd391268fa75d29e3c3ce)
从另外一个角度来看,Z相当于X向v1和v2这两个向量投影得到结果,即:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P80_3712271.jpg?sign=1739450333-i1UvJSUKglrDx690NjrkZxNIhhiEwYQk-0-f28559992421577ff04073e275947a00)
其中,
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P80_3712272.jpg?sign=1739450333-TWPu8c9wtTAolVgW59RGo3vF36YC6DxP-0-d624d6d96a7ef039a78056748c940d65)
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P80_3712273.jpg?sign=1739450333-s40y0dnAXUjnhlZJ0XQcxHwuWLTkAThG-0-7ec00267adb818b23d605d8308368448)
图2.27 数据X顺时针旋转15°得到数据Z
通过下列简单计算,知道v1和v2这两个向量正交。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P80_3712275.jpg?sign=1739450333-At4IFIhSKzgn5rnitVgBH5QIrHjKRXpt-0-39612ecc3a23864e860aa8de615d2e32)
且v1和v2这两个向量为单位向量:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P80_3712276.jpg?sign=1739450333-MleiuC8rrTUKimf1Rhf8dvCMIRA86b2g-0-07c4b4a4ce7d08b093b47d6531f6b7e7)
观察V,发现如下等式成立:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P80_3712277.jpg?sign=1739450333-uKYwxGLIZnANrE4B0TQhh9hUpTQYaXdN-0-f2329d33c7f9dc3532112bf1d2f3a2f3)
X投影在任意正交坐标系中,该操作也常被称作基底转换(change of basis)。
图2.28展示从向量v1和v2角度观察数据分布情况。发现数据沿v2方向要更为密集,方差更小;沿v1方向更为松散,方差更大。由于数据已经中心化,矩阵Z第一列向量z1方差即投影距离平方和平均数。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P80_3712278.jpg?sign=1739450333-LNLAiObQD5auPq0gMIN4XvuTGUl8Tw0W-0-5d256fcd76e3e58e913692b311cdad88)
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P81_3712280.jpg?sign=1739450333-IncbREhaD0cTax6Fz1n9Pn3MoXviGSo7-0-dbe158bd2d5f277933c0083cc4278494)
图2.28 数据Z (X顺时针旋转15°)沿两个维度统计学特点
图2.29展示数据X顺时针旋转30°得到数据Z。如图2.30所示,发现数据Z沿v2方向变得更为集中,方差进步一步减小;沿v1方向数据变得更为松散,方差进一步增大。如图2.31所示,当旋转角度增大到45°时,图2.32告诉我们Z沿v2方向方差达到最小值,Z沿v1方向方差达到最大值;并且,Z两列数据z1和z2,相关性几乎为0。这种思路即PCA分析核心。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P81_3712282.jpg?sign=1739450333-y3daZXrEx7Ue3l1SxGzr5Y9aq1Nqwba7-0-d146686ad0d84496c6f932ec7c10a493)
图2.29 数据X顺时针旋转30°得到数据Z
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P81_3712283.jpg?sign=1739450333-snNwei2ApXztfF1SO7eXHsxCN9TZejLy-0-2e1d43b38b9f9915a112f7a7a28475ce)
图2.30 数据Z,X顺时针旋转30°,沿两个维度分布
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P82_3712284.jpg?sign=1739450333-5kzXwDKOcDaIdMefUqLJ3OXtevrC3Ip8-0-02cc2accb0818e38264ab76d31dd7eb1)
图2.31 数据X顺时针旋转45°得到数据Z
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P82_3712285.jpg?sign=1739450333-43Frfh83pNI2QxsndkBFxQ0dNGNal16b-0-ba87f473eb63a844c59f5eba581de0f4)
图2.32 数据Z,X顺时针旋转45°,沿两个维度分布
假设数据X已经中心化,因此X样本方差-协方差矩阵ΣX通过下式获得:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P82_3712287.jpg?sign=1739450333-OcqUr6KG7a1BqrTRwU6Jw8L07Oz3pud3-0-dd31387d7c58b1731fc522ceb6b01fbb)
其中,n为X行数,即观察点数量;注意,总体方差-协方差矩阵,分母为n。对ΣX进行特征值分解得到:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P82_3712288.jpg?sign=1739450333-tI12Sk0YmnUHWUJxyyFpblSJZ5EKw73Y-0-be22a78f9c8366a7804acbc4cc546a37)
其中,V列向量为特征向量,Λ主对角线元素为特征值。因为ΣX为对称矩阵。因此V列向量相互垂直。
同理,计算数据Z方差-协方差矩阵ΣZ,并得到ΣZ和ΣX关系:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P83_3712289.jpg?sign=1739450333-x0j0iaMIXTNYDWPvA1ex2cCe2rc4aG4a-0-cd125254f5a93c4a6c3da0cff998bf4a)
而对X进行SVD分解,得到:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P83_3712290.jpg?sign=1739450333-bojrc5wQNPS89Vivq12oR0hUb4zhHsVC-0-eb86c244f30d61fe08a4cecc18e572be)
其中:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P83_3712292.jpg?sign=1739450333-KaibH6T6n2ILSIo6S6OxcIxWcuWJA9QA-0-c11d50b57980640f0c49a34c15085533)
XTX通过下式获得:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P83_3712294.jpg?sign=1739450333-bwDmi2t4yUJ2IBUoXGSSmWa7qF11xpBm-0-f30768b48d387a3fdc5b56d90054fb19)
观察ΣX特征值分解和X的SVD分解结果,容易得到以下结论:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P83_3712295.jpg?sign=1739450333-lcohIoVrQg5zpGyALSn6hPwCNsqdaiPU-0-6484be131693b119d3b554905d6160f6)
丛书第二册随机运动内容介绍过,通过Cholesky分解得到上三角矩阵,将相关性系数为0、服从正态分布多元随机数转化为服从一定相关性随机数数据。对ΣX进行Cholesky分解,获得如下等式关系:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P83_3712296.jpg?sign=1739450333-dUDprD9qlUwpqiwVnzK5UKMgfjT1fExg-0-3ac5a22243b19bf2816022a73d15370f)
L为下三角矩阵。回忆丛书第三册介绍的矩阵转化内容,发现V对应旋转操作,对应缩放操作。对ΣX进行Cholesky分解,获得下式:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P83_3712297.jpg?sign=1739450333-tCyPF2XKYxkf4VU4LJLdlG7XMkfFmWZC-0-ed76bf98c42cf5379683e8cce92b53e2)
其中,为R上三角矩阵。
若Y = [y1, y2] 为服从相关性系数为0标准正态分布(均值为0,方差为1)二元随机数矩阵。那么下式获得图2.26中数据矩阵X:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P83_3712300.jpg?sign=1739450333-sXT4Dr1bGiSZgERE0tWaOQVniDjcoDm0-0-a3ed3a146bf72fb07eb7c1bd618a8a93)
下式验证X方差-协方差矩阵为ΣX:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P83_3712301.jpg?sign=1739450333-EXv9w5KcNHwWf42JPMv5bmxVmcoU850K-0-1fc76880f386c13f3ec07a63a525dded)
数据Z通过R (先缩放,后旋转VT)获得数据X。数据Y 和数据X相互转换关系如图2.33所示。而SVD分解实际上也是矩阵转化,U和V矩阵都对应旋转,而S对应缩放。对矩阵转化不太熟悉读者,参考丛书第三册数学部分内容。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P84_3712304.jpg?sign=1739450333-ThYhvCDGihncwBT9hShYx3mAsTHf7Pj9-0-905ceb70706e98bc48658cba6d7a7502)
图2.33 数据Y 和数据X相互转换
顺着上述思路,我们可以把多元正态分布(multivariate normal distribution)收纳到以投影为核心知识网络中来。丛书第三册第2章介绍多元正态分布概率密度函数矩阵表达式,如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P84_3712305.jpg?sign=1739450333-e1VPKby0KMKXVxQrn0pCFUHGE0JBKgK3-0-abcf2d2934fc43551b955d9a861a307a)
其中,X =(x1, x2, …, xq),代表服从多元正态分布随机数据矩阵,每一维度随机数为列向量(如图2.12所示);x为行向量,代表一个观察点;μX 同样为行向量,具体形式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P84_3712306.jpg?sign=1739450333-dD1ZaXnhhO3HF27iWVJBlYZPEMKn0ZoH-0-3d3d991014315373ba391a78d441b314)
观察多元正态分布矩阵表达式,发现如下看似熟悉的式子:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P84_3712307.jpg?sign=1739450333-Znl2JoU6KFVLJxr5YR5fMlFpVyW7Bsf5-0-036a76df9d19145debee957d22d4e3a4)
将上式中ΣX替换为Cholesky分解式,得到下式:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P84_3712308.jpg?sign=1739450333-MXLz1VDLsyjD9IGPHPf5k4cFPsc1WSiZ-0-51d9541c4b1b4de0e87148402b1aef72)
发现上式在图2.33旋转(V)和缩放()操作之前加了一个中心平移操作(x−μX)。由此,得到x和y关系:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P85_3712312.jpg?sign=1739450333-EgcZeBO27s2Xe0USA2i6IIkyJv1C5Fd6-0-3e4e0e9dcda9042097e69b82011ffef0)
以上操作正是丛书第三册第2章中讨论椭圆变形过程,如图2.34所示。
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P85_3712313.jpg?sign=1739450333-sS88sdn0SUgtE6nnLo3u4gKz7UMAxgLT-0-c5e937934208593e71af8c66ca8ddea1)
图2.34 椭圆变形过程 (来自丛书第三册第2章)
若不考虑缩放步骤,即仅仅用旋转和平移构造y:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P85_3712315.jpg?sign=1739450333-Q82oPSJOFLB7KPIhCgTvmPyRiZjrKOA8-0-fe16006886e05303b797973131e23e26)
得到下式:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P85_3712316.jpg?sign=1739450333-G7Z4qqGN1TAFRdxrf3qwS0RWQUlzdnN7-0-78b55a10695d890b292c4fd35e51ed07)
上式取任意正数定值代表着一个多维空间椭球体。如当q = 2时,得到平面内椭圆表达式:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P86_3712317.jpg?sign=1739450333-5dRrRBBWCSIzPq5C2AZ7MFCiiFJ06BQo-0-57a74859655d31cc28d69bd203309f84)
其中,c为任何大于0常数。
本书后面将详细介绍更多有关椭圆和其他双曲线内容。此外,若多元正态分布随机数据矩阵采用X =(x1, x2, …, xq)T 形式,即每一维度随机数为行向量,观察点x为列向量。则多元正态分布概率密度函数矩阵表达式如下:
![](https://epubservercos.yuewen.com/745BB7/19549640201517806/epubprivate/OEBPS/Images/Figure-P86_3712318.jpg?sign=1739450333-RTWKn0yv4uRtF8BhSC3PYC3PTq2gnpNa-0-b74ac4aa6b4cab9d7faab7e05b41f71e)
以下代码获得图2.26~图2.33,并且获得特征值分解、SVD分解、PCA分析和Cholesky分解之间关系。
B4_Ch1_5.m clc; clear all; close all corr_rho = cos(pi/6); SIGMA = 3*[1,0;0,1]*[1,corr_rho;corr_rho,1]*[1,0;0,1]; num = 1000; rng('default') X = mvnrnd([0,0],SIGMA,num); % R = chol(SIGMA) % X = mvnrnd([0,0],[1,0;0,1],num); % X = X*R; X = X - mean(X); theta = pi*1/12*3; v1 = [cos(theta); sin(theta)]; v2 = [-sin(theta); cos(theta)]; V = [v1,v2]; figure(1) plot(X(:,1),X(:,2),'.'); hold on daspect([1,1,1]) xlim([-8,8]); ylim([-8,8]); xlabel('x_1'); ylabel('x_2') h = quiver(0,0,v1(1),v1(2)); h.AutoScaleFactor = 3; h = quiver(0,0,v2(1),v2(2)); h.AutoScaleFactor = 3; hAxis = gca; hAxis.XAxisLocation = 'origin'; hAxis.YAxisLocation = 'origin'; box off axes_x = [-8, 0; 8, 0;]*V; axes_y = [0, 8; 0, -8;]*V; Z = X*V; figure(2) plot(Z(:,1),Z(:,2),'.'); hold on plot(axes_x(:,1)',axes_x(:,2)','k') plot(axes_y(:,1)',axes_y(:,2)','k') daspect([1,1,1]) xlim([-8,8]); ylim([-8,8]); xlabel('y_1'); ylabel('y_2') hAxis = gca; hAxis.XAxisLocation = 'origin'; hAxis.YAxisLocation = 'origin'; box off h = quiver(0,0,1,0); h.AutoScaleFactor = 3; h = quiver(0,0,0,1); h.AutoScaleFactor = 3; edges = [-8:0.4:8]; figure(3) subplot(2,1,1) histogram(Z(:,1),edges,'Normalization','probability') xlim([-8,8]); ylim([0,0.35]) ylabel('Probability'); xlabel('y2') box off; grid off subplot(2,1,2) histogram(Z(:,2),edges,'Normalization','probability') xlim([-8,8]); ylim([0,0.35]) ylabel('Probability'); xlabel('y2') box off; grid off SIGMA_Z = cov(Z); figure(4) heatmapHandle = heatmap(SIGMA_Z); caxis(heatmapHandle,[0 6]); %% Conversions [n,~] = size(X); % n, number of observations SIGMA = (X.'*X)/(n-1) cov(X) [V_eig,LAMBDA] = eig(SIGMA) [U,S,V_svd] = svd(X); S([1,2],:) S([1,2],:).^2/(n-1) [coeff,score,latent] = pca(X); % coeff, V % score, Z % latent, lambda figure(5) subplot(1,2,1) plot(X(:,1),X(:,2),'.'); hold on daspect([1,1,1]) xlim([-8,8]); ylim([-8,8]); xlabel('x_1'); ylabel('x_2') h = quiver(0,0,coeff(1,1),coeff(2,1)); h.AutoScaleFactor = 3; h = quiver(0,0,coeff(1,2),coeff(2,2)); h.AutoScaleFactor = 3; hAxis = gca; hAxis.XAxisLocation = 'origin'; hAxis.YAxisLocation = 'origin'; box off subplot(1,2,2) plot(score(:,1),score(:,2),'.'); hold on daspect([1,1,1]) xlim([-8,8]); ylim([-8,8]); xlabel('z_1'); ylabel('z_2') hAxis = gca; hAxis.XAxisLocation = 'origin'; hAxis.YAxisLocation = 'origin'; box off R = chol(SIGMA) % X = mvnrnd([0,0],[1,0;0,1],num); % X = X*R; Z = X*R^(-1); cov(Z) figure(5) subplot(1,2,1) plot(X(:,1),X(:,2),'.'); hold on daspect([1,1,1]) xlim([-8,8]); ylim([-8,8]); xlabel('x_1'); ylabel('x_2') h = quiver(0,0,v1(1),v1(2)); h.AutoScaleFactor = 3; h = quiver(0,0,v2(1),v2(2)); h.AutoScaleFactor = 3; hAxis = gca; hAxis.XAxisLocation = 'origin'; hAxis. YAxisLocation = 'origin'; box off subplot(1,2,2) plot(Z(:,1),Z(:,2),'.'); hold on daspect([1,1,1]) xlim([-8,8]); ylim([-8,8]); xlabel('z_1'); ylabel('z_2') hAxis = gca; hAxis.XAxisLocation = 'origin'; hAxis.YAxisLocation = 'origin'; box off