0% found this document useful (0 votes)
1K views

Ffcode

Uploaded by

api-240417748
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views

Ffcode

Uploaded by

api-240417748
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

%Data Description

%Data saved in the file Data.mat, obtained from French Library


%2 Matrices:
%Factors Matrix contains data of three factors 196001:201212,
%Order is RM,SMB,HML,Rf,operation is needed to create excess return.
%Return matrix has 25 columns representing 25 portforlios sorted by
%market cap and book to market ratio.
%Order is Small size(low to high) to Big size(low to high)
clc;clear;load Data.mat;
%%Problem 1
Str = {'intercept';'smb';'hml';'excess'};
[m,n] = size(Return);
%create excess return
R_excess = Factors(:,1);
%create OLS's X
X = [ones(m,1),Factors(:,2:3),R_excess];
%Do regression on 25 portforlios
%initializations
beta = zeros(n,4);
tScore = zeros(n,4);
rsquare = zeros(n,1);
std_return = zeros(n,1);
Y = zeros(m,n);
resid = zeros(m,n);
u = zeros(m,n);
%beta is a coefficient matrix. order is intercept,smb,hml,excess return,
%top to bottom: Small size(low to high) to Big size(low to high)
for i = 1:n
Y(:,i) = Return(:,i) - Factors(:,4);
beta(i,1:4) = (X'*X)^(-1)*X'*Y(:,i);
inver = (X'*X)^(-1);
resid(:,i) = Y(:,i)- X * beta(i,:)';
u(:,i) = resid(:,i);
rsquare(i) = 1 - var(resid(:,i))/var(Y(:,i));
std_return(i) = std(resid(:,i));
for j = 1: 4
tScore(i,j) = beta(i,j)/sqrt(1/m*u(:,i)'*u(:,i)*inver(j,j));
end
end
% for j = 2:4
% disp(Str(j))
% fprintf('%.4f %.4f %.4f %.4f %.4f\n',beta(:,j))
% fprintf(' t-value\n\n')
% fprintf('%.4f %.4f %.4f %.4f %.4f\n',tScore(:,j))
% end
% disp('R square')
% fprintf('%.4f %.4f %.4f %.4f %.4f\n',rsquare)
% disp('standard error')
% fprintf('%.4f %.4f %.4f %.4f %.4f\n',rsquare)
%Comment
%Everything stays the same;
%% Problem 2
%construct the covariance matrix
covResid = resid'*resid/(m-3-1);
%construct the factor portfolio matrix
fmean(1,1:3) = mean(X(:,2:4));
factorMean = zeros(m,3);
for i = 1:m
factorMean(i,1:3) = fmean;
end
factorPo = X(:,2:4);
sigma = 1/m * ((factorPo - factorMean)' * (factorPo - factorMean));
%it follows F distribution F(25,608)
GRS = (m/25)*(m-25-3)/(m-3-1)*beta(:,1)'*covResid^(-1)*beta(:,1)/(1+fmean*sigma^
(-1)*fmean');
%Comment
%GRS score is 3.0136, for .05 significant value is slightly greater 1, so
%the GRS score is greater significantly which says we will reject the model
%and say alpha is not jointly zero
%% Problem 3: HAC newey west
%Comment: the problem asks to do t test, however, for a standard t test, a
%square root of chi square distribution is needed for denominator and
%I can't prove (HAC standard error)/(sigma square)/(n-k) follows chi square
%distribution, I will just assume it's true here.
tScore_HAC = zeros(25,1);
for i = 1:n
% Initialization
S = zeros(1,1);
% q Specifies the Maximum Number of Lags to Use
q = 10;

% This is Just the Variance-Covariance Matrix
S = S + autocov(0,u(:,i),m);
% This Following is the Adjustment for Autocorrelation and
% Heteroskedasticy
for v = 1:q
Gv = autocov(v,u(:,i),m); % Call function 'autoc' that computes k-th ord
er covariance matrix
S = S + (1-(v/(q+1)))*(Gv+Gv');
clear Gv
end
inver = (X'*X)^(-1);
for j = 1:4
tScore_HAC(i,j) = beta(i,j)/sqrt(S*inver(j,j));
end
end
%%
%Problem 4
mr = X(:,2:4); % market return
f1 = X(:,2);
f2 = X(:,3);
f3 = X(:,4);
T = length(mr);
const = ones(T,1);
x = [const,mr]; % RHS variables
[m,k] = size(x);
e_store = []; % Stores OLS residuals
ef_store = []; % Stores residuals from second moment condition E(fe)=0
ef2_store = [];
ef3_store = [];
b_store = []; % Stores estimates
for j = 1:25
% Time-Series Regressions, Decile-by-Decile
y = Y(:,j);
b = x\y; % OLS estimates
e = y - x*b; % Calculates residuals
ef = u(:,j).*mr(:,1); % For second moment matrix
ef2 = u(:,j).*mr(:,2);
ef3 = u(:,j).*mr(:,3);
% Stores estimates, residuals, etc. in a BIG matrix for all regressions
e_store = [e_store,e];
ef_store = [ef_store,ef];
ef2_store = [ef2_store,ef2];
ef3_store = [ef3_store,ef3];
b_store = [b_store,b];
% Calculates Standard Errors
[se, sigma] = leastsquares_se(e,x,m,k);
% Calculates t-statistics and stores in BIG matrix
stat = b(1)/se(1);
statvec(j) = stat;
% Displays Estimates and Standard Errors
end
u = [e_store,ef_store,ef2_store,ef3_store];
Sig = zeros(100,100);
q = 5;
Sig = Sig + autocov(0,u,T);
for i = 1:q
Gv = autocov(i,u,T);
Sig = Sig + (1-(i/(q+1)))*(Gv+Gv');
clear Gv
end
A = [1, mean(f1),mean(f2),mean(f3);
mean(f1),mean(f1.^2),mean(f1.*f2),mean(f1.*f3);
mean(f2),mean(f2.*f1),mean(f2.^2),mean(f2.*f3);
mean(f3),mean(f3.*f1),mean(f3.*f2),mean(f3.*f3)];
I = eye(25,25);
d = -kron(A,I);
V = inv(T)*inv(d)*Sig*(inv(d))';
stat = b_store(1,:)*inv(V(1:25,1:25))*b_store(1,:)';
%% Problem 5
%Plot 2 plots
%actual excess return
actual = mean(Y);
%predicted excess return
pred = mean(X(:,2:4)) * beta(:,2:4)';
type = {'-x','-o','-+','-*','-s'};
ltype = num2str(cell2mat(type));
figure
hold on
for k = 1:5
plot(pred([k,k+5,k+10,k+15,k+20]),actual([k,k+5,k+10,k+15,k+20]),strcat(ltyp
e(2*k-1),ltype(2*k)))
end
%do the same thing for period 2007:08 to 2010:01
actual2 = mean(Y(572:601,:));
pred2 = mean(X(572:601,2:4)) * beta(:,2:4)';
type2 = {'-x','-o','-+','-*','-s'};
ltype2 = num2str(cell2mat(type2));
figure
hold on
for k = 1:5
plot(pred2([k,k+5,k+10,k+15,k+20]),actual2([k,k+5,k+10,k+15,k+20]),strcat(lt
ype2(2*k-1),ltype2(2*k)))
end
hold off
%Now the plot is a total mess
%% Problem 6
% First, when we use excess returns, the model should predict a zero
% intercept, but even after we use the joint test on alphas, still it is not
% zero. So the model fails.
% Second, the model is unstable across the time, for the period from 2007 to
% 2010, the prediction can't match the actual data. This suggests that for a
% relatively long(4 years) period, the model fails to predict. So using this
% model could hurt investors.
% Third, although r square is mathmatically big, above 0.9, this cannot
% explain the variation well and did a poor job in predicting.
%% Problem 7
actual2 = mean(Y(577:588,:));
pred2 = mean(X(577:588,2:4)) * beta(:,2:4)';
type2 = {'-x','-o','-+','-*','-s'};
ltype2 = num2str(cell2mat(type2));
% figure
% hold on
% for k = 1:5
% plot(pred2([k,k+5,k+10,k+15,k+20]),actual2([k,k+5,k+10,k+15,k+20]),strcat(
ltype2(2*k-1),ltype2(2*k)))
% end
% hold off
YY = zeros(60,n);
XX = X(577:636,:);
for i = 1:n
YY(:,i) = Y(577:636,i);
betaB(i,1:4) = (XX'*XX)^(-1)*XX'*YY(:,i);
inver = (XX'*XX)^(-1);
residR(:,i) = YY(:,i)- XX * betaB(i,:)';
uu(:,i) = residR(:,i);
rsquareS(i) = 1 - var(residR(:,i))/var(YY(:,i));
std_return(i) = std(residR(:,i));
for j = 1: 4
tScoreT(i,j) = betaB(i,j)/sqrt(1/m*uu(:,i)'*uu(:,i)*inver(j,j));
end
end
%Running the test with data from 1980:01 to 2012:12 shows that size effect
%is significant for 24/25 portfolios. Only one beta on SMB is not
%significant. Since what Fama-French(1992) did was a regression on ME and
%book/ME, showing that it's weaker for the time period of 1977 to 1991.
%However, I think the result is not very convincing due to the
%multicolinearity problem. And our regression shows SMB still performs well
%in explaining.

You might also like