私は論文を書いており、多項分布の従属変数を持つLogit回帰の最適なモデル仕様を見つけたいと思います。 Yには3つの結果があり、予測されるボラティリティの見積もりの時系列と時系列の2つの変数を持つ予測モデルを作成したいと思います。PROC LOGITと時系列データを用いたSAS 9.4の反復回帰
私の最初の考えは、各仕様を通り、AIC値を出力するループを作成し、その後、最適なモデルをバックトラックして見つけることでした。
これは機能していますが、ヒッチがあります。次のようにスポットレートを調べたいとします( Spot_t - Spot_t-n(nは21)。 これは、多くの仕様のために開きます。私の裁判の回帰では、私はそれぞれ21の変数*の数だけ遅れて、それぞれの12の変数を含んでいました。これは良いモデルでしたが、私はより良い反復プロセスが必要だと思います。
私のモデルが各変数の12個の変数/ラグを含むように制限すると、私たちは24個のループを話しています。これらのループの中には、多くの同じ反復があります。これは時間がかかり、私の意見では愚かです。たぶん、この問題を回避する方法があります。
私はSASでのコード作成に慣れていません。私はVBAでまともな経験を持っています。
私のコードは下に切り取られていますが、これをどうやって別の方法で行うのか分かりましたら、本当に感謝しています! 多分それはそのような配列や何かを行うことは可能だ - しかし私は、SASプログラミングに慣れていないですので、多分あなたは、すべてこれを行う方法にいくつかの光を当てることができ:)
%macro Selectvariables;
%let y = 0;
%let z = 2;
%do a = 1 %to &z;
%do b = 1 %to &z;
%do c = 1 %to &z;
%do d = 1 %to &z;
%do e = 1 %to &z;
%do f = 1 %to &z;
%do g = 1 %to &z;
%do h = 1 %to &z;
%do i = 1 %to &z;
%do j = 1 %to &z;
%do k = 1 %to &z;
%do l = 1 %to &z;
%do m = 1 %to &z;
%do n = 1 %to &z;
%do o = 1 %to &z;
%do p = 1 %to &z;
%do q = 1 %to &z;
%do r = 1 %to &z;
%do s = 1 %to &z;
%do t = 1 %to &z;
%do u = 1 %to &z;
%do v = 1 %to &z;
%do w = 1 %to &z;
%do x = 1 %to &z;
%let First_Spot_var = Spotlag_&a;
%let Second_Spot_var = Spotlag_&b;
%let Third_Spot_var = Spotlag_&c;
%let Fourth_Spot_var = Spotlag_&d;
%let Fifth_Spot_var = Spotlag_&e;
%let Sixth_Spot_var = Spotlag_&f;
%let Seventh_Spot_var = Spotlag_&g;
%let Eighth_Spot_var = Spotlag_&h;
%let Nine_Spot_var = Spotlag_&i;
%let Tenth_Spot_var = Spotlag_&j;
%let Eleventh_Spot_var = Spotlag_&k;
%let Twelveth_Spot_var = Spotlag_&l;
%let First_vol_var = vollag_&m;
%let Second_vol_var = vollag_&n;
%let Third_vol_var = vollag_&o;
%let Fourth_vol_var = vollag_&p;
%let Fifth_vol_var = vollag_&q;
%let Sixth_vol_var = vollag_&r;
%let Seventh_vol_var = vollag_&s;
%let Eighth_vol_var = vollag_&t;
%let Nine_vol_var = vollag_&u;
%let Tenth_vol_var = vollag_&v;
%let Eleventh_vol_var = vollag_&w;
%let Twelveth_vol_var = vollag_&x;
%let Name = Model_&y;
proc Logistic data=CurrencyData;
&Name.: model Y1_Optimal_Strategy_3M = &First_Spot_var &Second_Spot_var &Third_Spot_var &Fourth_Spot_var &Fifth_Spot_var &Sixth_Spot_var &Seventh_Spot_var &Eighth_Spot_var &Nine_Spot_var &Tenth_Spot_var &Eleventh_Spot_var &Twelveth_Spot_var &First_vol_var &Second_vol_var &Third_vol_var &Fourth_vol_var &Fifth_vol_var &Sixth_vol_var &Seventh_vol_var &Eighth_vol_var &Nine_vol_var &Tenth_vol_var &Eleventh_vol_var &Twelveth_vol_var;
ods output FitStatistics=AIC_&Name(where=(criterion="AIC"));
run;
%let y = %Eval(&y+1);
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
%end;
data AllAIC;
set AIC_: INDSNAME=modelVars;
dsname = scan(modelVars, 2);
run;
proc sort data=AllAIC out=allAIC_Sorted;
by InterceptAndCovariates;
run;
proc Print; run;
%mend;
クレイジー広いコードのため申し訳ありません
。あなたが私を助けてくれることを願います。たぶん私は問題を複雑にしています。 :)
ありがとうございます。 敬具、 クリスチャン
編集:私はちょうどテストの目的でz = 2
を設定しています。理想的にはこれはかなり高いでしょう。
だから、ステップワイズ回帰を示唆していますか?多分、私は12の変数を統合する方法を見つけることができましたが、異なるラグがあります。私はすでに800の新しい列に変数のラグを割り当てるループを持っています。 – Christian