Changeset 1360 for applications

Show
Ignore:
Timestamp:
05/07/11 23:53:49 (13 years ago)
Author:
pierre2
Message:

vratane robust, aj pravdepodobnosti rata pre laplacovo rozdelenie

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/trading_models/trading_models_main.cpp

    r1347 r1360  
    1414 
    1515//======= 
    16 //#include "application/robust/robustlib.h"  ma tu byt aj daka cesta k tomu suboru? 
    1716#include "trading_models_lib.h" 
    1817#include "estim/arx.h" 
     
    3029        for (int i=0;i < pole.size();i++) 
    3130        { 
    32                 r+=pole[i][k+4]*pravd[i][k]; 
    33                 //r=r+exp(pole[i][k+4]-m[k+4]+pravd[i][k]);   
     31                r+=pole[i][k+5]*pravd[i][k]; 
    3432        } 
    35         //cout <<"r"<< log(r); 
    36         return r; //log 
    37                 } 
     33        return r; 
     34        } 
    3835 
    3936int main () { 
    40          
    41         char* outfile_strings[18] = {"prsti_BO_.txt", "prsti_PA_.txt", "prsti_PL_.txt", "prsti_AD_.txt", "prsti_BP_.txt", "prsti_C__.txt", "prsti_CC_.txt", "prsti_CD_.txt", "prsti_CL_.txt", "prsti_CT_.txt", "prsti_CU_.txt", "prsti_ED_.txt", "prsti_FC2.txt", "prsti_FV2.txt", "prsti_GC_.txt", "prsti_HG_.txt", "prsti_HO_.txt", "prsti_HU_.txt"}; 
    42         char* file_strings[18] = {"c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\BO_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\PA_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\PL_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\AD_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\BP_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\C__.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CC_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CD_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CL_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CT_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CU_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\ED_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\FC2.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\FV2.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\GC_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HG_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HO_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HU_.txt"}; 
    43         //for (int a=0;a<18;a++) 
     37        //toto by bralo rozne subory, ale teraz to je zakomentovane, pouyivam len jeden 
     38        char* outfile_strings[19] = {"prsti_CL_.txt", "prsti_HO_.txt", "prsti_HU_.txt", "prsti_NG_.txt", "prsti_AD_.txt", "prsti_BP_.txt", "prsti_CD_.txt", "prsti_CU_.txt", "prsti_SF_.txt", "prsti_BO_.txt", "prsti_C__.txt", "prsti_CT_.txt", "prsti_MW_.txt", "prsti_W__.txt", "prsti_GC_.txt", "prsti_HG_.txt", "prsti_PA_.txt", "prsti_PL_.txt", "prsti_SI_.txt"}; 
     39        char* file_strings[19] = {"c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CL_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HO_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HU_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\NG_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\AD_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\BP_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CD_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CU_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\SF_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\BO_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\C__.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\CT_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\MW_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\W__.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\GC_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\HG_.txt", "c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\PA_.txt","c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\PL_.txt","c:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-MATHEMATIKA\\SI_.txt"}; 
     40        //for (int a=0;a<20;a++) 
    4441        //{ 
    45         int a=3; 
    46         vector<vector<string>> ADdata;     //nacitavanie dat do pola ADdata -funguje spravne 
     42        int a=8; //volbou a menime pouzity subor 
     43        vector<vector<string>> ADdata;     //nacitavanie dat do pola ADdata  
    4744                ifstream myfile(file_strings[a]);                               //"C:\\Users\\Peto\\Desktop\\PROG-BAK\\DATA-Mathematika\\CL_.txt"); 
    4845                if (myfile.is_open()) 
     
    6461                } 
    6562                myfile.close();  //konec nacitavania dat 
    66                 /*              //to malo byt rpevedenie str na double, aspon mysslim 
    67                 std::istringstream stme,stmd;   //je to dake chybne, aj cisla z toho ADdata cita/zapisuje trochu ine 
    68                 double d,e; 
    69                 vector<vec> data_rozdiel; 
    70                 for (int b=0;b<ADdata.size();b++) 
    71                 { 
    72                         vec pom; 
    73                         stmd.str(ADdata[b][0]); 
    74                         stmd >>d; 
    75                         for (int c=1;c<ADdata[b].size();c++) 
    76                         {        
    77                                 stme.str(ADdata[b][c]); 
    78                                 stme >>e; 
    79                                 cout<<e<<' '<<d ; 
    80                                 pom.ins(pom.size(),e-d); 
    81                                 cout<<pom; 
    82                         } 
    83                 }*/ 
    84                 vector<vec> norm; //do norm zapisujeme normalizacne faktory 
    85                 for (int h=1;h<=2;h++) //cyklus ktory ovplzvnuje konstantu h=1- model s konstantou, h=2, bez konstanty 
     63                 
     64                vector<vec> norm; //do tychto  poli zapisujeme normalizacne faktory 
     65                vector<vec> nfaktor; 
     66                for (int h=1;h<=2;h++) //cyklus ktory ovplyvnuje konstantu h=1- model s konstantou, h=2, bez konstanty 
    8667                {  
    8768                        bool b;                 //b pouzivame pri set_constant 
     
    9374                        while (g<=4)  //cyklus co meni rozmery matice V 
    9475                        { 
    95                                 mat V0 = 0.0001*eye ( g ); // aj tato matica ma vplyv na normalizacny faktor, nemoze byt aj preto taky velky, ako inak by sa dala zvolit? 
    96                                  
     76                                mat V0 = 0.0001*eye ( g );                               
    9777                                int p=0; 
    9878                                while (p<=1)  //tento cyklus prechadza vacsinou len raz, vtedy p=0 a nic to neovplvni, ale pri AR(2) modely to bude vykonavat 2 krat aj pre p=1, ked bude brat do condition aj rozne kanale z toho isteho casu  
     
    10282                                        {        
    10383                                                int j=p*(i+1); //j=0 alebo j=i+1 
    104                                          
    10584                                                while(j < ADdata.size()) 
    10685                                                { 
    10786                                                        ARX Ar; 
    108                                                         RARX RAr(g+h-3,0,b); 
     87                                                        RARX Rar(g-1,0,b); 
    10988                                                        Ar.set_statistics ( 1, V0 ); //nu is default (set to have finite moments) 
    11089                                                        Ar.set_constant ( b ); 
    11190                                                        Ar.validate();  // forgetting is default: 1.0 
    112                                                         vec pomocka;  //pri kazdej jednej hypoteze zapisujeme normalizacne faktory do pomocky, tu potom ako riadok pridame do norm 
    113                                                         for(int k = 0;k<341;k++) //prechadyame "po riadkoch", teda v case. Nejake hodnoty su len po index 340, dalej uz #INF000 
     91                                                        vec pomocka1;  //pri kazdej jednej hypoteze zapisujeme normalizacne faktory do pomocky, tu potom ako riadok pridame do norm 
     92                                                        vec pomocka2;  
     93                                                        for(int k = 0;k<6;k++) //prechadzame "po riadkoch", teda v case 
    11494                                                        { 
    11595                                                                vec condition;   
     
    11797                                                                predikce.ins(0,ADdata[3][k+2]);                 //predpovede nacitavame a zadavame do Bayes zvlast 
    11898                                                                condition.ins(0,ADdata[i][k+1]);                                 
    119                                                                 condition.ins(1,ADdata[j][k+p]);//zalezi na poradi v conditions? Teraz su na zaciatku starsie data 
    120                                                                 //cout<<condition; 
    121                                                                 RAr.bayes(condition.right(g+h-3)); 
     99                                                                condition.ins(1,ADdata[j][k+p]);        //teraz su starsie data viac vpravo 
    122100                                                                Ar.bayes(predikce,condition.right(g+h-3));      //z condition berem len urcity pocet prvkov, bud 0, 1,alebo 2, lebo nepotrebujem vzdy vsetky (AR(1) model)                                       
    123                                                                 pomocka.ins(pomocka.size(),Ar.posterior().lognc()); //nie je tu exponenciala! -aby to bolo mensie 
     101                                                                condition.ins(0,predikce); 
     102                                                                if (g+h!=3) Rar.bayes(condition.left(g+h-2)); // podmienka brani aby sme nepouzivali robust pre AR(o) model len s konstantou 
     103                                                                //cout<< "Normalne rozdel" <<Ar.posterior().lognc(); 
     104                                                                //cout << "Lapla normalizacny faktor" <<Rar.posterior->log_nc; 
     105                                                                pomocka1.ins(pomocka1.size(),Ar.posterior().lognc()); //nie je tu exponenciala! -aby to bolo mensie 
     106                                                                if (g+h!=3) pomocka2.ins(pomocka2.size(),exp(Rar.posterior->log_nc));                                                            
    124107                                                        }   
    125                                                         //cout<<pomocka; 
    126                                                         pomocka.ins(0,j+1); 
    127                                                         pomocka.ins(0,i+1); 
    128                                                         pomocka.ins(0,g); 
    129                                                         pomocka.ins(0,h); 
    130                                                         RAr.posterior->log_nc; 
    131                                                         norm.push_back(pomocka);   
     108                                                        //pridame na zaciatok cisla, ktore urcuje y akeho modelu budu pravdepodobnosti 
     109                                                        pomocka1.ins(0,j+1); 
     110                                                        pomocka1.ins(0,i+1); 
     111                                                        pomocka1.ins(0,g); 
     112                                                        pomocka1.ins(0,h); 
     113                                                        pomocka1.ins(0,1); // jednotka na zaciatku znamena normalne rozdelenie 
     114                                                        pomocka2.ins(0,j+1); 
     115                                                        pomocka2.ins(0,i+1); 
     116                                                        pomocka2.ins(0,g); 
     117                                                        pomocka2.ins(0,h); 
     118                                                        pomocka2.ins(0,2); //2 bude ako Laplacovo 
     119                                                        norm.push_back(pomocka1);   
     120                                                        if (g+h!=3) nfaktor.push_back(pomocka2);  //sem idu tie s Laplacovzm rozdelenim 
    132121                                                        if ((g==3 && h==2) || (g==4))  //tento cyklus sa bude opakovat, len ak mame maticu V0 roymeru 4x4, to je AR(2) model s konst, alebo podobne len g=3, h=2, teda AR(2)bez kons 
    133122                                                        { 
     
    158147                        } 
    159148                } 
    160                 //pocitanie maxima y kaydeho stlpcu norm 
     149                //pocitanie maxima z kazdeho stlpcu norm 
    161150                vector<double> max; 
    162                 for (int i=4;i<345;i++) 
     151                for (int i=5;i<norm[1].size();i++)   
    163152                { 
    164153                        double pom=norm[0][i]; 
     
    172161                        max.push_back(pom); 
    173162                } 
    174                 //nove pole namiesto norm, kde bude odcitane max a bude v spravnej forme, teda aj s exponencialov 
    175                 vector<vec> nfaktor; 
    176                 for (int j=1;j<norm.size();j++) 
    177                 { 
    178                         for (int i=1;j<norm[j].size();j++) 
    179                         { 
    180                                 nfaktor[j][i]=exp(norm[j][i+4]-max[i]);                  
    181                         } 
    182                 } 
    183  
    184  
     163                //v poli nfaktor uz mame zapisane normalizacne faktory pre Laplacovo rozdelenie, nie su take velke, preto nerobime odcitanie maxima 
     164                // teraz odcitujeme od tych y normalnym rozdelenim maximum a pridame dalej do pola nfaktor 
     165                        for (int i=0;i<norm.size();i++) 
     166                        { 
     167                                vec riadok; 
     168                                for (int j=0;j<5;j++) 
     169                                { 
     170                                        riadok.ins(riadok.size(),norm[i][j]);   //toto pridava tie cisla na zaciatku, ktore urcuju o aky model sa jedna 
     171                                } 
     172                                for (int j=0;j<norm[i].size()-5;j++) 
     173                                { 
     174                                        riadok.ins(riadok.size(),exp(norm[i][j+5]-max[j]));                      
     175                                } 
     176                                nfaktor.push_back(riadok);  
     177                        } 
     178                        // nfaktor ma 229 riadkov, to je 229 hypotez 
    185179                        vector<vec> prsti;  
    186180                        int m,n,p; 
    187                         for(p=0;p<115;p++)  
     181                        for(p=0;p<229;p++)  
    188182                        { 
    189183                                vec k; 
    190                                 k.ins(0,1/115.);        //log 
     184                                k.ins(0,1/229.); 
    191185                                prsti.push_back(k); 
    192186                        } 
    193                         // v ramci riadku v poli norm su hodnoty pre jednu hypotezu v roznych casoch, pocitanie pravdepodobnosti z norm. faktorov 
    194                         for (m=0;m<norm[1].size()-4;m++)  
    195                         {       double k=sumastlpec(m,norm,prsti); 
    196                                 for(n=0;n < norm.size();n++) 
    197                                 { 
    198                                         prsti[n].ins(prsti[n].size(),norm[n][m+4]*prsti[n][m]/k); 
    199                                         //prsti[n].ins(prsti[n].size(),norm[n][m+4]+prsti[n][m]-k);                              
     187                        // v ramci riadku v poli nfaktor su hodnoty pre jednu hypotezu v roznych casoch, pocitanie pravdepodobnosti z norm. faktorov 
     188                        for (m=0;m<nfaktor[2].size()-5;m++)  
     189                        {       double k=sumastlpec(m,nfaktor,prsti); 
     190                                for(n=0;n < nfaktor.size();n++) 
     191                                { 
     192                                        prsti[n].ins(prsti[n].size(),nfaktor[n][m+5]*prsti[n][m]/k); 
    200193                                } 
    201194                        }                
    202195                        ofstream file;   
    203                          
    204196                        file.open(outfile_strings[a]);                  //"prsti_hypot.txt",ios::app); 
    205197                        for(int i=0;i < prsti.size();i++) 
    206198                        { 
    207                                 file << norm[i][0] <<" "<<norm[i][1]<<" "<<norm[i][2]<<" "<<norm[i][3]<<" "; 
     199                                file << nfaktor[i][0] <<" "<<nfaktor[i][1]<<" "<<nfaktor[i][2]<<" "<<nfaktor[i][3]<<" "<<nfaktor[i][4]<<" "; 
    208200                                for(int j=0;j < prsti[i].size();j++) 
    209201                                { 
    210202                                        if(j!=prsti[i].size()-1) 
    211203                                        { 
    212                                                 file << prsti[i][j]<<" "; //exp 
     204                                                file << prsti[i][j]<<" ";  
    213205                                        }else 
    214206                                        { 
    215                                                 file<<prsti[i][j]<<endl; //exp 
     207                                                file<<prsti[i][j]<<endl;  
    216208                                        }                                        
    217209                                } 
     
    219211                        file<<endl; 
    220212                        file.close(); 
    221         //}      
     213                //}      
    222214        } 
    223215