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 个变量的图。

请帮助我解决这个循环问题。

迈克尔Tr7

不确定该图是否会像这样,但使用额外的外部 for 循环来索引 的值p并多次运行该函数可用于实现此结果。为了绘制相同的轴,hold on在第一次plot()调用后引入了属性也不确定是否p = [0.5, 0.1, 0.05, 0.025, 0.01, 0.001]正确设置,因为您提到它用于六个不同的p值。在问题中它有0.1作为0,1

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);
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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章