因子主成分分析,因子载荷矩阵、因子解释度 因子得分-在基金净值和主要金融因子分析上的应用

以一个基金的净值序列,名字pfh31, 在7个主要因子的 归因分析 为例子 ,进行 因子分析。
里面包括 主成分分析,因子载荷矩阵、因子解释度 因子得分,拟合、回归,matlab 实现。cdns的资源积分越来越贵,参考以上 慎重择需下载吧,哈哈,虽然我巴不得呢。

感觉自己几天 不说话了,头大,想明白呢,哈哈在明天周会 上嘚瑟嘚瑟。
我看 代码不多,还有模板,大概想嘚瑟出新高度 还是不大容易的。
尤其是 有位小兄弟清华的用来吓人的,会的多点, 讲不清楚忽悠不住哈哈。

抓一个 这个兄,同事,没征得同意瞎写还是不用名字的好哈哈,Lwb吧。赶紧复习下 因子正交化、主成分,特征值、特征向量 ,谁让老人家在数学-线性变化上是一绝呢。

哈哈。实践实践加深下印象,忽悠以防会上hold不住那帮问题 来自个各方的像个妖怪哈哈。 另一位听了,笑原来你先从Lwb那里现学是为了卖给我们啊,哈哈,必须的,还是前天学后天就卖,笑。不要告诉他老人家,虽有自己想明白有点兴趣,但是再说了不给你们讲 哪有这么大的劲弄这些 好像据说有点晦涩的玩意呢。
为了方便,或者你确实没时间 源码: https://545c.com/file/24889670-436468312先运行看看结果,然后 看下 后面分析吧:
下面是我自己弄的时候步骤,当然有的 朋友水平
、原有知识点可能不一样,您就跳着看看吧:
内容说明:
主要关于:线性代数,矩阵、回归、特征值,特征向量,方阵分解,正交单位阵,相关系数,聚类分析,主成分分析,正交化,矩阵旋转和matlab的这几个东西初级应用,酌情下载吧。
如果矩阵陌生可以看下 网上大侠的《新矩阵理解》 文章,很有涵养,很具体,用词很节制,但很清晰明了,可以颠覆大部分学校线性代数的 教学模式。100个推荐,定会给您老人家打开一个新世界。

说说具体应用吧。
此篇代码注释想必应该算清楚的,自己运行理解下吧。事不大,当时我感觉基本涵盖了金融数学交界处部分常用的理解。
对了代码看着很长其实只有千109行有用,并且注释占去了一半以上,并且回车行又占去了一半,同时部分的函数参数为了直观还专门用了一行先赋值了,并且。。。
总之 有用的没几行,剩下都是辅助理解,耐心看下就一定会明白的,不要被我这里一篇直接吓倒。

% https://www.cnblogs.com/TreeDream/p/8337791.html

% 平方和净值 和7大主要因子的分析
% y = gjxy(:,1);存的是平方和的净值
% x = gjxy(:,[2:8]);存的是7个因子

% 得因子分析法的回归方程:
% 至此因子分析的5个步骤就全部完成了,也完成了变量内部联系的分析,和总体的一个评估,最后回忆一下过程:
% 数据标准化
% 相关系数矩阵
% 载荷矩阵
% 因子旋转
% 因子得分

%%
% 聚类分析 得到留下的几个因子

clc,clear;
gjxy = load('gjxy.txt');
a= gjxy(:,[2:end]);
h= juleifenxiR(a)
% 从结果看可以剔除掉 3和4 因子,剩下5个因子作主成分分析。

%%   
clc,clear;
load gjxy.txt
x = gjxy(:,[2,3,6:end]);%选择剔除后的5个因子 (剔除3和4因子)
y = gjxy(:,1);%这是净值序列,被解释变量
n = size(x,1);%因子维度
%% 数据标准化 求相关系数矩阵
%% 
x = zscore(x);%标准化
r = corrcoef(x);%相关系数
%%  进行主成分分析的相关计算,求旋转后的载荷矩阵
%% 
% 利用相关系数矩阵进行主成分分析
% vec1 的列是 r 的特向量,即主成分系数
% lamda 为 r 的特征值
% rate  为各个主成分的贡献率

% 利用相关系数矩阵进行主成分分析
% vec1 的列是 r 的特向量,即主成分系数
% val 为 r 的特征值
% con1  为各个主成分的贡献率
[vec1,val,con1] = pcacov(r);
f1 = repmat(sign(sum(vec1)),size(vec1,1),1);

vec2 = vec1.*f1;
f2 = repmat(sqrt(val)',size(vec2,1),1); %构造与vec1同维数的元素为±1的矩阵 
a = vec2.*f2;%修改特征向量的正负号,使得每个特征向量的分量和为正
% 提出num个主因子的载荷矩阵

num =size(a,2)-1;%保留前num个公因子
am = a(:,[1:num]);
% 累积贡献率
con = cumsum(con1(1:num)); %到了96%的累计贡献
%% 因子旋转
%% 
% am 旋转变换,bm 为旋转后的载荷矩阵
[bm,t] = rotatefactors(am,'method','varimax');
% bt 前部分是旋转后的载荷矩阵  后部分为没有旋转的载荷矩阵
bt = [bm,a(:,[num+1:end])];
% 计算贡献因子
con2 = sum(bt.^2);% 列相加,这里为什么贡献因子con2这样求得的,从数理上me没想通,大神级别的留言吧。难道是代表该向量上长度?越大代表贡献越多?
% 可以查看一下旋转后的贡献率
check = [con1,con2'/sum(con2)*100];
% 旋转后的因子贡献率
rate = con2'/sum(con2)*100;
con2 = cumsum(rate(1:num)); %到了90%的累计贡献

%% 因子得分
%% 
% 计算得分函数的系数 %得分函数系数公式: F=x R逆*载荷矩阵
coef = inv(r)*bm;
% 计算各个因子得分
score = x*coef; 
%%
% 计算得分的权重
weight = rate/sum(rate); 
%% 求y 对公因子 F的依赖程度,用回归的方式求解和检验

% 最后一步,对 F 继续利用,分析和 y 的回归方程:
% 计算因子 F 与  y 的相关系数
[ccoef,p] = corrcoef([score,y]);
All=[score,[ones(n,1),y]];
[b,bint,r,rint,stats] = regress(y,[ones(n,1),score])
mdl=LinearModel.fit(score,y);
mdl.Coefficients;
%%
% 根据回归系数拟合得到y2,和原始的y比较:

y2=[b(1)+b(2)*score(:,1)+b(3)*score(:,2)+b(4)*score(:,3)+b(5)*score(:,4)]%regress回归曲线
figure
load dateNum7 dateNum7
load dateNum dateNum

plot(dateNum7,y2,'b') %regress回归曲线
hold on;
plot(dateNum7,y,'r') %净值 红色表示
hold on;
plot(dateNum7,r,'y') %残差 黄色表示

set(gca,'XTick',dateNum7) % 为了x数轴为日期形式,用了dateNum7 格式的date,别问我 为什么。怒对日期的处理化和很大比例,本来已经是在很多日期处理总结经验上的,不想说话
datetick('x','yy/mm/dd')
legend('regress回归曲线','原始数据','残差')

% legends=['regress回归曲线','原始数据','残差']
% plotDateX(dateNum7,y,legends)



%%  因子分析 回归分析  已经完了   下面是一些测试
%%  LinearModel 理解 例:
%% 
y=[143 145 146  147  149 150  153  154 155  156  157 158  159  160 162  164];
x=[88 85  88   91    92  93   93   95  96   98  97  96   98   99  100  102];
n=16;
X=[ones(n,1),x'];
[b,bint,r,rint,state]=regress(y',X,0.05);
mdl=LinearModel.fit(x',y');
figure
plot([80 110],[b(1)+b(2)*80 b(1)+b(2)*110],'b') %regress回归曲线
hold on;
mdl.plot; %LinearModel回归分析图,包原始数据散点图,回归曲线和置信区间
legend('regress回归曲线','原始数据','LinearModel回归曲线','置信区间','置信区间')

%% x数轴为日期   例:
%% 
startDate = datenum('07-10-2008')
endDate = datenum('11-31-2008')
xData = linspace(startDate,endDate,8);
plot(xData,rand(1,8)
set(gca,'XTick',xData)
datetick('x','mm/dd/yy','keepticks')%%这样就更像了

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

代码也在,里面的数据也在,有的博客写了文字,讲的也清楚,代码也在,就是没有留下数据,load 不到,呵呵。等于啥都实践不了。

鄙视之。弃之,遂找下个博文去,害的,太费事。
借鉴之,这里放上去。嘿嘿 但是你要花积分的。没办法本来不值钱的东西想随便1积分就行了,但是自己改不了,爱莫能助。你就下载吧,再说我也需要你的分下载别人的呢。

代码 数据 exce 打包下呢:

https://download.csdn.net/my

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值