這是一個半星期沒有答案,所以我覺得我可能在這個時候發表我自己的答案。
迴應我的問題1),不,我還沒有找到任何與內置matlab函數做到這一點。
迴應我的問題2),是的,我發佈的內容將起作用。但是,由於matlab文件權限的原因,它比我想象的要複雜一點。以下是一步一步的指導:
i)在matlab路徑的某處,創建目錄@arima_Custom
。
ii)在命令窗口中輸入edit arima
。將該文件的文本複製到一個新的m文件中,並將其保存在目錄@arima_Custom
中,文件名爲arima_Custom.m
。
iii)在您的機器上找到計量經濟學工具箱。找到後,在工具箱中查找目錄@arima
。該目錄可能位於(在Linux機器上)$MATLAB_ROOT/toolbox/econ/econ/@arima
(在我的機器上,$ MATLAB_ROOT位於/ usr/local/Matlab/R2012b)。將@arima
的內容複製到@arima_Custom
,但不要複製文件arima.m
。
iv)打開arima_Custom
進行編輯,即edit arima_Custom
。在這個文件中改變第1行自:
classdef (Sealed) arima < internal.econ.LagIndexableTimeSeries
到
classdef (Sealed) arima_Custom < internal.econ.LagIndexableTimeSeries
接着,變更線406從:
function OBJ = arima(varargin)
到
function OBJ = arima_Custom(varargin)
現在,變更線993來自:
if isa(OBJ.Variance, 'double') && (OBJ.Variance <= 0)
到
if isa(OBJ.Variance, 'double') && (sum(OBJ.Variance <= 0) > 0)
V)打開位於@arima_Custom
進行編輯simulate.m
(我們在步驟三)在複製它。最好在當前文件夾窗口中手動導航到該文件,以確保打開正確的simulate.m
。在這個文件中,改變從線310:
E(:,(maxPQ + 1:end)) = Z * sqrt(variance);
到
%Check that the input variance is of the right length (if it isn't scalar)
if isscalar(variance) == 0
if size(variance, 2) ~= 1
error('Deterministic variance must be a column vector');
end
if size(variance, 1) ~= numObs
error('Deterministic variance vector is incorrect length relative to number of observations');
end
else
variance = variance(ones(numObs, 1));
end
%Scale innovations using deterministic variance
E(:,(maxPQ + 1:end)) = sqrt(ones(numPaths, 1) * variance') .* Z;
,我們就大功告成了!
您現在應該能夠確定性地隨時間變化的使用arima_Custom
方差,例如(對於ARIMA(0,1,0))來模擬:
ARIMAModel = arima_Custom('D', 1, 'Variance', ScalarVariance, 'Constant', 0);
ARIMAModel.Variance = TimeVaryingVarianceVector;
[X, e, VarianceVector] = simulate(ARIMAModel, NumObs, 'numPaths', NumPaths);
而且,您還應該仍能夠使用matlab的原始arima
類,因爲我們沒有改變它。
像往常一樣,一個問題不能在5秒內回答;) – angainor
@angainor但這些通常是好的:-)我認識到q2是一個難以回答的問題 - 我希望還有其他時間那些已經遇到過這個問題的系列球員/女球員。如果沒有,我會明天做一些測試,並在這裏發佈結果。 –