我正在研究一个代码来提取AR(1)-GARCH(1)参数,我使用AR(1)-GJR(1,1) )模型到单个矩阵,以便我可以在计算中将它们用作变量。由于我有16个时间序列变量,结合我的代码按以下方式循环:将混合的空/非空单元格转换为数字矩阵
for i=1:nIndices
AA_ARCH(:,i) = cell2mat(fit{i}.Variance.ARCH)';
end;
我的问题是,一些变量是没有的AA_ARCH(:我)的尺寸比nIndices低。当然,当我尝试导出指定维数(:,i)的循环中的估计和nIndices matlab报告维度不匹配时。我想告诉Matlab用0代替NaN,而不是留下空白点,以便它能够从AA_ARCH生成(1,nIndices)矩阵。
我想到了什么样的这样:
fit{i}.Variance.Leverage(isnan(fit{i}.Variance.Leverage))=0
,但我没能这部分与前面的代码相结合。
我会非常高兴任何提示!
最佳,卡罗琳
UPDATE:
这里是一个完全的我的代码产生我的问题,可运行版本。请注意,由于在时间序列1的fit.gjr(1,1)中没有ARCH和GARCH估计,因此代码会生成维度失配误差。对于这些缺失值,我希望在提取的矩阵中包含0作为占位符。
returns = randn(2,750)';
T = size(returns,1);
nIndices = 2;
model = arima('AR', NaN, 'Variance', gjr(1,1));
residuals = NaN(T, nIndices);
variances = NaN(T, nIndices);
fit = cell(nIndices,1);
options = optimset('fmincon');
options = optimset(options, 'Display' , 'off', 'Diagnostics', 'off', ...
'Algorithm', 'sqp', 'TolCon' , 1e-7);
for i = 1:nIndices
fit{i} = estimate(model, returns(:,i), 'print', false, 'options', options);
[residuals(:,i), variances(:,i)] = infer(fit{i}, returns(:,i));
end
for i=1:nIndices
AA_beta(:,i) = cell2mat(fit{i}.AR)';
AA_GARCH(:,i) = cell2mat(fit{i}.Variance.GARCH)';
AA_ARCH(:,i) = cell2mat(fit{i}.Variance.ARCH)';
AA_Leverage(:,i) = cell2mat(fit{i}.Variance.Leverage)';
end;
'fit'包含什么?它在哪里定义?另外,您能否更清楚地定义您的具体问题?它在复杂的数据结构中用零代替NaN值?是从出口MATLAB的一些数据(在这种情况下 - 请说出你试图导出的方式和位置)?是关于如何存储数据或优化算法的建议(例如,摆脱循环)?请尝试提供[可运行的代码片段来重现您的问题](http://stackoverflow.com/help/mcve),并显示所需的结果。 –
嗨Dev-iL,谢谢你试图帮助!我发布了可生成错误的代码的可运行版本。我还尝试在原始问题中更明确地指出问题。我希望现在更有意义。最好的,卡洛琳 – Carolin
我已经编辑了你的问题的标题和标签,以更好地反映你问的问题。请注意,MATLAB以不同的方式处理'NaN'和'[]',因为它们在概念上是不同的:'NaN'通常意味着“无穷大”(或者简单地说是来自未定义数值结果的操作的结果),但有时用作其他占位符值,而[]'(空)“值”[服务于不同的目的](http://www.mathworks.com/help/matlab/math/empty-matrices-scalars-and-vectors.html)。 。 –