clc, clear % 清除界面 clear the windows
imp_fac = importdata('Factors.CSV'); % import data
factors = imp_fac.data; % 将imp_fac中的data命名为factors
imp_port = importdata('Portfolios.CSV'); % import data
ports = imp_port.data; % 将imp_port中的data命名为ports
time_range = (factors(:,1)>=196301 & factors(:,1)<=201911); % 选取特定时间内的factors
factors = factors(time_range,:); % 同上
ports = ports(time_range,:); % 选取特定时间内的ports
%%%%
T = size(ports, 1); % 将ports的行数记为T
M = size(ports, 2) - 1; % 将ports的列数-1记为T
K = 3;
%%%%
% Average excess return
rf = factors(:,5); % factors的第5列
excess_rtn = ports(:,2:end) - rf; % ports的第2至最后一列都减去rf
avg_ex_rtn = mean(excess_rtn, 1); % 求均值
% alpha
alpha = nan(25, 1); % 初始化alpha
t_alpha = nan(25, 1); % 和上一行类似
beta = nan(25, 1); % 和上一行类似
pred = alpha; % 将alpha赋给pred
for i = 1:25
reg = fitlm(factors(:,2),excess_rtn(:,i));
alpha(i) = reg.Coefficients.Estimate(1);
t_alpha(i) = reg.Coefficients.tStat(1);
beta(i) = reg.Coefficients.Estimate(2);
pred(i) = mean(reg.Fitted);
end
% 上面的循环是将factors的第二列作为dependent variable依次和excess_rtn的每列作regression
% 提取出alpha alpha的t值 beta 还有拟合值
% pred = nan(25, 1);
% for i = 1:25
% pred(i) = mean(alpha(i)+excess_rtn(:,i).*beta(i));
% end
scatter(pred, avg_ex_rtn');
xlabel('pred.rtn')
ylabel('avg.ex.rtn')
alpha_ff3 = nan(25, 1);
t_alpha_ff3 = nan(25, 1);
b = nan(25, 1);
pred_ff3 = nan(25, 1);
h = b;
s = b;
for i = 1:25
reg = fitlm(factors(:,2:4),excess_rtn(:,i));
alpha_ff3(i) = reg.Coefficients.Estimate(1);
t_alpha_ff3(i) = reg.Coefficients.tStat(1);
b(i) = reg.Coefficients.Estimate(2);
h(i) = reg.Coefficients.Estimate(4);
s(i) = reg.Coefficients.Estimate(3);
pred_ff3(i) = mean(reg.Fitted);
end
% Cross-sectional regression
cs_reg = fitlm([b h s], avg_ex_rtn');