MATLAB 中的循环问题
Looping issue in MATLAB
这是我正在处理的一个非常基本的问题。
我模拟了一个包含 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
和 运行 的值可以使用函数多次来实现这个结果。为了绘制相同的轴,在第一个 plot()
调用之后引入了 hold on
属性。也不确定 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
这是我正在处理的一个非常基本的问题。
我模拟了一个包含 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
和 运行 的值可以使用函数多次来实现这个结果。为了绘制相同的轴,在第一个 plot()
调用之后引入了 hold on
属性。也不确定 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