0

免責事項:この質問は、Matlabの計量経済学ツールボックスにアクセスできる人のみを対象としています。

状況: MatlabをN使用して、計量経済学ツールボックスを使用してARIMA(p、d、q)モデルからの観測をシミュレートしたいと思います。難しさは何ですか?イノベーションは、決定論的で時間とともに変化する分散でシミュレートされることを望んでいます。

質問1)組み込みのmatlabsimulate関数を使用して、自分で変更せずにこれを実行できますか?私が知る限り、これは不可能です。私がドキュメントを読んだところ、イノベーションは一定の分散を持つように指定することも(つまり、イノベーションごとに同じ分散になるように)、確率的に時間変化するように指定することもできます(GARCHモデルなど)が、決定論的に時間的にすることはできません-変化します。ここで、ユーザーであるIは、値を選択します(些細な定数の場合を除く)。

質問2)質問1の答えが「いいえ」の場合、次のように計量経済学ツールボックスから関数を編集できない理由がわかりますかsimulate。a)関数がエラーをスローしないようにプリアンブルを変更します。入力のVarianceフィールドがmodel数値スカラーではなく数値ベクトルに設定されている場合。b)次の行310を変更simulateします。

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

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

ここNumPathで、はシミュレートするパスの数です。ここに格納されている(入力)決定論的分散パスvarianceが正しい長さ(つまり、パスごとにシミュレート)。

どんな助けでも大歓迎です。質問が基本的なものであると思われる場合は、お詫びします。これまでにMathwork独自の関数のいずれかを編集したことがなく、愚かなことをしたくありませんでした。

更新(2012-10-18):上記で提案したコード編集は有効であると確信しており、他の何も壊さないことをほぼ確信しています。ただし、ファイルのアクセス許可が原因で、ソリューションの実装は簡単ではないことがわかりました。私は現在、目標を達成するための最良の方法についてMathworksと話し合っています。結果が出たら、ここに投稿します。

4

1 に答える 1

0

1週間半無回答でしたので、この時点で自分の回答を投稿しても大丈夫だと思います。

私の質問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_Customarima.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)simulate.m編集のためににあるを開き@arima_Customます(ステップiiiでそこにコピーしました)。正しいファイルが開かれるように、[現在のフォルダ]ウィンドウで手動でこのファイルに移動してこのファイルを開くのがおそらく最善です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);

arimaさらに、変更しなかったため、matlabの元のクラスも引き続き使用できるはずです。

于 2012-10-18T08:32:56.663 に答える