matlab - 矩阵接近奇异或严重缩放的投资组合排序
问题描述
我正在尝试对 3 个大小的投资组合进行排序并执行 2 阶段 Fama Macbeth 回归,其中 LHS 的超额投资组合回报和 RHS 的 FF3 因子。
问题是我从 2 阶段回归中收到一条错误消息,指出“矩阵接近奇异或缩放不良。结果可能不准确”。如果我只使用一些随机数或我的实际数据,我会得到这个错误,所以我怀疑我对投资组合进行排序的方式存在错误。
我在代码的最后一行得到了错误。具体来说,在“XSReg”中。这是“XSReg”的链接:http ://www.julianthimme.de/code
有人可能会看到我在哪里弄乱了投资组合排序吗?
下面的代码只使用了一些随机数据
clear all
clc
%% Setting up data
RET=[1 1 1 1; 2 2 2 2; 2 2 2 2; 3 3 3 3;3.5 3.3 3.4 3.6];
MEQ=[100 150 200 300;100 150 200 300;100 150 200 300;100 150 200 300;10 150 250 100];
SMB=[10; 4; 4; 5;6];
HML=[2; 3; 4; -1;-2];
market_ret=[10; 4; 4; 5;6];
rf=[0.10; 0.4; 0.4; 0.5;0.6];
T=length(RET);
nAss=size(RET,2);
%%Calculating breakpoints
nPort=3; %Nr of portfolios
Breakpoint=NaN(T,nPort-1);
for i=1:T; %Setting the breakpoints
Breakpoint(i,:)= quantile(MEQ(i,:),nPort-1);
end
%%Assigning returns & market equity to matrixes based on breakpoints
h_meq=NaN(T,nAss);
m_meq=NaN(T,nAss);
l_meq=NaN(T,nAss);
h_ret=NaN(T,nAss);
m_ret=NaN(T,nAss);
l_ret=NaN(T,nAss);
for i=1:T;
for k=1:nAss;
if MEQ(i,k)>=Breakpoint(i,2);
h_meq(i,k)=MEQ(i,k);
h_ret(i,k)=RET(i,k);
end
if MEQ(i,k)<Breakpoint(i,2) & MEQ(i,k)>Breakpoint(i,1);
m_meq(i,k)=MEQ(i,k);
m_ret(i,k)=RET(i,k);
end
if MEQ(i,k)<=Breakpoint(i,1);
l_meq(i,k)=MEQ(i,k);
l_ret(i,k)=RET(i,k);
end
end
end
%%Calculating the weighted return
for i=1:T
for k=1:nAss;
w_ret_h(i,k)=h_ret(i,k)*(h_meq(i,k)/nansum(h_meq(i,k)));
w_ret_m(i,k)=m_ret(i,k)*(m_meq(i,k)/nansum(m_meq(i,k)));
w_ret_l(i,k)=l_ret(i,k)*(l_meq(i,k)/nansum(l_meq(i,k)));
end
end
%%Summing up to get portfolio returns
VWport=NaN(T,nPort);
for i=1:T
VWport(i,1)=nansum(w_ret_l(i,:));
VWport(i,2)=nansum(w_ret_m(i,:));
VWport(i,3)=nansum(w_ret_h(i,:));
end
ExcessVWport=VWport-rf;
%%2stage Fama Macbeth regression
factors=[excessmkt SMB HML];
returns=ExcessVWport;
[lambda, tlambda, R2adj, RMSE, alpha, talpha, beta, tbeta, GRS, pval, vcv]=XSReg(returns, factors, 1, 1, [], 2, 'HACC_B');
解决方案
推荐阅读
- ruby-on-rails - 将 group_by 与 gem 一起使用时,我的控制器代码中的哪些内容不正确?
- entity-framework-6 - 何时以及为何插入实体及其关系实体引用
- java - 错误:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)”
- python - 如何在 python 中自动接受用于 plink 的 ssh 密钥?
- javascript - 单击按钮时提供新项目
- marklogic - MarkLogic 词干基础
- jenkins - Jenkins Pipeline 在用户指定的代理上构建作业
- javascript - 我想在提交俱乐部表单时更新我的用户列表,该表单会自动创建俱乐部管理员,而俱乐部管理员又是 activeadmin 中的用户
- java - 无法在 Java Web 应用程序中保存 Firebase 实时数据库数据
- python - 使用 sudo 时导入模块失败