Changeset 1798133 in tol
- Timestamp:
- Nov 18, 2008, 10:34:26 AM (18 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 56df6ca
- Parents:
- fedf88a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/modeling/BSR/BSR_P3_S2_BsrHlm_plantilla_de_modelo.lyx
rfedf88a r1798133 1 #LyX 1.5. 3created this file. For more info see http://www.lyx.org/1 #LyX 1.5.6 created this file. For more info see http://www.lyx.org/ 2 2 \lyxformat 276 3 3 \begin_document … … 82 82 \end_layout 83 83 84 \begin_layout Standard 85 A continuación exponemos las partes necesarias de código en las que consiste 86 una plantilla ejemplo para el uso de BSr-Hlm: 87 \newline 88 89 \newline 90 Este NameBlock especifica 91 los datos necesarios para la conexión con la base da datos BsrHlm 92 \newline 93 94 \begin_inset listings 95 inline false 96 status open 97 98 \begin_layout Standard 99 100 NameBlock DBConnection = [[ 101 \end_layout 102 103 \begin_layout Standard 104 105 NameBlock BsrHlm = DBConnect::Create("BsrHlm","bysfor","bys!98.", 106 \end_layout 107 108 \begin_layout Standard 109 110 "mysql","bysNPIDSO","d-mysql01","Almacenamiento de 111 \end_layout 112 113 \begin_layout Standard 114 115 modelos BSR-DynHLM"); 116 \end_layout 117 118 \begin_layout Standard 119 120 Real check = Real DBConnect::CheckAll(0) 121 \end_layout 122 123 \begin_layout Standard 124 125 ]]; 126 \end_layout 127 128 \end_inset 129 130 Activamos la base de datos BsrHlm: 131 \newline 132 133 \begin_inset listings 134 inline false 135 status open 136 137 \begin_layout Standard 138 139 Real DBConnection::BsrHlm::Activate(0); 140 \end_layout 141 142 \end_inset 143 144 Identificamos el nombre del modelo: 145 \newline 146 147 \begin_inset listings 148 inline false 149 status open 150 151 \begin_layout Standard 152 153 Text id_model = "BSR_Lat.Reg.Test_III"; 154 \end_layout 155 156 \end_inset 157 158 Descripción del objetivo del modelo: 159 \newline 160 161 \begin_inset listings 162 inline false 163 status open 164 165 \begin_layout Standard 166 167 Text ds_model = "Pruebas para nodos latentes regresivos"; 168 \end_layout 169 170 \end_inset 171 172 Identificamos la sesión: 173 \newline 174 175 \begin_inset listings 176 inline false 177 status open 178 179 \begin_layout Standard 180 181 Text id_session = "SES_LAT.REG_TEST.20081006_22"; 182 \end_layout 183 184 \end_inset 185 186 Descripción de la sesión: 187 \newline 188 189 \begin_inset listings 190 inline false 191 status open 192 193 \begin_layout Standard 194 195 Text ds_session = "Pruebas nodos regresivos latentes"; 196 \end_layout 197 198 \end_inset 199 200 Listado de autores: 201 \newline 202 203 \begin_inset listings 204 inline false 205 status open 206 207 \begin_layout Standard 208 209 Text ds_authors = "mafernandez@bayesinf.com;"; 210 \end_layout 211 212 \end_inset 213 214 Inserción del modelo en la base de datos: 215 \newline 216 217 \begin_inset listings 218 inline false 219 status open 220 221 \begin_layout Standard 222 223 Real BysMcmc::Bsr::DynHlm::DBApi::Mod.Create( 224 \end_layout 225 226 \begin_layout Standard 227 228 DBConnection::BsrHlm::_.defaultDB, id_model, ds_model); 229 \end_layout 230 231 \end_inset 232 233 Inserción de la sesión en la base de datos: 234 \newline 235 236 \begin_inset listings 237 inline false 238 status open 239 240 \begin_layout Standard 241 242 Real BysMcmc::Bsr::DynHlm::DBApi::Ses.Create( 243 \end_layout 244 245 \begin_layout Standard 246 247 DBConnection::BsrHlm::_.defaultDB, id_session, ds_session, 248 \end_layout 249 250 \begin_layout Standard 251 252 ds_authors); 253 \end_layout 254 255 \end_inset 256 257 Inserción del modelo-sesión en la base de datos: 258 \newline 259 260 \begin_inset listings 261 inline false 262 status open 263 264 \begin_layout Standard 265 266 Real BysMcmc::Bsr::DynHlm::DBApi::ModSes.Create( 267 \end_layout 268 269 \begin_layout Standard 270 271 DBConnection::BsrHlm::_.defaultDB, id_model, id_session); 272 \end_layout 273 274 \end_inset 275 276 Se crean en la base da datos los niveles de jerarquÃa . 277 \newline 278 279 \begin_inset listings 280 inline false 281 status open 282 283 \begin_layout Standard 284 285 Real BysMcmc::Bsr::DynHlm::DBApi::ModSes.SetLevels( 286 \end_layout 287 288 \begin_layout Standard 289 290 DBConnection::BsrHlm::_.defaultDB,id_model,id_session, 291 \end_layout 292 293 \begin_layout Standard 294 295 Real maxLatLevel = 1, 296 \end_layout 297 298 \begin_layout Standard 299 300 Real hasPrior = True, 301 \end_layout 302 303 \begin_layout Standard 304 305 Real hasMixture = False)}; 306 \end_layout 307 308 \end_inset 309 310 311 \end_layout 312 313 \begin_layout Standard 314 Es el momento de crear el NameBlock node.series.handler, responsable de manejar 315 las series asociada a un nodo observacional. 316 Describimos a continuación los elementos necesarios que aparecen en este 317 NameBlock, los comentarios realizados con ## indican variables que son 318 obligatorias: 319 \newline 320 321 \begin_inset listings 322 inline false 323 status open 324 325 \begin_layout Standard 326 327 ///////////////////////////////////////////////////////// 328 \end_layout 329 330 \begin_layout Standard 331 332 NameBlock node.series.handler (Real node) 333 \end_layout 334 335 \begin_layout Standard 336 337 ///////////////////////////////////////////////////////// 338 \end_layout 339 340 \begin_layout Standard 341 342 { [[ 343 \end_layout 344 345 \begin_layout Standard 346 347 // Se forma la etiqueta del nodo. 348 \end_layout 349 350 \begin_layout Standard 351 352 Text _node = FormatReal(node,"%1.0f"); 353 \end_layout 354 355 \begin_layout Standard 356 357 //## Nombre del nodo 358 \end_layout 359 360 \begin_layout Standard 361 362 Text _.description = "Nodo observacional referido al output "+_node; 363 \end_layout 364 365 \begin_layout Standard 366 367 //# Contiene todas las series output e input con nombres únicos dentro 368 \end_layout 369 370 \begin_layout Standard 371 372 //de cada nodo 373 \end_layout 374 375 \begin_layout Standard 376 377 Set _.series = { SetOfSerie ( 378 \end_layout 379 380 \begin_layout Standard 381 382 Output = ..... 383 \end_layout 384 385 \begin_layout Standard 386 387 Input1 = ..... 388 \end_layout 389 390 \begin_layout Standard 391 392 Input2 = ..... 393 \end_layout 394 395 \begin_layout Standard 396 397 .... 398 \end_layout 399 400 \begin_layout Standard 401 402 ) 403 \end_layout 404 405 \begin_layout Standard 406 407 }; 408 \end_layout 409 410 \begin_layout Standard 411 412 //# Se indexa para acelerar búsquedas 413 \end_layout 414 415 \begin_layout Standard 416 417 Real _check_unique = SetIndexByName(_.series); 418 \end_layout 419 420 \begin_layout Standard 421 422 //## Devuelve serie del nodo dado un identificaador único 423 \end_layout 424 425 \begin_layout Standard 426 427 GetSerie (Text id_serie) 428 \end_layout 429 430 \begin_layout Standard 431 432 { 433 \end_layout 434 435 \begin_layout Standard 436 437 _.series[id_serie] 438 \end_layout 439 440 \begin_layout Standard 441 442 } 443 \end_layout 444 445 \begin_layout Standard 446 447 //##Información adicional del modelo sobre el output 448 \end_layout 449 450 \begin_layout Standard 451 452 NameBlock _.output = 453 \end_layout 454 455 \begin_layout Standard 456 457 {[[ 458 \end_layout 459 460 \begin_layout Standard 461 462 //##Nombre con el que reconoce la serie en la base de datos 463 \end_layout 464 465 \begin_layout Standard 466 467 Text _.name = "Output"; 468 \end_layout 469 470 \begin_layout Standard 471 472 //##Serie output 473 \end_layout 474 475 \begin_layout Standard 476 477 Serie _.serie = _.series::Output; 478 \end_layout 479 480 \begin_layout Standard 481 482 //##Número de sigmas para la distribución a priori de los omitidos 483 \end_layout 484 485 \begin_layout Standard 486 487 Real _.mis_pri_sig_fac = 5; 488 \end_layout 489 490 \begin_layout Standard 491 492 //##Valor mÃnimo a priori para los omitidos 493 \end_layout 494 495 \begin_layout Standard 496 497 Real _.mis_pri_min = 0; 498 \end_layout 499 500 \begin_layout Standard 501 502 //##Valor máximo a priori para los omitidos 503 \end_layout 504 505 \begin_layout Standard 506 507 Real _.mis_pri_max = 2; 508 \end_layout 509 510 \begin_layout Standard 511 512 //##Fecha inicial de estimación del nodo 513 \end_layout 514 515 \begin_layout Standard 516 517 Date _.firstDate = y2001m01; 518 \end_layout 519 520 \begin_layout Standard 521 522 //##Fecha final de estimación del nodo 523 \end_layout 524 525 \begin_layout Standard 526 527 Date _.lastDate = y2013m01; 528 \end_layout 529 530 \begin_layout Standard 531 532 //Desviación tÃpica de los residuos. 533 Si es ? se estimará 534 \end_layout 535 536 \begin_layout Standard 537 538 Real _.sigma = ?; 539 \end_layout 540 541 \begin_layout Standard 542 543 //##Parte ARIMA asociada 544 \end_layout 545 546 \begin_layout Standard 547 548 Set _.arima = SetOfSet ( 549 \end_layout 550 551 \begin_layout Standard 552 553 ARIMAStruct (1,1,1,1) 554 \end_layout 555 556 \begin_layout Standard 557 558 ) 559 \end_layout 560 561 \begin_layout Standard 562 563 ]]}; 564 \end_layout 565 566 \begin_layout Standard 567 568 //##Información adicional del modelo sobre los inputs 569 \end_layout 570 571 \begin_layout Standard 572 573 //Cada elemento es un NameBlock cuyo nombre será el identificador 574 en 575 \end_layout 576 577 \begin_layout Standard 578 579 //la base de datos de BsrHlm y es obligatorio que se llame igual que 580 \end_layout 581 582 \begin_layout Standard 583 584 //la corespondiente serie input 585 \end_layout 586 587 \begin_layout Standard 588 589 Set _.input = { 590 \end_layout 591 592 \begin_layout Standard 593 594 SetOfNameBlock( 595 \end_layout 596 597 \begin_layout Standard 598 599 NameBlock Input1= [[ 600 \end_layout 601 602 \begin_layout Standard 603 604 //##Serie input 605 \end_layout 606 607 \begin_layout Standard 608 609 Serie _.serie = _.series::Input1; 610 \end_layout 611 612 \begin_layout Standard 613 614 //##Si es falso no se usará este input 615 \end_layout 616 617 \begin_layout Standard 618 619 Real _.enabled = 1; 620 \end_layout 621 622 \begin_layout Standard 623 624 //##Número de sigmas para la distribución a priori de los omitidos 625 \end_layout 626 627 \begin_layout Standard 628 629 Real _.mis_pri_sig_fac = 5; 630 \end_layout 631 632 \begin_layout Standard 633 634 //##Valor mÃnimo a priori para los omitidos 635 \end_layout 636 637 \begin_layout Standard 638 639 Real _.mis_pri_min = 0; 640 \end_layout 641 642 \begin_layout Standard 643 644 //##Valor máximo a priori para los omitidos 645 \end_layout 646 647 \begin_layout Standard 648 649 Real _.mis_pri_max = 2; 650 \end_layout 651 652 \begin_layout Standard 653 654 //##Valor inicial del parámetro 655 \end_layout 656 657 \begin_layout Standard 658 659 Real _.initValue = 0.1; 660 \end_layout 661 662 \begin_layout Standard 663 664 //##Valor mÃnimo a priori del parámetro 665 \end_layout 666 667 \begin_layout Standard 668 669 Real _.minimum = -1; 670 \end_layout 671 672 \begin_layout Standard 673 674 //##Valor máximo a priori del parámetro 675 \end_layout 676 677 \begin_layout Standard 678 679 Real _.maximum = 1 680 \end_layout 681 682 \begin_layout Standard 683 684 ]], 685 \end_layout 686 687 \begin_layout Standard 688 689 NameBlock Input2 = [[ 690 \end_layout 691 692 \begin_layout Standard 693 694 ..... 695 \end_layout 696 697 \begin_layout Standard 698 699 ..... 700 \end_layout 701 702 \begin_layout Standard 703 704 ]], 705 \end_layout 706 707 \begin_layout Standard 708 709 ..... 710 \end_layout 711 712 \begin_layout Standard 713 714 // Se indexa para acelerar busquedas 715 \end_layout 716 717 \begin_layout Standard 718 719 Real _checkUniqueInput = SetIndexByName(_.input) 720 \end_layout 721 722 \begin_layout Standard 723 724 ]] 725 \end_layout 726 727 \begin_layout Standard 728 729 }; 730 \end_layout 731 732 \end_inset 733 734 735 \end_layout 736 737 \begin_layout Standard 738 Ahora se llama al manejador de series del modelo, notar que el bucle For 739 debe correr a todos los nodos observacionales que se quieran calcular: 740 \newline 741 742 \begin_inset listings 743 inline false 744 status open 745 746 \begin_layout Standard 747 748 /////////////////////////////////////////////////////// 749 \end_layout 750 751 \begin_layout Standard 752 753 NameBlock series.handler = 754 \end_layout 755 756 \begin_layout Standard 757 758 BysMcmc::Bsr::DynHlm::DBApi::CreateSeriesHandler( 759 \end_layout 760 761 \begin_layout Standard 762 763 For (1,num_nodos, NameBlock (Real node) 764 \end_layout 765 766 \begin_layout Standard 767 768 { 769 \end_layout 770 771 \begin_layout Standard 772 773 WriteLn("[series.handler] creando de series del nodo "+ IntText(node)); 774 \end_layout 775 776 \begin_layout Standard 777 778 NameBlock aux = node.series.handler(node); 779 \end_layout 780 781 \begin_layout Standard 782 783 Eval(aux::_.id_node+"=aux") 784 \end_layout 785 786 \begin_layout Standard 787 788 })); 789 \end_layout 790 791 \end_inset 792 793 Ahora se crea en la base de datos los nodos observacionales : 794 \newline 795 796 \begin_inset listings 797 inline false 798 status open 799 800 \begin_layout Standard 801 802 Real BysMcmc::Bsr::DynHlm::DBApi::ModSes.Obs.CreateAll( 803 \end_layout 804 805 \begin_layout Standard 806 807 DBConnection::BsrHlm::_.defaultDB, id_model, id_session, 808 \end_layout 809 810 \begin_layout Standard 811 812 series.handler::_.obs.node); 813 \end_layout 814 815 \end_inset 816 817 818 \end_layout 819 820 \begin_layout Standard 821 Ahora viene la parte del código dónde se usarán las funciones necesarias 822 para implementar en el modelo los nodos latentes, nodos a priori etc... 823 Incluimos algunos ejemplos del uso de estas funciones 824 \newline 825 826 \newline 827 828 \series bold 829 Nodos latentes homogéneos. 830 831 \series default 832 833 \end_layout 834 835 \begin_layout Standard 836 \begin_inset listings 837 inline false 838 status open 839 840 \begin_layout Standard 841 842 Real { 843 \end_layout 844 845 \begin_layout Standard 846 847 BysMcmc::Bsr::DynHlm::DBApi::ModSes.Lat.Homog_1.Create 848 \end_layout 849 850 \begin_layout Standard 851 852 (DBConnection::BsrHlm::_.defaultDB, 853 \end_layout 854 855 \begin_layout Standard 856 857 id_model, 858 \end_layout 859 860 \begin_layout Standard 861 862 id_session, 863 \end_layout 864 865 \begin_layout Standard 866 867 // identificación del nodo latente 868 \end_layout 869 870 \begin_layout Standard 871 872 id_node = "Lat."+child_input, 873 \end_layout 874 875 \begin_layout Standard 876 877 // descripción del node latente 878 \end_layout 879 880 \begin_layout Standard 881 882 description = "Fuerza la homogeneidad de la variable ...", 883 \end_layout 884 885 \begin_layout Standard 886 887 // Nivel de latencia en la jerarquÃa 888 \end_layout 889 890 \begin_layout Standard 891 892 Real level = 1, 893 \end_layout 894 895 \begin_layout Standard 896 897 //Orden de aparición dentro del nivel 898 \end_layout 899 900 \begin_layout Standard 901 902 Copy(level.1_number := level.1_number+1), 903 \end_layout 904 905 \begin_layout Standard 906 907 //Nombre del hiperparámetro 908 \end_layout 909 910 \begin_layout Standard 911 912 Text id_parameter = "hiper", 913 \end_layout 914 915 \begin_layout Standard 916 917 //Valor inicial del hiperparámetro 918 \end_layout 919 920 \begin_layout Standard 921 922 Real initValue = -0.1, 923 \end_layout 924 925 \begin_layout Standard 926 927 //Desviación tÃpica de los residuos. 928 Si es ? se estimará 929 \end_layout 930 931 \begin_layout Standard 932 933 Real sigma = 0.05, 934 \end_layout 935 936 \begin_layout Standard 937 938 //Valor mÃnimo del hiperparámetro 939 \end_layout 940 941 \begin_layout Standard 942 943 Real minimum = -1, 944 \end_layout 945 946 \begin_layout Standard 947 948 //Valor máximo del hiperparámetro 949 \end_layout 950 951 \begin_layout Standard 952 953 Real maximum = 10, 954 \end_layout 955 956 \begin_layout Standard 957 958 //Selección de los parámetros y nodos hijos con el input habilitado 959 \end_layout 960 961 \begin_layout Standard 962 963 //Es un Set formado por tantos NameBlocks como parémetroas hijos 964 \end_layout 965 966 \begin_layout Standard 967 968 //(betas) formen el nodo latente homogéneo 969 \end_layout 970 971 \begin_layout Standard 972 973 [[ 974 \end_layout 975 976 \begin_layout Standard 977 978 NameBlock beta1 = [[ 979 \end_layout 980 981 \begin_layout Standard 982 983 Text _.id_parameter = "Nombre del nodo donde está beta1" 984 \end_layout 985 986 \begin_layout Standard 987 988 Text _.id_node = "Nodo donde está situado el beta1" 989 \end_layout 990 991 \begin_layout Standard 992 993 Real _.sigma_factor = 1 994 \end_layout 995 996 \begin_layout Standard 997 998 ]], 999 \end_layout 1000 1001 \begin_layout Standard 1002 1003 NameBlock beta2 = [[ ... 1004 \end_layout 1005 1006 \begin_layout Standard 1007 1008 ...]], 1009 \end_layout 1010 1011 \begin_layout Standard 1012 1013 ... 1014 \end_layout 1015 1016 \begin_layout Standard 1017 1018 ... 1019 \end_layout 1020 1021 \begin_layout Standard 1022 1023 ]] 1024 \end_layout 1025 1026 \begin_layout Standard 1027 1028 )}; 1029 \end_layout 1030 1031 \end_inset 1032 1033 1034 \series bold 1035 Nodos latentes generalizados. 1036 \end_layout 1037 1038 \begin_layout Standard 1039 \begin_inset listings 1040 inline false 1041 status open 1042 1043 \begin_layout Standard 1044 1045 Real { 1046 \end_layout 1047 1048 \begin_layout Standard 1049 1050 // Set de hiperparámetros. 1051 Es un set con tantos NameBlocks como 1052 \end_layout 1053 1054 \begin_layout Standard 1055 1056 // hiperparámetros tiene el nodo lantente. 1057 \end_layout 1058 1059 \begin_layout Standard 1060 1061 Set father_parameters = [[ 1062 \end_layout 1063 1064 \begin_layout Standard 1065 1066 NameBlock Lam1 = ModSes.Lat.Father.Param.Def ( 1067 \end_layout 1068 1069 \begin_layout Standard 1070 1071 Text id_parameter = "hiper1", 1072 \end_layout 1073 1074 \begin_layout Standard 1075 1076 Real init_value = 0.1, 1077 \end_layout 1078 1079 \begin_layout Standard 1080 1081 Real min = 0, 1082 \end_layout 1083 1084 \begin_layout Standard 1085 1086 Real max = 1 1087 \end_layout 1088 1089 \begin_layout Standard 1090 1091 ), 1092 \end_layout 1093 1094 \begin_layout Standard 1095 1096 NameBlock Lam2 = ModSes.Lat.Father.Param.Def ( 1097 \end_layout 1098 1099 \begin_layout Standard 1100 1101 ...... 1102 \end_layout 1103 1104 \begin_layout Standard 1105 1106 ...... 1107 \end_layout 1108 1109 \begin_layout Standard 1110 1111 ), 1112 \end_layout 1113 1114 \begin_layout Standard 1115 1116 ........ 1117 \end_layout 1118 1119 \begin_layout Standard 1120 1121 ........ 1122 \end_layout 1123 1124 \begin_layout Standard 1125 1126 ]]; 1127 \end_layout 1128 1129 \begin_layout Standard 1130 1131 // Set de parámetros hijo. 1132 Es un set con tantos NameBlocks como 1133 \end_layout 1134 1135 \begin_layout Standard 1136 1137 // paramétros hijo tenga el nodo latente regresivo. 1138 \end_layout 1139 1140 \begin_layout Standard 1141 1142 Set node_childs = [[ 1143 \end_layout 1144 1145 \begin_layout Standard 1146 1147 NameBlock beta1 = ModSes.Lat.Child.Param.Def ( 1148 \end_layout 1149 1150 \begin_layout Standard 1151 1152 Text id_node = "node1", 1153 \end_layout 1154 1155 \begin_layout Standard 1156 1157 Text id_parameter = "beta1", 1158 \end_layout 1159 1160 \begin_layout Standard 1161 1162 Real sigma_factor = 1 1163 \end_layout 1164 1165 \begin_layout Standard 1166 1167 ), 1168 \end_layout 1169 1170 \begin_layout Standard 1171 1172 NameBlock beta2 = ModSes.Lat.Child.Param.Def ( 1173 \end_layout 1174 1175 \begin_layout Standard 1176 1177 ..... 1178 \end_layout 1179 1180 \begin_layout Standard 1181 1182 ..... 1183 \end_layout 1184 1185 \begin_layout Standard 1186 1187 ), 1188 \end_layout 1189 1190 \begin_layout Standard 1191 1192 ...... 1193 \end_layout 1194 1195 \begin_layout Standard 1196 1197 ...... 1198 \end_layout 1199 1200 \begin_layout Standard 1201 1202 ]]; 1203 \end_layout 1204 1205 \begin_layout Standard 1206 1207 Real BysMcmc::Bsr::DynHlm::DBApi::ModSes.Lat.Create ( 1208 \end_layout 1209 1210 \begin_layout Standard 1211 1212 DBConnection::BsrHlm::_.defaultDB, 1213 \end_layout 1214 1215 \begin_layout Standard 1216 1217 id_model, 1218 \end_layout 1219 1220 \begin_layout Standard 1221 1222 id_session, 1223 \end_layout 1224 1225 \begin_layout Standard 1226 1227 // Nombre del nodo latente 1228 \end_layout 1229 1230 \begin_layout Standard 1231 1232 id_node = "Lat.Reg", 1233 \end_layout 1234 1235 \begin_layout Standard 1236 1237 // Descripcion del nodo latente 1238 \end_layout 1239 1240 \begin_layout Standard 1241 1242 description = "Establece un nodo regresivo latente...", 1243 \end_layout 1244 1245 \begin_layout Standard 1246 1247 //Nivel de latencia en la jerarquÃa 1248 \end_layout 1249 1250 \begin_layout Standard 1251 1252 Real level = 1, 1253 \end_layout 1254 1255 \begin_layout Standard 1256 1257 // Orden de aparición dentro del nivel 1258 \end_layout 1259 1260 \begin_layout Standard 1261 1262 Copy(level.1_number := level.1_number+1), 1263 \end_layout 1264 1265 \begin_layout Standard 1266 1267 father_parameters, 1268 \end_layout 1269 1270 \begin_layout Standard 1271 1272 node_childs, 1273 \end_layout 1274 1275 \begin_layout Standard 1276 1277 // Valor de la sigma del bloque latente conjunto 1278 \end_layout 1279 1280 \begin_layout Standard 1281 1282 Real sigma = 0.1, 1283 \end_layout 1284 1285 \begin_layout Standard 1286 1287 // Matrix X del nodo latente 1288 \end_layout 1289 1290 \begin_layout Standard 1291 1292 Matrix X 1293 \end_layout 1294 1295 \begin_layout Standard 1296 1297 ) 1298 \end_layout 1299 1300 \begin_layout Standard 1301 1302 }; 1303 \end_layout 1304 1305 \end_inset 1306 1307 1308 \series bold 1309 Nodos latentes con combinacion de output. 1310 \end_layout 1311 1312 \begin_layout Standard 1313 \begin_inset listings 1314 inline false 1315 status open 1316 1317 \begin_layout Standard 1318 1319 Real { 1320 \end_layout 1321 1322 \begin_layout Standard 1323 1324 Set father_parameters = [[ 1325 \end_layout 1326 1327 \begin_layout Standard 1328 1329 NameBlock Lam1 = ModSes.Lat.Father.Param.Def ( 1330 \end_layout 1331 1332 \begin_layout Standard 1333 1334 Text id_parameter = "hiper1", 1335 \end_layout 1336 1337 \begin_layout Standard 1338 1339 Real init_value = 0.1, 1340 \end_layout 1341 1342 \begin_layout Standard 1343 1344 Real min = 0, 1345 \end_layout 1346 1347 \begin_layout Standard 1348 1349 Real max = 1 1350 \end_layout 1351 1352 \begin_layout Standard 1353 1354 ), 1355 \end_layout 1356 1357 \begin_layout Standard 1358 1359 NameBlock Lam2 = ModSes.Lat.Father.Param.Def ( 1360 \end_layout 1361 1362 \begin_layout Standard 1363 1364 ...... 1365 \end_layout 1366 1367 \begin_layout Standard 1368 1369 ...... 1370 \end_layout 1371 1372 \begin_layout Standard 1373 1374 ), 1375 \end_layout 1376 1377 \begin_layout Standard 1378 1379 ........ 1380 \end_layout 1381 1382 \begin_layout Standard 1383 1384 ........ 1385 \end_layout 1386 1387 \begin_layout Standard 1388 1389 ]]; 1390 \end_layout 1391 1392 \begin_layout Standard 1393 1394 // Set de parámetros hijo. 1395 Es un set con tantos NameBlocks como 1396 \end_layout 1397 1398 \begin_layout Standard 1399 1400 // paramétros hijo tenga el nodo latente regresivo. 1401 \end_layout 1402 1403 \begin_layout Standard 1404 1405 Set node_childs = [[ 1406 \end_layout 1407 1408 \begin_layout Standard 1409 1410 NameBlock beta1 = ModSes.Lat.Child.Param.Def ( 1411 \end_layout 1412 1413 \begin_layout Standard 1414 1415 Text id_node = "node1", 1416 \end_layout 1417 1418 \begin_layout Standard 1419 1420 Text id_parameter = "beta1", 1421 \end_layout 1422 1423 \begin_layout Standard 1424 1425 Real sigma_factor = 1 1426 \end_layout 1427 1428 \begin_layout Standard 1429 1430 ), 1431 \end_layout 1432 1433 \begin_layout Standard 1434 1435 NameBlock beta2 = ModSes.Lat.Child.Param.Def ( 1436 \end_layout 1437 1438 \begin_layout Standard 1439 1440 ..... 1441 \end_layout 1442 1443 \begin_layout Standard 1444 1445 ..... 1446 \end_layout 1447 1448 \begin_layout Standard 1449 1450 ), 1451 \end_layout 1452 1453 \begin_layout Standard 1454 1455 ...... 1456 \end_layout 1457 1458 \begin_layout Standard 1459 1460 ...... 1461 \end_layout 1462 1463 \begin_layout Standard 1464 1465 ]]; 1466 \end_layout 1467 1468 \begin_layout Standard 1469 1470 \end_layout 1471 1472 \begin_layout Standard 1473 1474 Real ModSes.Lat.OutComb.Create ( 1475 \end_layout 1476 1477 \begin_layout Standard 1478 1479 DBConnection::BsrHlm::_.defaultDB, 1480 \end_layout 1481 1482 \begin_layout Standard 1483 1484 id_model, 1485 \end_layout 1486 1487 \begin_layout Standard 1488 1489 id_session, 1490 \end_layout 1491 1492 \begin_layout Standard 1493 1494 // Nombre del nodo latente 1495 \end_layout 1496 1497 \begin_layout Standard 1498 1499 id_node = "Lat.Reg", 1500 \end_layout 1501 1502 \begin_layout Standard 1503 1504 // Descripción del nodo latente 1505 \end_layout 1506 1507 \begin_layout Standard 1508 1509 description = "Establece un nodo regresivo latente...", 1510 \end_layout 1511 1512 \begin_layout Standard 1513 1514 // Nivel de latencia en la jerarquÃa 1515 \end_layout 1516 1517 \begin_layout Standard 1518 1519 Real level = 1, 1520 \end_layout 1521 1522 \begin_layout Standard 1523 1524 // Orden de aparición dentro del nivel 1525 \end_layout 1526 1527 \begin_layout Standard 1528 1529 Copy(level.1_number := level.1_number+1), 1530 \end_layout 1531 1532 \begin_layout Standard 1533 1534 father_parameters, 1535 \end_layout 1536 1537 \begin_layout Standard 1538 1539 node_childs, 1540 \end_layout 1541 1542 \begin_layout Standard 1543 1544 // Valor de Sigma para todo el nodo latente 1545 \end_layout 1546 1547 \begin_layout Standard 1548 1549 Real sigma = 0.1, 1550 \end_layout 1551 1552 \begin_layout Standard 1553 1554 // Matriz X del nodo latente 1555 \end_layout 1556 1557 \begin_layout Standard 1558 1559 Matrix X, 1560 \end_layout 1561 1562 \begin_layout Standard 1563 1564 // Matriz Y del nodo latente 1565 \end_layout 1566 1567 \begin_layout Standard 1568 1569 Matrix Y, 1570 \end_layout 1571 1572 \begin_layout Standard 1573 1574 // Un Set de Reales. 1575 Cada valor real especifica el i-ésimo valor 1576 \end_layout 1577 1578 \begin_layout Standard 1579 1580 // de sigma de la i-ésima ecuación del nodo latente 1581 \end_layout 1582 1583 \begin_layout Standard 1584 1585 Set SigmaLat = [[ 1586 \end_layout 1587 1588 \begin_layout Standard 1589 1590 Real sigma1 = 0.1 1591 \end_layout 1592 1593 \begin_layout Standard 1594 1595 Real sigma2 = 0.2 1596 \end_layout 1597 1598 \begin_layout Standard 1599 1600 .... 1601 \end_layout 1602 1603 \begin_layout Standard 1604 1605 .... 1606 \end_layout 1607 1608 \begin_layout Standard 1609 1610 ]]) 1611 \end_layout 1612 1613 \begin_layout Standard 1614 1615 }; 1616 \end_layout 1617 1618 \end_inset 1619 1620 1621 \series bold 1622 Nodo a priori 1623 \series default 1624 . 1625 \newline 1626 1627 \begin_inset listings 1628 inline false 1629 status open 1630 1631 \begin_layout Standard 1632 1633 Real{ 1634 \end_layout 1635 1636 \begin_layout Standard 1637 1638 BysMcmc::Bsr::DynHlm::DPApi::ModSes.Pri.Homog_1.Create( 1639 \end_layout 1640 1641 \begin_layout Standard 1642 1643 DBConnection::BsrHlm::_.defaultDB, 1644 \end_layout 1645 1646 \begin_layout Standard 1647 1648 id_model, 1649 \end_layout 1650 1651 \begin_layout Standard 1652 1653 id_session, 1654 \end_layout 1655 1656 \begin_layout Standard 1657 1658 // identificación del nodo 1659 \end_layout 1660 1661 \begin_layout Standard 1662 1663 id_node = "Pri", 1664 \end_layout 1665 1666 \begin_layout Standard 1667 1668 // descripción del nodo 1669 \end_layout 1670 1671 \begin_layout Standard 1672 1673 description = "Prior para..." 1674 \end_layout 1675 1676 \begin_layout Standard 1677 1678 // Conjunto de NameBlock. 1679 Cada NameBlock especifica que 1680 \end_layout 1681 1682 \begin_layout Standard 1683 1684 // parámetro o hiperparámetro es el que tiene el a priori. 1685 \end_layout 1686 1687 \begin_layout Standard 1688 1689 [[ 1690 \end_layout 1691 1692 \begin_layout Standard 1693 1694 NameBlock hiper1 = [[ 1695 \end_layout 1696 1697 \begin_layout Standard 1698 1699 // Nombre del nodo donde está hiper1 1700 \end_layout 1701 1702 \begin_layout Standard 1703 1704 Text _.id_node = "node_hiper1", 1705 \end_layout 1706 1707 \begin_layout Standard 1708 1709 // Nombre del parámetro que tiene el prior 1710 \end_layout 1711 1712 \begin_layout Standard 1713 1714 Text _.id_parameter = "Lam1", 1715 \end_layout 1716 1717 \begin_layout Standard 1718 1719 // Valor medio de la Normal prior 1720 \end_layout 1721 1722 \begin_layout Standard 1723 1724 Real _.average = 0.1, 1725 \end_layout 1726 1727 \begin_layout Standard 1728 1729 // Valor de sigma de la Normla prior 1730 \end_layout 1731 1732 \begin_layout Standard 1733 1734 Real _.sigma = 0.01 1735 \end_layout 1736 1737 \begin_layout Standard 1738 1739 ]] 1740 \end_layout 1741 1742 \begin_layout Standard 1743 1744 NameBlock hiper2 = [[ 1745 \end_layout 1746 1747 \begin_layout Standard 1748 1749 .... 1750 \end_layout 1751 1752 \begin_layout Standard 1753 1754 .... 1755 1756 \end_layout 1757 1758 \begin_layout Standard 1759 1760 ]] 1761 \end_layout 1762 1763 \begin_layout Standard 1764 1765 .... 1766 \end_layout 1767 1768 \begin_layout Standard 1769 1770 \end_layout 1771 1772 \begin_layout Standard 1773 1774 ]] 1775 \end_layout 1776 1777 \begin_layout Standard 1778 1779 ) 1780 \end_layout 1781 1782 \begin_layout Standard 1783 1784 }; 1785 \end_layout 1786 1787 \end_inset 1788 1789 1790 \end_layout 1791 1792 \begin_layout Standard 1793 1794 \series bold 1795 Nodo a priori combinación del output 1796 \series default 1797 . 1798 \newline 1799 1800 \begin_inset listings 1801 inline false 1802 status open 1803 1804 \begin_layout Standard 1805 1806 Real { 1807 \end_layout 1808 1809 \begin_layout Standard 1810 1811 BysMcmc::Bsr::DynHlm::DPApi::ModSes.Pri.Out.Comb.Create( 1812 \end_layout 1813 1814 \begin_layout Standard 1815 1816 DBConnection::BsrHlm::_.defaultDB, 1817 \end_layout 1818 1819 \begin_layout Standard 1820 1821 id_model, 1822 \end_layout 1823 1824 \begin_layout Standard 1825 1826 id_session, 1827 \end_layout 1828 1829 \begin_layout Standard 1830 1831 // identificación del nodo 1832 \end_layout 1833 1834 \begin_layout Standard 1835 1836 id_node = "Pri.OutComb", 1837 \end_layout 1838 1839 \begin_layout Standard 1840 1841 // descripción del nodo 1842 \end_layout 1843 1844 \begin_layout Standard 1845 1846 description = "Prior para...", 1847 \end_layout 1848 1849 \begin_layout Standard 1850 1851 Copy(level.2_number := level.2_number+1), 1852 \end_layout 1853 1854 \begin_layout Standard 1855 1856 // Set de sets, cada set contiene dos reales que especifican 1857 \end_layout 1858 1859 \begin_layout Standard 1860 1861 // el valor de la media y sigma para cada ecuacion del nodo a priori 1862 \end_layout 1863 1864 \begin_layout Standard 1865 1866 [[ 1867 \end_layout 1868 1869 \begin_layout Standard 1870 1871 [[ mu_1, sigma_1 ]], 1872 \end_layout 1873 1874 \begin_layout Standard 1875 1876 [[ mu_2, sigma_2 ]], 1877 \end_layout 1878 1879 \begin_layout Standard 1880 1881 ............ 1882 \end_layout 1883 1884 \begin_layout Standard 1885 1886 ]], 1887 \end_layout 1888 1889 \begin_layout Standard 1890 1891 // Set de NameBlocks, tantos NameBlocks como parámetros entran 1892 \end_layout 1893 1894 \begin_layout Standard 1895 1896 // en la combinación lineal del output 1897 \end_layout 1898 1899 \begin_layout Standard 1900 1901 [[ 1902 \end_layout 1903 1904 \begin_layout Standard 1905 1906 NameBlock param1 = [[ 1907 \end_layout 1908 1909 \begin_layout Standard 1910 1911 // Nombre de ese parámetro 1912 \end_layout 1913 1914 \begin_layout Standard 1915 1916 Text _.id_node = "param1", 1917 \end_layout 1918 1919 \begin_layout Standard 1920 1921 // Localización de ese parámetro 1922 \end_layout 1923 1924 \begin_layout Standard 1925 1926 Text _.id_parameter = "node.param1" 1927 \end_layout 1928 1929 \begin_layout Standard 1930 1931 ]], 1932 \end_layout 1933 1934 \begin_layout Standard 1935 1936 NameBlock param2 = [[ 1937 \end_layout 1938 1939 \begin_layout Standard 1940 1941 ..... 1942 1943 \end_layout 1944 1945 \begin_layout Standard 1946 1947 ]] 1948 \end_layout 1949 1950 \begin_layout Standard 1951 1952 ]], 1953 \end_layout 1954 1955 \begin_layout Standard 1956 1957 // Matriz Y responsable de la combinación lineal del output 1958 \end_layout 1959 1960 \begin_layout Standard 1961 1962 Matrix Y 1963 \end_layout 1964 1965 \begin_layout Standard 1966 1967 ) 1968 \end_layout 1969 1970 \begin_layout Standard 1971 1972 } 1973 \end_layout 1974 1975 \end_inset 1976 1977 1978 \end_layout 1979 1980 \begin_layout Standard 1981 1982 \series bold 1983 Nodo restricción de orden. 1984 \series default 1985 1986 \newline 1987 1988 \begin_inset listings 1989 inline false 1990 status open 1991 1992 \begin_layout Standard 1993 1994 Real { 1995 \end_layout 1996 1997 \begin_layout Standard 1998 1999 BysMcmc::Bsr::DynHlm::DBApi::ModSes.Mix.OrderRelation.Create( 2000 \end_layout 2001 2002 \begin_layout Standard 2003 2004 DBConnection::BsrHlm::_.defaultDB, 2005 \end_layout 2006 2007 \begin_layout Standard 2008 2009 id_model, 2010 \end_layout 2011 2012 \begin_layout Standard 2013 2014 id_session, 2015 \end_layout 2016 2017 \begin_layout Standard 2018 2019 id_node_param1, "param1", 2020 \end_layout 2021 2022 \begin_layout Standard 2023 2024 /* <= */ // param1 <= param2 2025 \end_layout 2026 2027 \begin_layout Standard 2028 2029 id_node_param2, "param2") 2030 \end_layout 2031 2032 \begin_layout Standard 2033 2034 }; 2035 \end_layout 2036 2037 \end_inset 2038 2039 2040 \end_layout 2041 2042 \begin_layout Standard 2043 Finalmente la llamada al estimador BSR se realiza por el siguiente código: 2044 \newline 2045 2046 \begin_inset listings 2047 inline false 2048 status open 2049 2050 \begin_layout Standard 2051 2052 NameBlock bsr.config = 2053 \end_layout 2054 2055 \begin_layout Standard 2056 2057 [[ 2058 \end_layout 2059 2060 \begin_layout Standard 2061 2062 //MCMC dimensions 2063 \end_layout 2064 2065 \begin_layout Standard 2066 2067 Real mcmc.burnin = 100; 2068 \end_layout 2069 2070 \begin_layout Standard 2071 2072 Real mcmc.sampleLength = 2000; 2073 \end_layout 2074 2075 \begin_layout Standard 2076 2077 Real mcmc.cacheLength = 100; 2078 \end_layout 2079 2080 \begin_layout Standard 2081 2082 //Basic master configuration 2083 \end_layout 2084 2085 \begin_layout Standard 2086 2087 Real basic.cholesky.epsilon = 1.E-10; 2088 \end_layout 2089 2090 \begin_layout Standard 2091 2092 Real basic.cholesky.warningFreq = 100; 2093 \end_layout 2094 2095 \begin_layout Standard 2096 2097 Real basic.truncMNormal.gibbsNumIter = 5; 2098 \end_layout 2099 2100 \begin_layout Standard 2101 2102 //Report configuration 2103 \end_layout 2104 2105 \begin_layout Standard 2106 2107 Real report.raftery.diag.q = 0.025; 2108 \end_layout 2109 2110 \begin_layout Standard 2111 2112 Real report.raftery.diag.r = 0.007; 2113 \end_layout 2114 2115 \begin_layout Standard 2116 2117 Real report.raftery.diag.s = 0.950; 2118 \end_layout 2119 2120 \begin_layout Standard 2121 2122 Real report.raftery.diag.eps = 0.001; 2123 \end_layout 2124 2125 \begin_layout Standard 2126 2127 Real report.acf.lag = 20, 2128 \end_layout 2129 2130 \begin_layout Standard 2131 2132 Real report.histogram.parts = 100; 2133 \end_layout 2134 2135 \begin_layout Standard 2136 2137 Real report.kerDens.points = 0; 2138 \end_layout 2139 2140 \begin_layout Standard 2141 2142 Real report.kerDens.numIter = 2; 2143 \end_layout 2144 2145 \begin_layout Standard 2146 2147 Real report.kerDens.epsilon = 0.001; 2148 \end_layout 2149 2150 \begin_layout Standard 2151 2152 //Generic flags 2153 \end_layout 2154 2155 \begin_layout Standard 2156 2157 Real do.resume = False; 2158 \end_layout 2159 2160 \begin_layout Standard 2161 2162 Real do.report = True; 2163 \end_layout 2164 2165 \begin_layout Standard 2166 2167 Real do.eval = True; 2168 \end_layout 2169 2170 \begin_layout Standard 2171 2172 Real do.linear.effects = True 2173 \end_layout 2174 2175 \begin_layout Standard 2176 2177 ]]; 2178 \end_layout 2179 2180 \begin_layout Standard 2181 2182 /////////////////////////////////////////////////////////// 2183 \end_layout 2184 2185 \begin_layout Standard 2186 2187 \end_layout 2188 2189 \begin_layout Standard 2190 2191 /////////////////////////////////////////////////////////// 2192 \end_layout 2193 2194 \begin_layout Standard 2195 2196 // Estimación del modelo con el sistema Bsr::DynHlm 2197 \end_layout 2198 2199 \begin_layout Standard 2200 2201 /////////////////////////////////////////////////////////// 2202 \end_layout 2203 2204 \begin_layout Standard 2205 2206 Set bsr.estim = {BysMcmc::Bsr::DynHlm::DBApi::Estim( 2207 \end_layout 2208 2209 \begin_layout Standard 2210 2211 DBConnection::BsrHlm::_.defaultDB, 2212 \end_layout 2213 2214 \begin_layout Standard 2215 2216 id_model, 2217 \end_layout 2218 2219 \begin_layout Standard 2220 2221 id_session, 2222 \end_layout 2223 2224 \begin_layout Standard 2225 2226 Path::_.data.out, 2227 \end_layout 2228 2229 \begin_layout Standard 2230 2231 series.handler, 2232 \end_layout 2233 2234 \begin_layout Standard 2235 2236 bsr.config 2237 \end_layout 2238 2239 \begin_layout Standard 2240 2241 )}; 2242 \end_layout 2243 2244 \begin_layout Standard 2245 2246 \end_layout 2247 2248 \begin_layout Standard 2249 2250 // Desconectamos de la base de datos 2251 \end_layout 2252 2253 \begin_layout Standard 2254 2255 Real DBConnection::BsrHlm::Close(0); 2256 \end_layout 2257 2258 \end_inset 2259 2260 2261 \end_layout 2262 84 2263 \end_body 85 2264 \end_document
Note: See TracChangeset
for help on using the changeset viewer.
