2012-10-08 3 views
0

면책 조항 :이 질문은 Matlab의 계량 경제 분석 도구 상자에 액세스 할 수있는 사람들에게만 해당됩니다.Matlab, Econometrics toolbox - 결정론적인 시변 분산을 이용한 ARIMA 시뮬레이션

상황 : I는 경제학 툴박스를 사용 ARIMA (p, D, Q) 모델에서 관찰 N 시뮬레이션 매트랩 사용하고자. 어려움은 무엇입니까? 결정적이며 시간에 따라 변하는 변화로 시뮬레이션을 시뮬레이션하고 싶습니다.

질문 1) 내가 할 수있는이 사용하는 내장 그것을 자신을 변경하지 않고 MATLAB simulate 기능 ? 내가 말할 수있는 한 가까이에서, 이것은 불가능합니다. 필자가 읽은 문서에서 혁신은 일정한 분산 (즉, 각 혁신에 대해 동일한 분산)을 갖도록 지정되거나 확률 론적으로 시변 (즉, GARCH 모델)으로 지정 될 수 있지만 결정적으로 시간에 따라 달라질 수는 없습니다. 변화하는, 여기서, 나는 사용자가 그들의 값을 선택한다 (사소한 상수 경우 제외).

질문 질문에 대한 답은 1 내가 계량 경제학의 도구 상자에서 simulate 기능을 편집 할 수없는 이유 "아니오", 다음 사람이 어떤 이유를 않습니다 다음되는 2) 같은 경우 가) 프리앰블을 변경합니다 입력 modelVariance 필드가 숫자 스칼라 대신 숫자 벡터로 설정된 경우이 함수는 오류를 발생시키지 않습니다. b)에서 simulate의 알터 라인 310 :

E(:,(maxPQ + 1:end)) = Z * sqrt(variance); 

NumPath는 경로의 개수

E(:,(maxPQ + 1:end)) = (ones(NumPath, 1) * sqrt(variance)) .* Z; 

을 시뮬레이션하기 위해, I 오류 트랩을 포함되었음을 가정 할 수있다 variance에 저장된 (입력) 결정적 분산 경로가 올바른 길이인지 확인하십시오 (즉, 경로 당 시뮬레이트 할 관측 수와 동일).

모든 도움을 주시면 감사하겠습니다. 죄송합니다. 질문이 기본으로 보인다면, 저는 전에 Mathwork의 자체 기능 중 하나를 편집하지 않았으며 어리석은 일을하고 싶지 않았습니다.

업데이트 (2012-10-18) : 나는 위에서 제안한 코드 편집이 유효하며 대부분 다른 부분을 손상시키지 않을 것이라고 확신합니다. 그러나 파일 권한으로 인해 솔루션을 구현하는 것이 쉽지 않은 것으로 나타났습니다. 저는 현재 Mathworks와 함께 내 목표를 달성하는 최선의 방법에 대해 이야기하고 있습니다. 일단 내가 가지고 있으면 결과를 여기에 게시 할 것입니다.

+0

평상시와 마찬가지로 5 초 안에 대답 할 수없는 질문입니다.) – angainor

+0

@angainor 그러나 일반적으로 좋은 것들 :-) q2는 대답하기 힘든 질문입니다. 다른 시간이 필요합니다. 시리즈 녀석/gals 누가이 문제로 실행했습니다. 그렇지 않다면, 내일 몇 가지 테스트를하고 결과를 게시 할 것입니다. –

답변

0

답변이없는 1 주일 반이 지났으므로이 시점에서 나 자신의 답변을 게시하는 것이 좋습니다.

질문 1)에 대한 응답으로, 아니요, 어쨌든 내장 MATLAB 기능으로 이것을 수행하지 못했습니다.

질문 2)에 대한 응답으로 예, 게시 한 내용이 작동합니다. 그러나 그것은 matlab 파일 권한으로 인해 상상했던 것보다 조금 더 복잡했습니다.다음은 단계별 가이드입니다.

i) 어디서든 매트랩 경로에 @arima_Custom 디렉토리를 만듭니다.

ii) 명령 창에서 edit arima을 입력하십시오. 이 파일의 텍스트를 새로운 m 파일로 복사하고 @arima_Custom 디렉토리에 arima_Custom.m이라는 이름으로 저장하십시오.

iii) 컴퓨터에서 계량 경제 분석 도구 상자를 찾으십시오. 찾았 으면 도구 상자에서 @arima 디렉터리를 찾습니다. 이 디렉토리는 리눅스 머신에 아마도 $MATLAB_ROOT/toolbox/econ/econ/@arima (내 컴퓨터에서는 $ MATLAB_ROOT가/usr/local/Matlab/R2012b)에 위치 할 것이다. 파일 arima.m을 복사하지 말고 @arima의 내용을 @arima_Custom으로 복사하십시오.

iv) 편집을 위해 arima_Custom을 엽니 다 (예 : edit arima_Custom).

function OBJ = arima(varargin) 

지금

function OBJ = arima_Custom(varargin) 

로 변경 선 993 :

classdef (Sealed) arima < internal.econ.LagIndexableTimeSeries 

classdef (Sealed) arima_Custom < internal.econ.LagIndexableTimeSeries 

다음 변화 선 (406) 내지 :이 파일에서의 변화를 라인 (1) 로부터 :

,451,515,
if isa(OBJ.Variance, 'double') && (OBJ.Variance <= 0) 

if isa(OBJ.Variance, 'double') && (sum(OBJ.Variance <= 0) > 0) 

로 V) 열기 편집 @arima_Custom에있는 simulate.m (우리는 단계 III)에서 거기를 복사됩니다. 이 파일을 현재 폴더 창에서 수동으로 탐색하여 올바른 simulate.m이 열리는 지 확인하는 것이 가장 좋습니다.

%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; 

E(:,(maxPQ + 1:end)) = Z * sqrt(variance); 

그리고 우리는 완료 :이 파일에서 라인 (310)을 변경!

이제 결정 론적 (AN ARIMA (0,1,0)에 대한) 예를 들어 arima_Custom 클래스를 사용하여 분산을, 시간 변화로 시뮬레이션 할 수 있어야한다 :

ARIMAModel = arima_Custom('D', 1, 'Variance', ScalarVariance, 'Constant', 0); 
ARIMAModel.Variance = TimeVaryingVarianceVector; 
[X, e, VarianceVector] = simulate(ARIMAModel, NumObs, 'numPaths', NumPaths); 

을 추가, 당신은 여전히도해야 우리가 그것을 변경하지 않았기 때문에 matlab의 원래 arima 클래스를 사용할 수 있습니다.