2016-04-12 7 views
0

私は論文を書いており、多項分布の従属変数を持つ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を設定しています。理想的にはこれはかなり高いでしょう。

答えて

0

これを行うには最良の方法がないとは思いますが、これは統計学者が長年にわたって抱えてきた問題です。

PROC LOGISTICで利用可能な自動変数選択アルゴリズムを調べる必要があります。

https://support.sas.com/documentation/cdl/en/statug/68162/HTML/default/viewer.htm#statug_logistic_syntax22.htm

あなたはそれがインストールされていると十分なRAMとマルチコアマシンを持っている場合は、PROC HPLOGISTICはおそらく速く選択を行います。

https://support.sas.com/documentation/cdl/en/statug/68162/HTML/default/viewer.htm#statug_hplogistic_toc.htm

私は、各選択方法の長所と短所を検索するには、クロス検証済み(統計StackExchange)を見てお勧めします。

https://stats.stackexchange.com/

+0

だから、ステップワイズ回帰を示唆していますか?多分、私は12の変数を統合する方法を見つけることができましたが、異なるラグがあります。私はすでに800の新しい列に変数のラグを割り当てるループを持っています。 – Christian

関連する問題