2

私はMatlabで何かをコーディングする際にこの問題を抱えています.誰かがこれを解決する方法を知っていることを願っています.

概要: 問題は、いくつかの異なる金融ポートフォリオ (1070 ポートフォリオ) があり、ポートフォリオごとに回帰を実行する必要があることです。次に、最初の回帰からの残差を使用して、それらの残差をブートストラップしたい (約 1000 のブートストラップされた残差サンプルを取得する) が、PER EACH INDIVIDUAL ポートフォリオ。これは、異なるポートフォリオの残差を混合できないためです。

詳細: ポートフォリオ番号を示す 1 つのベクトルがあります。これは乱数ですが、その特定のポートフォリオに固有のものです。次に、ポートフォリオのリターンを 1 つの長いベクトル (14k の観測値) に収集します。そのため、「ローリング ウィンドウ」OLS 回帰のようなものを実行し、個々のポートフォリオに対応するデータのみを回帰させ、定数とベータを抽出し、これらを保存してから、すべての異なるポートフォリオに対してこれを行います。

定数とベータで構成されるマトリックスを取得すると、各行が特定のポートフォリオに対応します。

ポートフォリオには異なる量のデータポイントがあるため、あるポートフォリオには 60 の観測があり、別のポートフォリオには 150 の観測がある場合があります。したがって、一定の間隔だけで個別のポートフォリオに分割することはできません。

ブートストラップされた残差については、上記のように、サンプル全体ではなく、ポートフォリオの残差から置換して引き出す必要があります。さらにデータを操作するには、これらのブートストラップ サンプルが必要ですが、1000 個のブートストラップ サンプルがあり、残りは通常の加算および減算操作です...

誰もこれを行う方法を知っていますか? Stata では、回帰部分では「by()」オプションを使用するだけですが、ブートストラップではそれほど簡単ではありません...

どんな助けにもとても感謝しています!

よろしく、フィリップ

4

1 に答える 1

0

MATLABを使用した残差ブートストラップのいくつかの異なる例を添付しました

次のリファレンスは、いくつかの優れた背景情報を提供します

http://www.economics.uci.edu/~dbrownst/bootmi.pdf

%% Generate a data set and perform your initial regression

clear all
clc

X = linspace(1, 1000, 1000)';
Y = 3*X + 5 + randn(1000,1);
X = [ones(length(X),1), X];

[b,bint,r,rint,stats] = regress(Y,X);

%% Parametric residual bootstrap

% This method assumes that your residuals are normally distributed and
% homoskedastic.  A parametric residual bootstrap is more accurate and
% converges faster than a nonparametric residual bootstrap.

% Use a one sided kstest to verify that the residuals are normally
% distributed.
kstest(r)

% Create a probability distribution object that models the residuals
foo = fitdist(r, 'normal')

% Create an array to store your new datasets
Nboot = 500;
My_Data = zeros(length(X), Nboot);

% Create your data sets

YHat = X*b;

for i = 1:Nboot

    boot_noise = random(foo, 1000,1);
    My_Data(:,i) = YHat + boot_noise;

end

% Use your data to do something interesting

%%  Nonparametric residual bootstrap

% This method assumes that your errors are homoskedastic, however, there is
% no assume that they are normally distributed.

% This method also uses the bootstrp function from Statistics Toolbox and
% assumes that we're using the bootstrp to estimate standard errors

standard_errors = std(bootstrp(1000,@(bootr)regress(YHat+bootr, X),r))
于 2011-06-08T13:09:16.117 に答える