2016-04-12 57 views
0

我正在撰寫我的論文,並且希望找到具有多項分佈因變量的Logit迴歸的最佳模型規範。 Y有三個結果,我想用兩個變量 - 一個滯後和不同的現貨匯率時間序列和估計已實現波動的時間序列做一個預測模型。使用PROC LOGIT和時間序列數據在SAS 9.4中進行迭代迴歸

我最初的想法是我創建了一個遍歷每個規範的循環,並輸出AIC值,然後我可以回溯並找到最佳模型。

這工作,但有一個困難。我想通過以下方式查看即期匯率(示例): Spot_t - Spot_t-n(n可能爲21)。 這打開了很多規格。在我的試驗迴歸中,我包括了每個變量的12個變量,每個變量滯後21天*變量數量。這給了一個很好的模型,但我認爲我需要一個更好的迭代過程。

如果我限制我的模型包括每個變量的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

所以你建議STEPWISE迴歸?也許我可以找到一種方法來整合12個變量,但有不同的滯後。我有一個循環已經分配了800個新列與變量的滯後。 – Christian