我想找到具有多项分布的因变量的Logit回归的最优模型规范。 Y有三个结果,我想制作一个包含2个变量的预测模型 - 滞后和差异点率时间序列和估计实现波动率的时间序列。
我最初的想法是,我创建了一个遍历每个规范的循环,并输出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 :(得分:0)
我不确定是否有最佳方法可以做到这一点。这是统计学家长期以来遇到的问题。
您应该查看PROC LOGISTIC中提供的自动变量选择算法。
如果您已安装并拥有一台具有足够RAM的多核机器,PROC HPLOGISTIC可能会更快地进行选择。
我建议查看Cross Validated(StackExchange for Statistics)来研究每种选择方法的优缺点。