# 导入数据集
load predata.mat
load FamaFrench5Factors.mat
# 杠杆率后置一格
stk_axis = unique(predata.PERMNO);
for i = 1 : length(stk_axis)
index_stk = find(predata.PERMNO == stk_axis(i));
databystk = predata(index_stk, : );
databystk.Lev = circshift(databystk.LeverageRatio, 1);
predata(index_stk, 2) = databystk( : , 2);
end
# 滚动分组, 计算平均杠杆率及回报率
time_axis = unique(predata.Date);
lev = [];
ret = [];
for i = 1 : length(time_axis) - 1
index_t = find(predata.Date == time_axis(i+1));
data_now = predata(index_t, : );
temp = table2array(data_now( : , 5));
a = prctile(temp, 20);
b = prctile(temp, 40);
c = prctile(temp, 60);
d = prctile(temp, 80);
tier1 = find(data_now.LeverageRatio < a);
tier2 = find(data_now.LeverageRatio >= a & data_now.LeverageRatio < b);
tier3 = find(data_now.LeverageRatio >= b & data_now.LeverageRatio < c);
tier4 = find(data_now.LeverageRatio >= c & data_now.LeverageRatio < d);
tier5 = find(data_now.LeverageRatio >= d);
L_tier1 = mean(table2array(data_now(tier1, 5)));
L_tier2 = mean(table2array(data_now(tier2, 5)));
L_tier3 = mean(table2array(data_now(tier3, 5)));
L_tier4 = mean(table2array(data_now(tier4, 5)));
L_tier5 = mean(table2array(data_now(tier5, 5)));
R_tier1 = mean(table2array(data_now(tier1, 4)));
R_tier2 = mean(table2array(data_now(tier2, 4)));
R_tier3 = mean(table2array(data_now(tier3, 4))); R_tier4 = mean(table2array(data_now(tier4, 4))); R_tier5 = mean(table2array(data_now(tier5, 4)));
lev(i, : ) = [L_tier1 L_tier2 L_tier3 L_tier4 L_tier5 ];
ret(i, : ) = [R_tier1 R_tier2 R_tier3 R_tier4 R_tier5 ];
end
# 计算超额回报率
Y_1 = ret( : , 1);
Y_2 = ret( : , 2);
Y_3 = ret( : , 3);
Y_4 = ret( : , 4);
Y_5 = ret( : , 5);
Y_1 = Y_1 - FamaFrench5Factors.Rf(2 : 360);
Y_2 = Y_2 - FamaFrench5Factors.Rf(2 : 360);
Y_3 = Y_3 - FamaFrench5Factors.Rf(2 : 360);
Y_4 = Y_4 - FamaFrench5Factors.Rf(2 : 360);
Y_5 = Y_5 - FamaFrench5Factors.Rf(2 : 360);
# 计算平均超额回报率及t值
mean_ret_1 = mean(Y_1);
mean_ret_2 = mean(Y_2);
mean_ret_3 = mean(Y_3);
mean_ret_4 = mean(Y_4);
mean_ret_5 = mean(Y_5);
mean_ret = [mean_ret_1 mean_ret_2 mean_ret_3 mean_ret_4 mean_ret_5];
[h1, p1, ci1, stats1] = ttest(Y_1);
[h2, p2, ci2, stats2] = ttest(Y_2);
[h3, p3, ci3, stats3] = ttest(Y_3);
[h4, p4, ci4, stats4] = ttest(Y_4);
[h5, p5, ci5, stats5] = ttest(Y_5);
[h, p, ci, stats] = ttest(Y_5 - Y_1);
# 计算平均杠杆率
L_1 = lev( : , 1);
L_2 = lev( : , 2);
L_3 = lev( : , 3);
L_4 = lev( : , 4);
L_5 = lev( : , 5);
mean_lev = [mean(L_1) mean(L_2) mean(L_3) mean(L_4) mean(L_5)];
# 计算市场(MM)模型的詹森阿尔法值及t值
X_MM = FamaFrench5Factors.MktRF(2 : 360);
stats_MM_1 = regstats(Y_1, X_MM, “linear”, “tstat”);
stats_MM_2 = regstats(Y_2, X_MM, “linear”, “tstat”);
stats_MM_3 = regstats(Y_3, X_MM, “linear”, “tstat”);
stats_MM_4 = regstats(Y_4, X_MM, “linear”, “tstat”);
stats_MM_5 = regstats(Y_5, X_MM, “linear”, “tstat”);
stats_a = regstats(Y_5 -Y_1, X_MM, “linear”, “tstat”);
# 计算FF3模型的詹森阿尔法值及t值
X_FF3 = [FamaFrench5Factors.MktRF(2 : 360) FamaFrench5Factors.SMB(2 : 360) FamaFrench5Factors.HML(2 : 360)];
stats_FF3_1 = regstats(Y_1, X_FF3, “linear”, “tstat”);
stats_FF3_2 = regstats(Y_2, X_FF3, “linear”, “tstat”);
stats_FF3_3 = regstats(Y_3, X_FF3, “linear”, “tstat”);
stats_FF3_4 = regstats(Y_4, X_FF3, “linear”, “tstat”);
stats_FF3_5 = regstats(Y_5, X_FF3, “linear”, “tstat”);
stats_a3 = regstats(Y_5 -Y_1, X_FF3, “linear”, “tstat”);
beta_all_FF3 = [stats_FF3_1.tstat.beta stats_FF3_2.tstat.beta stats_FF3_3.tstat.beta stats_FF3_4.tstat.beta stats_FF3_5.tstat.beta];
beta_FF3 = beta_all_FF3(2 : 4, : );
# 计算FF5模型的詹森阿尔法值及t值
X_FF5 = [FamaFrench5Factors.MktRF(2 : 360) FamaFrench5Factors.SMB(2 : 360) FamaFrench5Factors.HML(2 : 360) FamaFrench5Factors.RMW(2 : 360) FamaFrench5Factors.CMA(2 : 360)];
stats_FF5_1 = regstats(Y_1, X_FF5, “linear”, “tstat”);
stats_FF5_2 = regstats(Y_2, X_FF5, “linear”, “tstat”);
stats_FF5_3 = regstats(Y_3, X_FF5, “linear”, “tstat”);
stats_FF5_4 = regstats(Y_4, X_FF5, “linear”, “tstat”);
stats_FF5_5 = regstats(Y_5, X_FF5, “linear”, “tstat”);
stats_a5 = regstats(Y_5 -Y_1, X_FF5, “linear”, “tstat”);
beta_all_FF5 = [stats_FF5_1.tstat.beta stats_FF5_2.tstat.beta stats_FF5_3.tstat.beta stats_FF5_4.tstat.beta stats_FF5_5.tstat.beta];
beta_FF5 = beta_all_FF5(2 : 6, : );
# 计算横截面λ值
lambda_FF3 = inv(beta_FF3 * beta_FF3') * beta_FF3 * mean_ret';