Matlab计算for循环中分布分位数的均值
Matlab Calculating mean of distribution quantile in a for-loop
我正在尝试根据各种投资组合的模拟数据计算投资组合 cVaR(条件风险价值)水平。
我可以使用以下代码为一个投资组合执行此操作:
% Without a for-loop for series 1
test2 = test(:,1)
VaR_Calib_EVT = 100 * quantile(test2, VarLevel_Calib);
help1 = sum(test2(:) <VaR_Calib_EVT/100);
cVaR_Calib_EVT = sum(test2(test2 <VaR_Calib_EVT/100)/help1);
但是,当放置一个 for 循环时(见以下代码),cVaR_Calib_EVT 中的输出值是错误的,除了单元格 (1,1) 中的值。
VarLevel_Calib = 0.05;
test = trnd(3,780,16);
nIndices = 16;
for i=1:nIndices
VaR_Calib_EVT (:,i) = 100 * quantile(test(:,i), VarLevel_Calib);
help1 (:,i) = sum(test(:,i)<(VaR_Calib_EVT(:,i)/100));
cVaR_Calib_EVT (:,i) = sum(test(test(:,i) <VaR_Calib_EVT(:,i)/100)/help1(:,i));
end
我做错了什么?
最好的,
卡罗琳
你的test
变量是三维变量,所以当你
test2 = test(:,1);
然后
test2(:) <VaR_Calib_EVT/100
这与你在第二个例子中做的不一样
test(:,i)<(VaR_Calib_EVT(:,i)/100)
要复制第一个示例的结果,您可以在循环内显式执行 test2
赋值,这应该会按预期执行。
但是请注意,仅使用两个索引来指定 3 维矩阵的部分可能会以意想不到的方式表现,长期解决方案是明确指定 test
矩阵的哪些成员想要包括。如果这样做,您将能够安全地将单个示例扩展到循环中。
我正在尝试根据各种投资组合的模拟数据计算投资组合 cVaR(条件风险价值)水平。
我可以使用以下代码为一个投资组合执行此操作:
% Without a for-loop for series 1
test2 = test(:,1)
VaR_Calib_EVT = 100 * quantile(test2, VarLevel_Calib);
help1 = sum(test2(:) <VaR_Calib_EVT/100);
cVaR_Calib_EVT = sum(test2(test2 <VaR_Calib_EVT/100)/help1);
但是,当放置一个 for 循环时(见以下代码),cVaR_Calib_EVT 中的输出值是错误的,除了单元格 (1,1) 中的值。
VarLevel_Calib = 0.05;
test = trnd(3,780,16);
nIndices = 16;
for i=1:nIndices
VaR_Calib_EVT (:,i) = 100 * quantile(test(:,i), VarLevel_Calib);
help1 (:,i) = sum(test(:,i)<(VaR_Calib_EVT(:,i)/100));
cVaR_Calib_EVT (:,i) = sum(test(test(:,i) <VaR_Calib_EVT(:,i)/100)/help1(:,i));
end
我做错了什么?
最好的, 卡罗琳
你的test
变量是三维变量,所以当你
test2 = test(:,1);
然后
test2(:) <VaR_Calib_EVT/100
这与你在第二个例子中做的不一样
test(:,i)<(VaR_Calib_EVT(:,i)/100)
要复制第一个示例的结果,您可以在循环内显式执行 test2
赋值,这应该会按预期执行。
但是请注意,仅使用两个索引来指定 3 维矩阵的部分可能会以意想不到的方式表现,长期解决方案是明确指定 test
矩阵的哪些成员想要包括。如果这样做,您将能够安全地将单个示例扩展到循环中。