这是我正在处理的一个非常基本的问题。
我已经模拟了一个包含 6 个变量的数据集,我想测量每个向量的动态极差。
我试图以某种方式循环以下代码,最终变量 ES 将呈现一个矩阵,该矩阵将有 T 行和 6 列穿过模拟矩形矩阵中的所有数据点。
clc
clear
%% 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);
我想使用 r = Data ,因为估计在所有列上运行,而不是在每一列上运行,并且最终的 ESmatrix 在一个图中绘制所有列。
T= length(r);
conditionalvariance=[];
p= [0.025];
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=[];
bpoe=[];
for J= 1:T
[Var_Normal, ES_Normal]=hNormalVaRES(Sigma(J),p);
VaR=Var_Normal;
ES=ES_Normal;
disp(J)
disp('');
ESdynamic=[ESdynamic,ES];
VaRdynamic=[]
end
ES=ESdynamic;
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
当我绘制(ES)时,我想要一个包含 6 个变量的图。
请帮助我解决这个循环问题。
不确定该图是否会像这样,但使用额外的外部 for 循环来索引 的值p
并多次运行该函数可用于实现此结果。为了绘制相同的轴,hold on
在第一次plot()
调用后引入了该属性。也不确定是否p = [0.5, 0.1, 0.05, 0.025, 0.01, 0.001]
正确设置,因为您提到它用于六个不同的p
值。在问题中它有0.1
作为0,1
。
clc
clear
% 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);
T= length(r);
conditionalvariance=[];
p = [0.5, 0.1, 0.05, 0.025, 0.01, 0.001];
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=[];
bpoe=[];
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];
VaRdynamic = []
end
ES_Matrix(:,P_Index) = ESdynamic';
plot(ES_Matrix(:,P_Index));
hold on
ESdynamic = [];
end
hold off
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
使用 MATLAB R2019b 运行
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句