root/applications/robust/main.cpp @ 1336

Revision 1336, 9.1 kB (checked in by sindj, 13 years ago)

Sampling dokoncen, zbyva logaritmovat normalizacni faktor a testovat. JS

Line 
1
2/*!
3\file
4\brief Robust
5\author Vasek Smidl
6
7 */
8
9#include "robustlib.h"
10#include <vector>
11#include <iostream>
12#include <fstream>
13
14using namespace itpp;
15//using namespace bdm;
16
17const int emlig_size = 2;
18
19
20int main ( int argc, char* argv[] ) {
21       
22        /*
23        // EXPERIMENT: 100 AR model generated time series of length of 30 from y_t=0.95*y_(t-1)+0.05*y_(t-2)+0.2*e_t,
24        // where e_t is normally, student(4) and cauchy distributed are tested using robust AR model, to obtain the
25        // variance of location parameter estimators and compare it to the classical setup.
26        vector<vector<vector<string>>> string_lists;
27        string_lists.push_back(vector<vector<string>>());
28        string_lists.push_back(vector<vector<string>>());
29        string_lists.push_back(vector<vector<string>>());
30
31        char* file_strings[3] = {"c:\\ar_normal.txt", "c:\\ar_student.txt", "c:\\ar_cauchy.txt"};
32       
33
34        for(int i = 0;i<3;i++)
35        {       
36                ifstream myfile(file_strings[i]);
37                if (myfile.is_open())
38                {
39                        while ( myfile.good() )
40                        {
41                                string line;
42                                getline(myfile,line);
43                               
44                                vector<string> parsed_line;
45                                while(line.find(',') != string::npos)
46                                {
47                                        int loc = line.find(',');
48                                        parsed_line.push_back(line.substr(0,loc));
49                                        line.erase(0,loc+1);                                   
50                                }                               
51
52                                string_lists[i].push_back(parsed_line);
53                        }
54                        myfile.close();
55                }
56        }
57
58        for(int j = 0;j<string_lists.size();j++)
59        {
60               
61                for(int i = 0;i<string_lists[j].size()-1;i++)
62                {
63                        vector<vec> conditions;
64                        //emlig* emliga = new emlig(2);
65                        RARX* my_rarx = new RARX(2,30);
66
67                        for(int k = 1;k<string_lists[j][i].size();k++)
68                        {
69                                vec condition;
70                                //condition.ins(0,1);                           
71                                condition.ins(0,string_lists[j][i][k]);                         
72                                conditions.push_back(condition);
73
74                                //cout << "orig:" << condition << endl;
75
76                                if(conditions.size()>1)
77                                {               
78                                        conditions[k-2].ins(0,string_lists[j][i][k]);
79                                       
80                                }
81
82                                if(conditions.size()>2)
83                                {
84                                        conditions[k-3].ins(0,string_lists[j][i][k]);
85
86                                        //cout << "modi:" << conditions[k-3] << endl;
87
88                                        my_rarx->bayes(conditions[k-3]);
89
90                                       
91                                        //if(k>5)
92                                        //{
93                                        //      cout << "MaxLik coords:" << emliga->minimal_vertex->get_coordinates() << endl;
94                                        //}
95                                       
96                                }                               
97                               
98                        }
99
100                        //emliga->step_me(0);
101                        /*
102                        ofstream myfile;
103                        myfile.open("c:\\robust_ar1.txt",ios::app);
104                        myfile << my_rarx->minimal_vertex->get_coordinates()[0] << ";";
105                        myfile.close();
106
107                        myfile.open("c:\\robust_ar2.txt",ios::app);
108                        myfile << emliga->minimal_vertex->get_coordinates()[1] << ";";
109                        myfile.close();
110                       
111
112                        cout << "MaxLik coords:" << emliga->minimal_vertex->get_coordinates() << endl;
113                        cout << "Step: " << i << endl;
114                }
115
116                cout << "One experiment finished." << endl;
117
118                ofstream myfile;
119                myfile.open("c:\\robust_ar1.txt",ios::app);
120                myfile << endl;
121                myfile.close();
122
123                myfile.open("c:\\robust_ar2.txt",ios::app);
124                myfile << endl;
125                myfile.close();
126        }*/
127   
128       
129        // EXPERIMENT: A moving window estimation and prediction of RARX is tested on data generated from
130    // y_t=0.95*y_(t-1)+0.05*y_(t-2)+0.2*e_t, where e_t is normally, student(4) and cauchy distributed. It
131    // can be compared to the classical setup.
132       
133
134        vector<vector<string>> strings;
135
136        char* file_strings[3] = {"c:\\ar_student_single.txt", "c:\\ar_student_single.txt","c:\\ar_cauchy_single.txt"};
137
138        for(int i = 0;i<3;i++)
139        {                       
140                ifstream myfile(file_strings[i]);
141                if (myfile.is_open())
142                {                       
143                        string line;
144                        getline(myfile,line);
145                               
146                        vector<string> parsed_line;
147                        while(line.find(',') != string::npos)
148                        {
149                                int loc = line.find(',');
150                                parsed_line.push_back(line.substr(0,loc));
151                                line.erase(0,loc+1);                                   
152                        }                               
153
154                        strings.push_back(parsed_line);
155                       
156                        myfile.close();
157                }
158        }
159       
160        for(int j = 0;j<strings.size();j++)
161        {               
162                vector<vec> conditions;
163                //emlig* emliga = new emlig(2);
164                RARX* my_rarx = new RARX(3,20,true);
165
166                for(int k = 1;k<170;k++)
167                {
168                        vec condition;
169                        //condition.ins(0,1);                           
170                        condition.ins(0,strings[j][k]);                         
171                        conditions.push_back(condition);
172
173                        //cout << "orig:" << condition << endl;
174
175                        if(conditions.size()>1)
176                        {               
177                                conditions[k-2].ins(0,strings[j][k]);
178                                       
179                        }
180
181                        if(conditions.size()>2)
182                        {
183                                conditions[k-3].ins(0,strings[j][k]);
184
185                                // cout << "modi:" << conditions[k-3] << endl;
186
187                                my_rarx->bayes(conditions[k-3]);
188
189                                       
190                               
191                                if(k>10)
192                                {
193                                        //my_rarx->posterior->step_me(0);
194
195                                        mat samples = my_rarx->posterior->sample_mat(50);
196                                       
197                                       
198                                        cout << "MaxLik coords:" << my_rarx->posterior->minimal_vertex->get_coordinates() << endl;
199
200                                        for(int s = 0;s<samples.rows();s++)
201                                        {
202                                               
203                                                double avg_parameter = samples.get_row(s)*ones(samples.cols())/samples.cols();                                         
204                                               
205                                                ofstream myfile;
206                                                char fstring[80];
207                                                strcpy(fstring,file_strings[j]);
208
209                                                char es[5];
210                                                strcat(fstring,itoa(s,es,10));
211
212                                                strcat(fstring,"_res.txt");
213                                               
214
215                                                myfile.open(fstring,ios::app);
216                                               
217                                                //myfile << my_rarx->posterior->minimal_vertex->get_coordinates()[0];
218                                                myfile << avg_parameter;
219                                               
220                                                if(k!=strings[j].size()-1)
221                                                {
222                                                        myfile << ",";
223                                                }
224                                                else
225                                                {
226                                                        myfile << endl;
227                                                }
228                                                myfile.close();
229                                        }
230                                }                                       
231                        }       
232                       
233                        //emliga->step_me(0);
234                        /*
235                        ofstream myfile;
236                        myfile.open("c:\\robust_ar1.txt",ios::app);
237                        myfile << my_rarx->minimal_vertex->get_coordinates()[0] << ";";
238                        myfile.close();
239
240                        myfile.open("c:\\robust_ar2.txt",ios::app);
241                        myfile << emliga->minimal_vertex->get_coordinates()[1] << ";";
242                        myfile.close();
243                       
244
245                        cout << "MaxLik coords:" << emliga->minimal_vertex->get_coordinates() << endl;
246                        cout << "Step: " << i << endl;*/
247                }
248        }
249               
250                /*
251                cout << "One experiment finished." << endl;
252
253                ofstream myfile;
254                myfile.open("c:\\robust_ar1.txt",ios::app);
255                myfile << endl;
256                myfile.close();
257
258                myfile.open("c:\\robust_ar2.txt",ios::app);
259                myfile << endl;
260                myfile.close();*/
261       
262
263        //emlig* emlig1 = new emlig(emlig_size);
264
265        //emlig1->step_me(0);
266        //emlig* emlig2 = new emlig(emlig_size);
267       
268        /*
269        emlig1->set_correction_factors(4);
270
271        for(int j = 0;j<emlig1->correction_factors.size();j++)
272        {
273                for(set<my_ivec>::iterator vec_ref = emlig1->correction_factors[j].begin();vec_ref!=emlig1->correction_factors[j].end();vec_ref++)
274                {
275                        cout << j << "    ";
276                       
277                        for(int i=0;i<(*vec_ref).size();i++)
278                        {
279                                cout << (*vec_ref)[i];
280                        }
281
282                        cout << endl;
283                }
284        }*/
285       
286        /*
287    vec condition5 = "1.0 1.0 1.01";//"-0.3 1.7 1.5";
288
289        emlig1->add_condition(condition5);
290        //emlig1->step_me(0);
291
292
293        vec condition1a = "-1.0 1.02 0.5";
294        //vec condition1b = "1.0 1.0 1.01";
295        emlig1->add_condition(condition1a);
296        //emlig2->add_condition(condition1b);
297
298        vec condition2a = "-0.3 1.7 1.5";
299        //vec condition2b = "-1.0 1.0 1.0";
300        emlig1->add_condition(condition2a);
301        //emlig2->add_condition(condition2b);
302
303        vec condition3a = "0.5 -1.01 1.0";
304        //vec condition3b = "0.5 -1.01 1.0";
305
306        emlig1->add_condition(condition3a);
307        //emlig2->add_condition(condition3b);   
308
309        vec condition4a = "-0.5 -1.0 1.0";
310        //vec condition4b = "-0.5 -1.0 1.0";   
311
312        emlig1->add_condition(condition4a);
313        //cout << "************************************************" << endl;
314        //emlig2->add_condition(condition4b);
315        //cout << "************************************************" << endl;
316       
317        //cout << emlig1->minimal_vertex->get_coordinates();
318       
319        //emlig1->remove_condition(condition3a);
320        //emlig1->step_me(0);
321        //emlig1->remove_condition(condition2a);
322        //emlig1->remove_condition(condition1a);
323        //emlig1->remove_condition(condition5);
324       
325
326        //emlig1->step_me(0);
327        //emlig2->step_me(0);
328       
329
330        // DA SE POUZIT PRO VYPIS DO SOUBORU
331        // emlig1->step_me(0);
332
333        //emlig1->remove_condition(condition1);
334       
335       
336
337       
338       
339        /*
340        for(int i = 0;i<100;i++)
341        {
342                cout << endl << "Step:" << i << endl;           
343
344                double condition[emlig_size+1];         
345
346                for(int k = 0;k<=emlig_size;k++)
347                {
348                        condition[k] = (rand()-RAND_MAX/2)/1000.0;             
349                }
350                       
351
352                vec* condition_vec = new vec(condition,emlig_size+1);
353                emlig1->add_condition(*condition_vec);
354
355                /*
356                for(polyhedron* toprow_ref = emlig1->statistic.rows[emlig_size]; toprow_ref != emlig1->statistic.end_poly; toprow_ref = toprow_ref->next_poly)
357                {
358                        cout << ((toprow*)toprow_ref)->probability << endl;
359                }
360                */
361                /*
362                cout << emlig1->statistic_rowsize(emlig_size) << endl << endl;
363       
364                /*
365                if(i-emlig1->number_of_parameters >= 0)
366                {
367                        pause(30);
368                }
369                */
370
371                // emlig1->step_me(i);
372               
373                /*
374                vector<int> sizevector;
375                for(int s = 0;s<=emlig1->number_of_parameters;s++)
376                {
377                        sizevector.push_back(emlig1->statistic_rowsize(s));
378                }
379                */
380        //}
381   
382
383
384       
385        /*
386        emlig1->step_me(1);
387
388        vec condition = "2.0 0.0 1.0"; 
389
390        emlig1->add_condition(condition);
391
392        vector<int> sizevector;
393        for(int s = 0;s<=emlig1->number_of_parameters;s++)
394        {
395                sizevector.push_back(emlig1->statistic_rowsize(s));
396        }
397
398        emlig1->step_me(2);
399
400        condition = "2.0 1.0 0.0";
401
402        emlig1->add_condition(condition);
403
404        sizevector.clear();
405        for(int s = 0;s<=emlig1->number_of_parameters;s++)
406        {
407                sizevector.push_back(emlig1->statistic_rowsize(s));
408        }
409        */
410
411        return 0;
412}
413
414
Note: See TracBrowser for help on using the browser.