我想为具有多项分布的因变量的 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
只是为了测试目的。理想情况下,这会高得多。