Looping Issues in MATLAB- immediate help requested

1 view (last 30 days)
I am trying to estimate a rolling extreme shortfall matrix by looping. In the following code ESdynamic is crated for each column on the simulated matrix.
% Simulate data set
mu = [0 0 0 0 0 0];
A = rand(6);
Sigma= A * A';
% Simulation of variables
rng('default') % For reproducibility
Data = mvnrnd(mu,Sigma,1000);
r=Data(:,1);
Now, instead of representing r as just one column of data matrix, I want to out the entire code in a loop so that, at first Esdynamic is populated with column one, than on column 2... at the end we have a matrix of ESdynamic.
T= length(r);
conditionalvariance=[];
%p = [0.5, 0.1, 0.05];
p=0.5;
VarMdl = garch(1,1);
Mdl = arima('ARLags',1,'Variance',VarMdl);
EstMdl = estimate(Mdl,r);
[res,v,logL] = infer(EstMdl,r);
conditionalvariance=[conditionalvariance,v];
Sigma=conditionalvariance;
ESdynamic=[];
VaRdynamic=[];
for P_Index = 1: +1: length(p)
P_Value = p(P_Index);
for J= 1:T
[Var_Normal, ES_Normal]=hNormalVaRES(Sigma(J),P_Value);
VaR = Var_Normal;
ES = ES_Normal;
disp(J)
disp('');
ESdynamic = [ESdynamic,ES];
I also want a Vardynamic matrix. how to ket the loop update it?
VaRdynamic = []
end
ES_Matrix(:,P_Index) = ESdynamic';
Now is it possible to put another loop so that the ESdynamic and VaRdynamic matrices, are generated for p = [0.5, 0.1, 0.05, 0.025, 0.01, 0.001] in a loop?
The plot compares all 6 columns of ESdynamic, for each ...please help
plot(ES_Matrix(:,P_Index));
hold on
ESdynamic = [];
end
hold off
% Local Functions
function [VaR,ES] = hNormalVaRES(Sigma,p)
% Compute VaR and ES for normal distribution
% See [4] for technical details
VaR = -norminv(p);
ES = -Sigma*quad(@(q)q.*normpdf(q),-6,-VaR)/p;
end
Your kind suggestions are requested.

Answers (1)

Srivardhan Gadila
Srivardhan Gadila on 28 Nov 2020
If for all values of p the sizes of all the matrices of ESdynamic are same and sizes of all the matrices of VaRdynamic are same respectively then you can initialize them with zeros as follows:
%let size of ESdynamic is mxn (note that it may be different in your case like mxnxox..xq
ESdynamicAllmatrices = zeros([p m n]);
In the for loop based on the variable p assign the value as follows:
ESdynamicAllmatrices(P_Index,:,:) = ESdynamic;
If the sizes are different then consider using cell arrays. Refer to Multidimensional Arrays, zeros and cell.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!