から回帰係数の分布を取得するために、ブロックブートストラップ手法を効率的に実装しようとしていますPROC MIXED
。主な概要は次のとおりです。
私はパネルデータセットを持っています、例えばfirm
、そしてそれyear
はインデックスです。ブートストラップの反復ごとに、n個のサブジェクトを置き換えてサンプリングしたいと思います。このサンプルから、サンプリングされた各被験者のすべての観測値の「スタック」(行の上に連結された行)である新しいデータセットを構築する必要があります。この新しいデータセットを使用して、回帰を実行し、対象の係数を引き出すことができます。一連の反復、たとえば2000について繰り返します。
各企業は複数回選択される可能性があるため、各反復のデータセットにそのデータを複数回含める必要があります。ループとサブセットのアプローチを使用すると、計算が面倒になります。私の実際のデータセットは非常に大きい(2Gb .sas7bdatファイル)。
疑似/説明コードの例(すべてのnoobエラーをご容赦ください!):
DATA subjectlist;
SET mydata;
BY firm;
IF first.firm;
RUN;
%macro blockboot(input=, subjects=, iterations=);
%let numberfirms = LENGTH(&subjects);
%do i = 1 %to &iterations ;
DATA mytempdat;
DO i=1 TO &numberfirms;
rec = ceil(&numberfirms * ranuni(0));
*** This is where I want to include all observations for the randomly selected subjects;
*** However, this code doesn't include the same subject multiple times, which...;
*** ...is what I want;
SET &INPUT subjects IN &subjects;
OUTPUT;
END;
STOP;
PROC MIXED DATA=mytempdat;
CLASS firm year;
MODEL yval= cov1 cov2;
RANDOM intercept /sub=subject type=un;
OUTPUT out=outx cov1=cov1 ***want to output the coefficient estimate on cov1 here;
RUN;
%IF &i = 1 %THEN %DO;
DATA outall;
SET outx;
%END;
%ELSE %DO;
PROC APPEND base=outall data=outx;
%END;
%END; /* i=1 to &REPS loop */
PROC UNIVARIATE data=outall;
VAR cov1;
OUTPUT out=final pctlpts=2.5, 97.5 pctlpre=ci;
%mend;
%blockboot(input=mydata,subjects=subjectlist, reps=2000)
この質問は、私が以前に尋ねた質問と同じです。ここにあります。
どんな助けでも大歓迎です!