程序代写 QUESTION 10

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This code computes GMM estimates of the Consumption-CAPM model
% We use data on 10 risky assets, 1 risk-free asset and consumption growth.
% The data are monthly observations.

Copyright By PowCoder代写 加微信 powcoder

% We estimate the parameters using GMM.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% clean the workspace
clear variables;
close all;

% load the data from excel file
data = readtable(‘ccapmmonthlydata.xls’);

% return data
returns = table2array(data(:,3:12));

% consumption growth data (c_{t+1} / c_{t})
cons_growth = table2array(data(:,2));

%%%%%%%%%%%%%%%%%
% QUESTION 3: first stage
%%%%%%%%%%%%%%%%%

% number of observations
T = length(cons_growth);
% number of assets
% number of parameters

% first-stage weigthing matrix (identity matrix)
W = eye(N);

% parameters used to initialize the optimization
para = [1;5];

% set options for fminsearch – notice that the display is off
options = optimset(‘Display’,’off’,’TolFun’,1e-5,’TolX’,1e-5);

% minimize the gmm criterion to find the parameters estimates

%%%%%%%%%%%%%%%%%%%%%
% QUESTION 4
%%%%%%%%%%%%%%%%%%%%

% evaluate the moment conditions at the optimal (first-stage) parameter values
m_opt = gmm_moment(para_opt,cons_growth,returns);

% compute the optimal weight matrix, using first-stage estimates
Phi_hat = zeros(N,N);
for i = 1:T
Phi_hat = Phi_hat + m_opt(i,:)’*m_opt(i,:)/T;
W_opt = inv(Phi_hat);

% set options for fminsearch – notice that the display is off
options = optimset(‘Display’,’off’,’TolFun’,1e-5,’TolX’,1e-5);

% Second-stage estimation

%%%%%%%%%%%%%%%%%%
% QUESTION 5
%%%%%%%%%%%%%%%%%%

% see pdf file

%%%%%%%%%%%%%%%%%%
% QUESTION 6
%%%%%%%%%%%%%%%%%%

% moment conditions evaluated at the second-stage estimates
m_opt2 = gmm_moment(para_opt2,cons_growth,returns);

% Compute optimal weight matrix using second-stage estimates
Phi_hat2 = zeros(N,N);
for i = 1:T
Phi_hat2 = Phi_hat2 + m_opt2(i,:)’*m_opt2(i,:)/T;

W_opt2 = inv(Phi_hat2); % Optimal weight matrix based on the optimal second-stage estimates

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ESTIMATING the LAMBDA_HAT matrix of derivatives
% method 1: use matlab symbolic functions
% method 2: take derivative by hand and plug into the matrix
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%
% METHOD 1
%%%%%%%%%%%%

% step (1): Define symbolic characters and the moments in symbolic terms
syms beta gamma
param = [beta;gamma];

m = zeros(T,N, ‘sym’);

% compute pricing errors for each asset and time period
m(:,i) = param(1)*(cons_growth(1:T)).^(-param(2)).*(1+returns(1:T,i)) -1;

% Step (2): compute the gradients in symbolic terms
gra = zeros(length(param), length(m(:,1)),N, ‘sym’);
for j=1:length(m(:,1))
gra(:,j,i)=gradient(m(j,i),[beta gamma]);

% initialize and compute matrix Lambda_hat
Gamma_hat = zeros(d, N, ‘sym’);
Gamma_hat(:,i) = mean(gra(:,:,i),2);

% transpose to have a N x d matrix
Gamma_hat = Gamma_hat’;

% step (3): replace the “symbolic” parameters with the second-stage estimates
Gamma_hat(i,:) = subs(Gamma_hat(i,:), [beta gamma], [para_opt2(1), para_opt2(2)]);

% step (4): go from symbolic gradients to numerical gradients
Gamma_hat = double(Gamma_hat);

% compute variance-covariance matrix for parameter estimates
var = (1/T)*inv(Gamma_hat’*W_opt2*Gamma_hat);

% variance is on the diagonal
var_diag = diag(var);
stderror = sqrt(var_diag);

% t-statistics
t_stats = para_opt2./stderror;

%%%%%%%%%%%%%%
% METHOD 2 (Notice how much easier this is …)
%%%%%%%%%%%%%%

% use derivatives directly in the loop
Lambda_hat_h = zeros(N,d);
Lambda_hat_h(i,1) = mean( (cons_growth(1:T).^(-para_opt2(2))).*(1+returns(1:T,i)) );
Lambda_hat_h(i,2) = mean(-para_opt2(1).*log(cons_growth(1:T)).*(cons_growth(1:T).^(-para_opt2(2))).*(1+returns(1:T,i)) );

% compute variance-covariance matrix for the parameter estimates
var_h = (1/T)*inv(Lambda_hat_h’*W_opt2*Lambda_hat_h);

% variance is on the diagonal
var_diag_h = diag(var_h);
stderror_h = sqrt(var_diag_h);

% t-statistics
t_stats_h = para_opt2./stderror_h;

% table for parameters and inference
table_estimates = table(para_opt,para_opt2,stderror,t_stats,stderror_h,t_stats_h,’VariableNames’,…
[“Stage1” “Stage2” “StdError” “t_stats”, “StdError_h”, “t_stats_h”],…
‘RowNames’,[“beta” “gamma”]);
disp(‘table of estimates’);
disp(table_estimates);

%%%%%%%%%%%%%%%%%
% QUESTION 7
%%%%%%%%%%%%%%%%%%%%

% test of single restriction
t_test = (para_opt2(1) – .9)./stderror(1); % test statistic
p_value_t = 2.*(1 – cdf(‘T’, abs(t_test), T-2)); % p-value using t distribution
p_value_N = 2.*(1 – cdf(‘Normal’, abs(t_test), 0,1)); % p-value using the Normal distribution

fprintf(‘—– Question 7 ———\n’);
fprintf(‘The value of the t statistic is %4.4f \n’, t_test);
fprintf(‘The value of the normal p value is %4.4f \n’, p_value_N);
fprintf(‘The value of the t p value is %4.4f \n’, p_value_t);

%%%%%%%%%%%%%%%%%%%
% QUESTION 8
%%%%%%%%%%%%%%%%%%%%

% test of multiple restriction
R = eye(2);
r = [0.9; 4];

Wald = (R*para_opt2 – r)’*inv(R*var*R’)*(R*para_opt2 – r);
p_value_wald = 1 – cdf(‘chi2’, Wald, 2);

fprintf(‘—– Question 8 ———\n’);
fprintf(‘The value of the Wald statistic is %4.4f \n’, Wald);
fprintf(‘The value of the p value is %4.4f \n’, p_value_wald);

%%%%%%%%%%%%%%%%%%
% QUESTION 9
%%%%%%%%%%%%%%%%%%%

R = [50 -1];

Wald_linear = (R*para_opt2 – r)’*inv(R*var*R’)*(R*para_opt2 – r);
p_value_wald_linear = 1 – cdf(‘chi2’, Wald_linear, 1);

fprintf(‘—– Question 9 ———\n’);
fprintf(‘The value of the Wald statistic is %4.4f \n’, Wald_linear);
fprintf(‘The value of the p value is %4.4f \n’, p_value_wald_linear);

%%%%%%%%%%%%%%%%%
% QUESTION 10
%%%%%%%%%%%%%%%%%%%%%

% Test of over-identifying restrictions
Overid = gmm_criterion(para_opt2,cons_growth,returns,W_opt2); % criterion evaluated at the optimal second-stage estimates
test = T*Overid; % Hansen’s test
Pvalue_overid = 1 – chi2cdf(test,N-d); % compute p-value according to the Chi-square

fprintf(‘—– Question 10 ———\n’);
fprintf(‘The value of the test statistic is %4.4f \n’, test);
fprintf(‘The value of the p value is %4.4f \n’, Pvalue_overid);

function f = gmm_criterion(para,consumption,returns,W)

% para vector of parameters
% consumption consumption growth vector
% returns returns data matrix
% W weigthing matrix

% f value of the gmm criterion

data_size = size(returns);
N = data_size(2);
T = data_size(1);

% parameters to use for computation
para = [para(1); para(2)];

% initialize the matrix of pricing errors
m = zeros(T,N);

% compute pricing errors
m(:,i) = para(1)*(consumption(1:end)).^(-para(2)).*(1+returns(1:end,i)) -1;

% average pricing errors across time (for each asset)
mm = mean(m)’;

% compute gmm criterion
f = mm’*W*mm;

function f = gmm_moment(para,consumption,returns)

% para vector of parameters
% consumption consumption growth vector
% returns returns data matrix

% f pricing error matrix (for each observation and each asset)

data_size = size(returns);
N = data_size(2);
T = data_size(1);

% parameters to use for computation
para = [para(1); para(2)];

% initialize the matrix of pricing errors
m = zeros(T,N);

% compute pricing errors
m(:,i) = para(1)*(consumption(1:end)).^(-para(2)).*(1+returns(1:end,i)) -1;

f = m; %observations are in rows, assets are in columns

程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com