How to make my code more concise and efficient ?
Mostra commenti meno recenti
Hello, I am pretty new to matlab and so not totally efficient and professional at writing codes on it. I have a panel data of a group of countries and the following I am suppose to perform on each country. Is there a way on matlab like defining a variable with names of countries such that it will be able to implement the code on each country?. Also as you notice from the code I am providing can I define another loop for h =1:4 such that I get the output exactly the same way I get when I cut and paste the same code for each country.
I appreciate any feedback and output thank you
Example of my code :
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% cty 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DM11_cty1=[];
DM21_cty1=[];
for T=1:8%the forcast sample
h=1;
[e1h, e2h,e3h] = forcasterror(h,T,GVARs,Actual,FRWM,FRWMD);
DM1h_cty1=dmtest(e1h,e2h,h);%this is the DM test for h=2 between GVAR and RW
DM2h_cty1=dmtest(e1h,e3h,h);%this is the DM test for h=2 between GVAR and RWD
DM11_cty1=[DM11_cty1 DM1h_cty1];
DM21_cty1=[DM21_cty1 DM2h_cty1];
end
DM12_cty1=[];
DM22_cty1=[];
for T=1:8%the forcast sample
h=2;
[e1h, e2h,e3h] = forcasterror(h,T,GVARs,Actual,FRWM,FRWMD);
DM1h_cty1=dmtest(e1h,e2h,h);%this is the DM test for h=2 between GVAR and RW
DM2h_cty1=dmtest(e1h,e3h,h);%this is the DM test for h=2 between GVAR and RWD
DM12_cty1=[DM12_cty1 DM1h_cty1];
DM22_cty1=[DM22_cty1 DM2h_cty1];
end
DM13_cty1=[];
DM23_cty1=[];
for T=1:8%the forcast sample
h=3;
[e1h, e2h,e3h] = forcasterror(h,T,GVARs,Actual,FRWM,FRWMD);
DM1h_cty1=dmtest(e1h,e2h,h);%this is the DM test for h=2 between GVAR and RW
DM2h_cty1=dmtest(e1h,e3h,h);%this is the DM test for h=2 between GVAR and RWD
DM13_cty1=[DM13_cty1 DM1h_cty1];
DM23_cty1=[DM23_cty1 DM2h_cty1];
end
DM14_cty1=[];
DM24_cty1=[];
for T=1:8%the forcast sample
h=4;
[e1h, e2h,e3h] = forcasterror(h,T,GVARs,Actual,FRWM,FRWMD);
DM1h_cty1=dmtest(e1h,e2h,h);%this is the DM test for h=2 between GVAR and RW
DM2h_cty1=dmtest(e1h,e3h,h);%this is the DM test for h=2 between GVAR and RWD
DM14_cty1=[DM14_cty1 DM1h_cty1];
DM24_cty1=[DM24_cty1 DM2h_cty1];
end
DM1_cty1=[DM11_cty1;DM12_cty1;DM13_cty1;DM14_cty1];
DM2_cty1=[DM21_cty1;DM22_cty1;DM23_cty1;DM24_cty1];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%cty2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DM11_cty2=[];
DM21_cty2=[];
for T=1:8%the forcast sample
h=1;
[e1h, e2h,e3h] = forcasterror(h,T,GVARs,Actual,FRWM,FRWMD);
DM1h_cty2=dmtest(e1h,e2h,h);%this is the DM test for h=2 between GVAR and RW
DM2h_cty2=dmtest(e1h,e3h,h);%this is the DM test for h=2 between GVAR and RWD
DM11_cty2=[DM11_cty2 DM1h_cty2];
DM21_cty2=[DM21_cty2 DM2h_cty2];
end
DM12_cty2=[];
DM22_cty2=[];
for T=1:8%the forcast sample
h=2;
[e1h, e2h,e3h] = forcasterror(h,T,GVARs,Actual,FRWM,FRWMD);
DM1h_cty2=dmtest(e1h,e2h,h);%this is the DM test for h=2 between GVAR and RW
DM2h_cty2=dmtest(e1h,e3h,h);%this is the DM test for h=2 between GVAR and RWD
DM12_cty2=[DM12_cty2 DM1h_cty2];
DM22_cty2=[DM22_cty2 DM2h_cty2];
end
DM13_cty2=[];
DM23_cty2=[];
for T=1:8%the forcast sample
h=3;
[e1h, e2h,e3h] = forcasterror(h,T,GVARs,Actual,FRWM,FRWMD);
DM1h_cty2=dmtest(e1h,e2h,h);%this is the DM test for h=2 between GVAR and RW
DM2h_cty2=dmtest(e1h,e3h,h);%this is the DM test for h=2 between GVAR and RWD
DM13_cty2=[DM13_cty2 DM1h_cty2];
DM23_cty2=[DM23_cty2 DM2h_cty2];
end
DM14_cty2=[];
DM24_cty2=[];
for T=1:8%the forcast sample
h=4;
[e1h, e2h,e3h] = forcasterror(h,T,GVARs,Actual,FRWM,FRWMD);
DM1h_cty2=dmtest(e1h,e2h,h);%this is the DM test for h=2 between GVAR and RW
DM2h_cty2=dmtest(e1h,e3h,h);%this is the DM test for h=2 between GVAR and RWD
DM14_cty2=[DM14_cty2 DM1h_cty2];
DM24_cty2=[DM24_cty2 DM2h_cty2];
end
DM1_cty2=[DM11_cty2;DM12_cty2;DM13_cty2;DM14_cty2];
DM2_cty2=[DM21_cty2;DM22_cty2;DM23_cty2;DM24_cty2];
2 Commenti
Stephen23
il 21 Dic 2020
"Is there a way on matlab like defining a variable with names of countries such that it will be able to implement the code on each country?"
Yes, there are ways to do this, but forcing meta-data (e.g. country names) into variable names will force you into writing slow, complex, inefficient, buggy, difficult-to-debug code. Meta-data (e.g. country names) is data, and data belongs in variables, not in variable names. The best approach would be to use a cell array, string array, table array, etc. to store the names (and possibly other (meta-)data as well, much like Les Beckham showed in their answer.
"... when I cut and paste the same code for each country."
Computers are only really good at one thing: repeating simple tasks many many times in loops. So when you copy-and-paste code, you are just doing the computer's job for it (only much much slower and less accurately). Much better is to use a loop and indexing.
azza mansour
il 21 Dic 2020
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su Surrogate Optimization in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!