Actividad Integradora en Equipo
Equipo 7
Tania Ortega
Humberto Mena
Ares Meléndez
library(readr)
library(maps)
library(gplots)
##
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
##
## lowess
library(plm)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ purrr 1.0.2
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::between() masks plm::between()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks plm::lag(), stats::lag()
## ✖ dplyr::lead() masks plm::lead()
## ✖ purrr::map() masks maps::map()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(dplyr)
library(readxl)
library(ggplot2)
library(sf)
## Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
library(viridis)
## Loading required package: viridisLite
##
## Attaching package: 'viridis'
##
## The following object is masked from 'package:maps':
##
## unemp
library(dplyr)
library(maps)
Obtención de base de datos
population <- read_csv("USA_Population.csv")
## Rows: 6020 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): State
## dbl (2): Year, Population
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Selección de 5 estados
California (CA)
Arizona (AZ)
Inidiana (IN)
Montana (MT)
Maine (ME)
CA <- population[population$State == "CA",]
AZ <- population[population$State == "AZ",]
IN <- population[population$State == "IN",]
MT <- population[population$State == "MT",]
ME <- population[population$State == "ME",]
Serie de tiempo de la población y estado
ts_CA <- ts(data=CA$Population, start = c(1900,1))
ts_CA
## Time Series:
## Start = 1900
## End = 2019
## Frequency = 1
## [1] 1490000 1550000 1623000 1702000 1792000 1893000 1976000 2054000
## [9] 2161000 2282000 2406000 2534000 2668000 2811000 2934000 3008000
## [17] 3071000 3171000 3262000 3339000 3554000 3795000 3991000 4270000
## [25] 4541000 4730000 4929000 5147000 5344000 5531000 5711000 5824000
## [33] 5894000 5963000 6060000 6175000 6341000 6528000 6656000 6785000
## [41] 6950000 7237000 7735000 8506000 8945000 9344000 9559000 9832000
## [49] 10064000 10337000 10677000 11134000 11635000 12251000 12746000 13133000
## [57] 13713000 14264000 14880000 15467000 15870000 16497000 17072000 17668000
## [65] 18151000 18585000 18858000 19176000 19394000 19711000 19971069 20345939
## [73] 20585469 20868728 21173865 21537849 21935909 22352396 22835958 23256880
## [81] 23800800 24285933 24820009 25360026 25844393 26441109 27102237 27777158
## [89] 28464249 29218164 29950111 30414114 30875920 31147208 31317179 31493525
## [97] 31780829 32217708 32682794 33145121 33987977 34479458 34871843 35253159
## [105] 35574576 35827943 36021202 36250311 36604337 36961229 37319502 37638369
## [113] 37948800 38260787 38596972 38918045 39167117 39358497 39461588 39512223
ts_AZ <- ts(data=AZ$Population, start = c(1900,1))
ts_AZ
## Time Series:
## Start = 1900
## End = 2019
## Frequency = 1
## [1] 124000 131000 138000 144000 151000 158000 167000 176000 186000
## [10] 196000 206000 212000 217000 236000 253000 263000 282000 311000
## [19] 320000 329000 340000 351000 360000 371000 382000 393000 403000
## [28] 414000 422000 430000 434000 429000 426000 426000 428000 434000
## [37] 443000 453000 466000 484000 499000 490000 524000 692000 610000
## [46] 594000 616000 653000 690000 714000 756000 785000 842000 894000
## [55] 933000 987000 1053000 1125000 1193000 1261000 1321000 1407000 1471000
## [64] 1521000 1556000 1584000 1614000 1646000 1682000 1737000 1775399 1895814
## [73] 2008291 2124438 2223196 2284847 2346157 2425197 2515316 2635571 2737774
## [82] 2810107 2889861 2968925 3067135 3183538 3308262 3437103 3535183 3622185
## [91] 3679056 3762394 3867333 3993390 4147561 4306908 4432308 4552207 4667277
## [100] 4778332 5160586 5273477 5396255 5510364 5652404 5839077 6029141 6167681
## [109] 6280362 6343154 6407172 6472643 6554978 6632764 6730413 6829676 6941072
## [118] 7044008 7158024 7278717
ts_IN <- ts(data=IN$Population, start = c(1900,1))
ts_IN
## Time Series:
## Start = 1900
## End = 2019
## Frequency = 1
## [1] 2518000 2541000 2567000 2594000 2614000 2635000 2663000 2679000 2677000
## [10] 2678000 2713000 2751000 2785000 2824000 2857000 2873000 2897000 2910000
## [19] 2880000 2906000 2947000 2976000 2965000 3042000 3086000 3119000 3148000
## [28] 3191000 3212000 3226000 3242000 3257000 3281000 3304000 3319000 3332000
## [37] 3348000 3374000 3386000 3403000 3433000 3483000 3507000 3449000 3440000
## [46] 3427000 3702000 3779000 3877000 3958000 3967000 4096000 4148000 4182000
## [55] 4264000 4363000 4458000 4529000 4583000 4613000 4674000 4730000 4736000
## [64] 4799000 4856000 4922000 4999000 5053000 5093000 5143000 5195392 5253396
## [73] 5302435 5338277 5361890 5365766 5389088 5425638 5470214 5501174 5490721
## [82] 5480435 5467922 5450395 5458322 5459211 5454108 5473012 5491735 5523693
## [91] 5555097 5602062 5648649 5701965 5745626 5791819 5834908 5872370 5907617
## [100] 5942901 6091866 6127760 6155967 6196638 6233007 6278616 6332669 6379599
## [109] 6424806 6459325 6490432 6516528 6537703 6568713 6593644 6608422 6634304
## [118] 6658078 6695497 6732219
ts_MT <- ts(data=MT$Population, start = c(1900,1))
ts_MT
## Time Series:
## Start = 1900
## End = 2019
## Frequency = 1
## [1] 245000 261000 270000 282000 293000 305000 322000 332000 346000
## [10] 363000 380000 397000 414000 433000 452000 469000 487000 505000
## [19] 501000 534000 543000 546000 543000 538000 538000 535000 531000
## [28] 527000 541000 524000 539000 540000 540000 541000 545000 550000
## [37] 554000 554000 552000 555000 558000 543000 518000 485000 469000
## [46] 477000 514000 531000 542000 569000 593000 596000 602000 616000
## [55] 624000 636000 656000 667000 666000 669000 679000 696000 698000
## [64] 703000 706000 706000 707000 701000 700000 694000 694409 710814
## [73] 718732 726798 736419 748208 757317 769953 782317 787305 788752
## [82] 795328 803986 814031 820905 822320 813739 805063 800202 799636
## [91] 799824 807837 822436 839876 854923 868522 876656 878706 879533
## [100] 882779 903773 906961 911667 919630 930009 940102 952692 964706
## [109] 976415 983982 990697 997316 1003783 1013569 1021869 1030475 1040859
## [118] 1052482 1060665 1068778
ts_ME <- ts(data=ME$Population, start = c(1900,1))
ts_ME
## Time Series:
## Start = 1900
## End = 2019
## Frequency = 1
## [1] 695000 699000 703000 709000 719000 723000 729000 731000 735000
## [10] 740000 745000 751000 753000 763000 772000 774000 775000 777000
## [19] 760000 762000 771000 775000 778000 781000 788000 792000 793000
## [28] 796000 797000 797000 800000 807000 815000 821000 829000 836000
## [37] 840000 842000 843000 846000 849000 852000 839000 806000 801000
## [46] 800000 832000 854000 878000 903000 917000 916000 915000 913000
## [55] 927000 934000 938000 943000 944000 957000 975000 995000 994000
## [64] 993000 993000 997000 999000 1004000 994000 992000 993722 1015390
## [73] 1034292 1045655 1059040 1071995 1088412 1103578 1113566 1122563 1126860
## [82] 1133033 1136684 1144772 1155635 1162936 1170126 1184574 1203840 1219961
## [91] 1231296 1235439 1235748 1238256 1237687 1237438 1241436 1245215 1247554
## [100] 1253040 1277072 1285692 1295960 1306513 1313688 1318787 1323619 1327040
## [109] 1330509 1329590 1327629 1328284 1327729 1328009 1330513 1328262 1331317
## [118] 1334612 1339057 1344212
Pronósticos de los 5 estados con el modelo ARIMA
para las siguientes décadas: 2030, 2040, 2050, 2060, 2070.
arima1 <- auto.arima(ts_CA, D=1)
summary(arima1)
## Series: ts_CA
## ARIMA(0,2,0)
##
## sigma^2 = 9.971e+09: log likelihood = -1525.79
## AIC=3053.57 AICc=3053.61 BIC=3056.34
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -88.02939 99017.45 65793.72 0.06388803 0.560492 0.2059178
## ACF1
## Training set -0.1174913
arima2 <- auto.arima(ts_AZ, D=1)
summary(arima2)
## Series: ts_AZ
## ARIMA(0,2,1)
##
## Coefficients:
## ma1
## -0.7815
## s.e. 0.0620
##
## sigma^2 = 1.504e+09: log likelihood = -1414.15
## AIC=2832.3 AICc=2832.4 BIC=2837.84
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 3812.388 38291.02 20396.69 0.3291156 1.521771 0.3286796 0.04665136
arima3 <- auto.arima(ts_IN, D=1)
summary(arima3)
## Series: ts_IN
## ARIMA(1,1,1) with drift
##
## Coefficients:
## ar1 ma1 drift
## 0.8402 -0.6540 35005.847
## s.e. 0.1209 0.1717 6587.041
##
## sigma^2 = 1.188e+09: log likelihood = -1410.69
## AIC=2829.37 AICc=2829.72 BIC=2840.49
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 196.8848 33881.45 18351.97 -0.01160382 0.4553768 0.4776668
## ACF1
## Training set 0.03082154
arima4 <- auto.arima(ts_MT, D=1)
summary(arima4)
## Series: ts_MT
## ARIMA(1,1,0) with drift
##
## Coefficients:
## ar1 drift
## 0.5308 7017.935
## s.e. 0.0772 1636.222
##
## sigma^2 = 72671363: log likelihood = -1245.05
## AIC=2496.09 AICc=2496.3 BIC=2504.43
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -48.99213 8417.516 5757.345 0.03315024 1.01426 0.5910594
## ACF1
## Training set -0.04391617
arima5 <- auto.arima(ts_ME, D=1)
summary(arima5)
## Series: ts_ME
## ARIMA(0,1,2) with drift
##
## Coefficients:
## ma1 ma2 drift
## 0.5693 0.3749 5449.970
## s.e. 0.0821 0.0864 1163.278
##
## sigma^2 = 44209727: log likelihood = -1215.04
## AIC=2438.08 AICc=2438.43 BIC=2449.2
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 9.981605 6537.283 4235.301 -0.007616192 0.4497604 0.6027132
## ACF1
## Training set 0.02999791
Pronósticos dentro de las siguientes 5 décadas
Pronóstico California
pronostico_CA5 <- forecast(arima1, level =c(50), h=50)
pronostico_CA5
## Point Forecast Lo 50 Hi 50
## 2020 39562858 39495508 39630208
## 2021 39613493 39462894 39764092
## 2022 39664128 39412128 39916128
## 2023 39714763 39345873 40083653
## 2024 39765398 39265918 40264878
## 2025 39816033 39173556 40458510
## 2026 39866668 39069774 40663562
## 2027 39917303 38955355 40879251
## 2028 39967938 38830942 41104934
## 2029 40018573 38697073 41340073
## 2030 40069208 38554210 41584206
## 2031 40119843 38402752 41836934
## 2032 40170478 38243048 42097908
## 2033 40221113 38075409 42366817
## 2034 40271748 37900115 42643381
## 2035 40322383 37717414 42927352
## 2036 40373018 37527536 43218500
## 2037 40423653 37330688 43516618
## 2038 40474288 37127061 43821515
## 2039 40524923 36916831 44133015
## 2040 40575558 36700160 44450956
## 2041 40626193 36477201 44775185
## 2042 40676828 36248095 45105561
## 2043 40727463 36012973 45441953
## 2044 40778098 35771960 45784236
## 2045 40828733 35525172 46132294
## 2046 40879368 35272720 46486016
## 2047 40930003 35014707 46845299
## 2048 40980638 34751231 47210045
## 2049 41031273 34482387 47580159
## 2050 41081908 34208262 47955554
## 2051 41132543 33928941 48336145
## 2052 41183178 33644505 48721851
## 2053 41233813 33355031 49112595
## 2054 41284448 33060592 49508304
## 2055 41335083 32761258 49908908
## 2056 41385718 32457098 50314338
## 2057 41436353 32148175 50724531
## 2058 41486988 31834552 51139424
## 2059 41537623 31516290 51558956
## 2060 41588258 31193445 51983071
## 2061 41638893 30866073 52411713
## 2062 41689528 30534228 52844828
## 2063 41740163 30197961 53282365
## 2064 41790798 29857323 53724273
## 2065 41841433 29512361 54170505
## 2066 41892068 29163123 54621013
## 2067 41942703 28809653 55075753
## 2068 41993338 28451996 55534680
## 2069 42043973 28090194 55997752
plot(pronostico_CA5)

Pronóstico Arizona
pronostico_AZ5 <- forecast(arima2, level =c(50), h=50)
pronostico_AZ5
## Point Forecast Lo 50 Hi 50
## 2020 7385734 7359578 7411890
## 2021 7492750 7451520 7533980
## 2022 7599767 7543975 7655559
## 2023 7706783 7636159 7777408
## 2024 7813800 7727831 7899769
## 2025 7920817 7818902 8022731
## 2026 8027833 7909340 8146327
## 2027 8134850 7999135 8270565
## 2028 8241866 8088291 8395442
## 2029 8348883 8176817 8520949
## 2030 8455900 8264725 8647074
## 2031 8562916 8352028 8773804
## 2032 8669933 8438740 8901126
## 2033 8776949 8524873 9029025
## 2034 8883966 8610442 9157490
## 2035 8990982 8695458 9286507
## 2036 9097999 8779933 9416065
## 2037 9205016 8863878 9546153
## 2038 9312032 8947306 9676759
## 2039 9419049 9030225 9807872
## 2040 9526065 9112646 9939485
## 2041 9633082 9194579 10071586
## 2042 9740099 9276031 10204167
## 2043 9847115 9357011 10337219
## 2044 9954132 9437528 10470735
## 2045 10061148 9517590 10604707
## 2046 10168165 9597202 10739128
## 2047 10275182 9676374 10873989
## 2048 10382198 9755110 11009286
## 2049 10489215 9833419 11145011
## 2050 10596231 9911305 11281158
## 2051 10703248 9988775 11417721
## 2052 10810265 10065834 11554695
## 2053 10917281 10142488 11692074
## 2054 11024298 10218742 11829853
## 2055 11131314 10294602 11968027
## 2056 11238331 10370072 12106590
## 2057 11345348 10445156 12245539
## 2058 11452364 10519860 12384869
## 2059 11559381 10594187 12524574
## 2060 11666397 10668142 12664652
## 2061 11773414 10741730 12805098
## 2062 11880431 10814953 12945908
## 2063 11987447 10887817 13087078
## 2064 12094464 10960324 13228604
## 2065 12201480 11032478 13370483
## 2066 12308497 11104283 13512711
## 2067 12415513 11175742 13655285
## 2068 12522530 11246858 13798202
## 2069 12629547 11317635 13941458
plot(pronostico_AZ5)

Pronóstico Indiana
pronostico_IN5 <- forecast(arima3, level =c(50), h=50)
pronostico_IN5
## Point Forecast Lo 50 Hi 50
## 2020 6765351 6742107 6788594
## 2021 6798782 6762721 6834844
## 2022 6832465 6784775 6880155
## 2023 6866359 6807637 6925082
## 2024 6900431 6831115 6969748
## 2025 6934652 6855124 7014181
## 2026 6968999 6879616 7058382
## 2027 7003451 6904555 7102347
## 2028 7037991 6929910 7146072
## 2029 7072606 6955655 7189557
## 2030 7107283 6981765 7232802
## 2031 7142013 7008214 7275812
## 2032 7176787 7034982 7318592
## 2033 7211598 7062045 7361151
## 2034 7246440 7089385 7403495
## 2035 7281308 7116982 7445634
## 2036 7316199 7144820 7487577
## 2037 7351107 7172883 7529332
## 2038 7386032 7201154 7570909
## 2039 7420969 7229622 7612316
## 2040 7455917 7258272 7653562
## 2041 7490875 7287094 7694655
## 2042 7525840 7316077 7735603
## 2043 7560811 7345210 7776412
## 2044 7595789 7374485 7817092
## 2045 7630770 7403894 7857647
## 2046 7665756 7433428 7898084
## 2047 7700745 7463080 7938410
## 2048 7735736 7492844 7978629
## 2049 7770730 7522714 8018746
## 2050 7805726 7552684 8058768
## 2051 7840723 7582749 8098698
## 2052 7875722 7612904 8138540
## 2053 7910722 7643145 8178299
## 2054 7945723 7673467 8217978
## 2055 7980724 7703867 8257581
## 2056 8015726 7734342 8297111
## 2057 8050729 7764887 8336572
## 2058 8085733 7795500 8375965
## 2059 8120736 7826178 8415295
## 2060 8155740 7856917 8454563
## 2061 8190745 7887717 8493773
## 2062 8225749 7918574 8532925
## 2063 8260754 7949485 8572023
## 2064 8295759 7980450 8611068
## 2065 8330764 8011466 8650063
## 2066 8365769 8042530 8689009
## 2067 8400775 8073642 8727907
## 2068 8435780 8104800 8766760
## 2069 8470786 8136002 8805569
plot(pronostico_IN5)

Pronóstico Montana
pronostico_MT5 <- forecast(arima4, level =c(50), h=50)
pronostico_MT5
## Point Forecast Lo 50 Hi 50
## 2020 1076377 1070627 1082127
## 2021 1083704 1073190 1094217
## 2022 1090885 1076082 1105689
## 2023 1097990 1079378 1116603
## 2024 1105054 1083049 1127059
## 2025 1112097 1087042 1137152
## 2026 1119128 1091300 1146955
## 2027 1126152 1095777 1156528
## 2028 1133174 1100435 1165913
## 2029 1140194 1105244 1175143
## 2030 1147213 1110181 1184245
## 2031 1154231 1115227 1193236
## 2032 1161250 1120366 1202133
## 2033 1168268 1125587 1210948
## 2034 1175286 1130881 1219690
## 2035 1182304 1136239 1228368
## 2036 1189322 1141655 1236988
## 2037 1196340 1147123 1245556
## 2038 1203358 1152638 1254077
## 2039 1210376 1158197 1262554
## 2040 1217393 1163795 1270992
## 2041 1224411 1169430 1279393
## 2042 1231429 1175099 1287760
## 2043 1238447 1180799 1296095
## 2044 1245465 1186529 1304401
## 2045 1252483 1192286 1312680
## 2046 1259501 1198070 1320932
## 2047 1266519 1203877 1329161
## 2048 1273537 1209708 1337366
## 2049 1280555 1215560 1345550
## 2050 1287573 1221433 1353713
## 2051 1294591 1227325 1361856
## 2052 1301609 1233236 1369982
## 2053 1308627 1239164 1378089
## 2054 1315645 1245109 1386180
## 2055 1322662 1251071 1394254
## 2056 1329680 1257047 1402313
## 2057 1336698 1263039 1410358
## 2058 1343716 1269044 1418388
## 2059 1350734 1275063 1426405
## 2060 1357752 1281096 1434409
## 2061 1364770 1287140 1442400
## 2062 1371788 1293197 1450379
## 2063 1378806 1299265 1458347
## 2064 1385824 1305345 1466303
## 2065 1392842 1311435 1474249
## 2066 1399860 1317536 1482184
## 2067 1406878 1323646 1490109
## 2068 1413896 1329767 1498024
## 2069 1420914 1335897 1505930
plot(pronostico_MT5)

Pronóstico Maine
pronostico_ME5 <- forecast(arima5, level =c(50), h=50)
pronostico_ME5
## Point Forecast Lo 50 Hi 50
## 2020 1349520 1345035 1354005
## 2021 1355196 1346851 1363542
## 2022 1360646 1348577 1372715
## 2023 1366096 1351207 1380985
## 2024 1371546 1354292 1388800
## 2025 1376996 1357664 1396328
## 2026 1382446 1361239 1403653
## 2027 1387896 1364967 1410826
## 2028 1393346 1368815 1417877
## 2029 1398796 1372761 1424831
## 2030 1404246 1376790 1431702
## 2031 1409696 1380889 1438503
## 2032 1415146 1385048 1445243
## 2033 1420596 1389261 1451931
## 2034 1426046 1393520 1458571
## 2035 1431496 1397822 1465170
## 2036 1436946 1402162 1471730
## 2037 1442396 1406535 1478256
## 2038 1447846 1410941 1484751
## 2039 1453296 1415375 1491217
## 2040 1458746 1419835 1497656
## 2041 1464196 1424320 1504071
## 2042 1469646 1428828 1510463
## 2043 1475096 1433357 1516834
## 2044 1480546 1437906 1523185
## 2045 1485996 1442474 1529517
## 2046 1491445 1447059 1535832
## 2047 1496895 1451661 1542130
## 2048 1502345 1456278 1548413
## 2049 1507795 1460910 1554680
## 2050 1513245 1465557 1560934
## 2051 1518695 1470216 1567175
## 2052 1524145 1474888 1573402
## 2053 1529595 1479572 1579618
## 2054 1535045 1484268 1585822
## 2055 1540495 1488975 1592015
## 2056 1545945 1493692 1598198
## 2057 1551395 1498420 1604370
## 2058 1556845 1503157 1610533
## 2059 1562295 1507904 1616686
## 2060 1567745 1512659 1622831
## 2061 1573195 1517424 1628966
## 2062 1578645 1522196 1635094
## 2063 1584095 1526977 1641213
## 2064 1589545 1531765 1647325
## 2065 1594995 1536561 1653429
## 2066 1600445 1541364 1659526
## 2067 1605895 1546174 1665616
## 2068 1611345 1550991 1671699
## 2069 1616795 1555814 1677775
plot(pronostico_ME5)

Convertir a dataframe para poder juntar la información de cada una
de las décadas
California<- as.data.frame(pronostico_CA5)
Arizona<- as.data.frame(pronostico_AZ5)
Indiana<- as.data.frame(pronostico_IN5)
Montana<- as.data.frame(pronostico_MT5)
Maine<- as.data.frame(pronostico_ME5)
#a<- a[c(11,21,31),]
Estados<-rbind(California,Arizona,Indiana,Montana,Maine)
a<- Estados[c(10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250),]
A10<-a[c(1,6,11,16,21),]
A20<-a[c(2,7,12,17,22),]
A30<-a[c(3,8,13,18,23),]
A40<-a[c(4,9,14,19,24),]
A50<-a[c(5,10,15,20,25),]
Creación de Mapas de Población por cada década.
rownames(A10) <- c('California','Arizona','Indiana','Montana','Maine')
rownames(A20) <- c('California','Arizona','Indiana','Montana','Maine')
rownames(A30) <- c('California','Arizona','Indiana','Montana','Maine')
rownames(A40) <- c('California','Arizona','Indiana','Montana','Maine')
rownames(A50) <- c('California','Arizona','Indiana','Montana','Maine')
mapa_estados <- map_data("state")
Mapa dentro de 10 años
Definición de colores para el mapa
rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A10$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A10$`Point Forecast` <- cut(A10$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A10$region <- c('california','arizona','indiana','montana','maine')
mapa_10 <- full_join(A10,mapa_estados, by="region")
ggplot() +
geom_map(data = mapa_10, map = mapa_10,
aes(x = long, y = lat, map_id = region, fill = mapa_10$`Point Forecast`),
color = "black", size = 0.1) +
scale_fill_identity() + # Utilizar los colores directamente de la columna 'color'
expand_limits(x = mapa_10$long, y = mapa_10$lat) +
theme_void() +
labs(title = "Mapa de población por estado en Estados Unidos dentro de 10 años")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning in geom_map(data = mapa_10, map = mapa_10, aes(x = long, y = lat, :
## Ignoring unknown aesthetics: x and y
## Warning: Use of `` mapa_10$`Point Forecast` `` is discouraged.
## ℹ Use `Point Forecast` instead.

Mapa dentro de 20 años
rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A20$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A20$`Point Forecast` <- cut(A20$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A20$region <- c('california','arizona','indiana','montana','maine')
mapa_20 <- full_join(A20,mapa_estados, by="region")
ggplot() +
geom_map(data = mapa_20, map = mapa_20,
aes(x = long, y = lat, map_id = region, fill = mapa_20$`Point Forecast`),
color = "black", size = 0.1) +
scale_fill_identity() + # Utilizar los colores directamente de la columna 'color'
expand_limits(x = mapa_20$long, y = mapa_20$lat) +
theme_void() +
labs(title = "Mapa de población por estado en Estados Unidos dentro de 20 años")
## Warning in geom_map(data = mapa_20, map = mapa_20, aes(x = long, y = lat, :
## Ignoring unknown aesthetics: x and y
## Warning: Use of `` mapa_20$`Point Forecast` `` is discouraged.
## ℹ Use `Point Forecast` instead.

Mapa dentro de 30 años
rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A30$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A30$`Point Forecast` <- cut(A30$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A30$region <- c('california','arizona','indiana','montana','maine')
mapa_30 <- full_join(A30,mapa_estados, by="region")
ggplot() +
geom_map(data = mapa_30, map = mapa_30,
aes(x = long, y = lat, map_id = region, fill = mapa_30$`Point Forecast`),
color = "black", size = 0.1) +
scale_fill_identity() + # Utilizar los colores directamente de la columna 'color'
expand_limits(x = mapa_30$long, y = mapa_30$lat) +
theme_void() +
labs(title = "Mapa de población por estado en Estados Unidos dentro de 30 años")
## Warning in geom_map(data = mapa_30, map = mapa_30, aes(x = long, y = lat, :
## Ignoring unknown aesthetics: x and y
## Warning: Use of `` mapa_30$`Point Forecast` `` is discouraged.
## ℹ Use `Point Forecast` instead.

Mapa dentro de 40 años
rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A40$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A40$`Point Forecast` <- cut(A40$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A40$region <- c('california','arizona','indiana','montana','maine')
mapa_40 <- full_join(A40,mapa_estados, by="region")
ggplot() +
geom_map(data = mapa_40, map = mapa_40,
aes(x = long, y = lat, map_id = region, fill = mapa_40$`Point Forecast`),
color = "black", size = 0.1) +
scale_fill_identity() + # Utilizar los colores directamente de la columna 'color'
expand_limits(x = mapa_40$long, y = mapa_40$lat) +
theme_void() +
labs(title = "Mapa de población por estado en Estados Unidos dentro de 40 años")
## Warning in geom_map(data = mapa_40, map = mapa_40, aes(x = long, y = lat, :
## Ignoring unknown aesthetics: x and y
## Warning: Use of `` mapa_40$`Point Forecast` `` is discouraged.
## ℹ Use `Point Forecast` instead.

Mapa dentro de 50 años
rangos_poblacion <- c(0, 2000000, 6000000, 10000000, 16000000, max(A50$`Point Forecast`))
colores <- c("lightblue", "skyblue", "darkcyan", "blue2", "darkblue")
# Crear una columna en datos_completos que indique el rango de población
A50$`Point Forecast` <- cut(A50$`Point Forecast`, breaks = rangos_poblacion, labels = colores)
A50$region <- c('california','arizona','indiana','montana','maine')
mapa_50 <- full_join(A50,mapa_estados, by="region")
ggplot() +
geom_map(data = mapa_50, map = mapa_50,
aes(x = long, y = lat, map_id = region, fill = mapa_50$`Point Forecast`),
color = "black", size = 0.1) +
scale_fill_identity() + # Utilizar los colores directamente de la columna 'color'
expand_limits(x = mapa_50$long, y = mapa_50$lat) +
theme_void() +
labs(title = "Mapa de población por estado en Estados Unidos dentro de 50 años")
## Warning in geom_map(data = mapa_50, map = mapa_50, aes(x = long, y = lat, :
## Ignoring unknown aesthetics: x and y
## Warning: Use of `` mapa_50$`Point Forecast` `` is discouraged.
## ℹ Use `Point Forecast` instead.

LS0tCnRpdGxlOiAiQWN0aXZpZGFkIEludGVncmFkb3JhIgphdXRob3I6ICJIdW1iZXJ0byBNZW5hIC0gQTAwODMxNzM5IgpkYXRlOiAiMjAyNC0wMi0yMSIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKLS0tCgohW10oL1VzZXJzL2h1bWJlcnRvbWVuYTE3L0Rvd25sb2Fkcy9SU3R1ZGlvL3VzYWdpZi5naWYpCgojIEFjdGl2aWRhZCBJbnRlZ3JhZG9yYSBlbiBFcXVpcG8KIyMjIEVxdWlwbyA3IAojIyMjIFRhbmlhIE9ydGVnYQojIyMjIEh1bWJlcnRvIE1lbmEKIyMjIyBBcmVzIE1lbMOpbmRlegogCmBgYHtyfQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KG1hcHMpCmxpYnJhcnkoZ3Bsb3RzKQpsaWJyYXJ5KHBsbSkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZm9yZWNhc3QpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoc2YpCmxpYnJhcnkodmlyaWRpcykKbGlicmFyeShkcGx5cikKbGlicmFyeShtYXBzKQpgYGAKCgojIyMgT2J0ZW5jacOzbiBkZSBiYXNlIGRlIGRhdG9zIApgYGB7ciB3YXJuaW5nPUZBTFNFfQpwb3B1bGF0aW9uIDwtIHJlYWRfY3N2KCJVU0FfUG9wdWxhdGlvbi5jc3YiKQpgYGAKCiMjIyBTZWxlY2Npw7NuIGRlIDUgZXN0YWRvcwojIyMjIENhbGlmb3JuaWEgKENBKQojIyMjIEFyaXpvbmEgKEFaKQojIyMjIEluaWRpYW5hIChJTikKIyMjIyBNb250YW5hIChNVCkKIyMjIyBNYWluZSAoTUUpCgpgYGB7cn0KQ0EgPC0gcG9wdWxhdGlvbltwb3B1bGF0aW9uJFN0YXRlID09ICJDQSIsXQpBWiA8LSBwb3B1bGF0aW9uW3BvcHVsYXRpb24kU3RhdGUgPT0gIkFaIixdCklOIDwtIHBvcHVsYXRpb25bcG9wdWxhdGlvbiRTdGF0ZSA9PSAiSU4iLF0KTVQgPC0gcG9wdWxhdGlvbltwb3B1bGF0aW9uJFN0YXRlID09ICJNVCIsXQpNRSA8LSBwb3B1bGF0aW9uW3BvcHVsYXRpb24kU3RhdGUgPT0gIk1FIixdCmBgYAoKIyMjIFNlcmllIGRlIHRpZW1wbyBkZSBsYSBwb2JsYWNpw7NuIHkgZXN0YWRvCmBgYHtyfQp0c19DQSA8LSB0cyhkYXRhPUNBJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19DQQpgYGAKCmBgYHtyfQp0c19BWiA8LSB0cyhkYXRhPUFaJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19BWgpgYGAKCmBgYHtyfQp0c19JTiA8LSB0cyhkYXRhPUlOJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19JTgpgYGAKCmBgYHtyfQp0c19NVCA8LSB0cyhkYXRhPU1UJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19NVApgYGAKCmBgYHtyfQp0c19NRSA8LSB0cyhkYXRhPU1FJFBvcHVsYXRpb24sIHN0YXJ0ID0gYygxOTAwLDEpKQp0c19NRQpgYGAKCiMjIyBQcm9uw7NzdGljb3MgZGUgbG9zIDUgZXN0YWRvcyBjb24gZWwgbW9kZWxvICoqQVJJTUEqKiBwYXJhIGxhcyBzaWd1aWVudGVzIGTDqWNhZGFzOiAyMDMwLCAyMDQwLCAyMDUwLCAyMDYwLCAyMDcwLiAKCmBgYHtyfQphcmltYTEgPC0gYXV0by5hcmltYSh0c19DQSwgRD0xKQpzdW1tYXJ5KGFyaW1hMSkKYGBgCgpgYGB7cn0KYXJpbWEyIDwtIGF1dG8uYXJpbWEodHNfQVosIEQ9MSkKc3VtbWFyeShhcmltYTIpCmBgYAoKYGBge3J9CmFyaW1hMyA8LSBhdXRvLmFyaW1hKHRzX0lOLCBEPTEpCnN1bW1hcnkoYXJpbWEzKQpgYGAKCmBgYHtyfQphcmltYTQgPC0gYXV0by5hcmltYSh0c19NVCwgRD0xKQpzdW1tYXJ5KGFyaW1hNCkKYGBgCgpgYGB7cn0KYXJpbWE1IDwtIGF1dG8uYXJpbWEodHNfTUUsIEQ9MSkKc3VtbWFyeShhcmltYTUpCmBgYAoKIyMjIFByb27Ds3N0aWNvcyBkZW50cm8gZGUgbGFzIHNpZ3VpZW50ZXMgNSBkw6ljYWRhcwoKIyMjIyAqKlByb27Ds3N0aWNvIENhbGlmb3JuaWEqKgpgYGB7cn0KcHJvbm9zdGljb19DQTUgPC0gZm9yZWNhc3QoYXJpbWExLCBsZXZlbCA9Yyg1MCksIGg9NTApCnByb25vc3RpY29fQ0E1CnBsb3QocHJvbm9zdGljb19DQTUpCmBgYAoKIyMjIyAqKlByb27Ds3N0aWNvIEFyaXpvbmEqKgpgYGB7cn0KcHJvbm9zdGljb19BWjUgPC0gZm9yZWNhc3QoYXJpbWEyLCBsZXZlbCA9Yyg1MCksIGg9NTApCnByb25vc3RpY29fQVo1CnBsb3QocHJvbm9zdGljb19BWjUpCmBgYAoKIyMjIyAqKlByb27Ds3N0aWNvIEluZGlhbmEqKiAKYGBge3J9CnByb25vc3RpY29fSU41IDwtIGZvcmVjYXN0KGFyaW1hMywgbGV2ZWwgPWMoNTApLCBoPTUwKQpwcm9ub3N0aWNvX0lONQpwbG90KHByb25vc3RpY29fSU41KQpgYGAKCiMjIyMgKipQcm9uw7NzdGljbyBNb250YW5hKiogCmBgYHtyfQpwcm9ub3N0aWNvX01UNSA8LSBmb3JlY2FzdChhcmltYTQsIGxldmVsID1jKDUwKSwgaD01MCkKcHJvbm9zdGljb19NVDUKcGxvdChwcm9ub3N0aWNvX01UNSkKYGBgCgojIyMjICoqUHJvbsOzc3RpY28gTWFpbmUqKgpgYGB7cn0KcHJvbm9zdGljb19NRTUgPC0gZm9yZWNhc3QoYXJpbWE1LCBsZXZlbCA9Yyg1MCksIGg9NTApCnByb25vc3RpY29fTUU1CnBsb3QocHJvbm9zdGljb19NRTUpCmBgYAoKIyMjIENvbnZlcnRpciBhIGRhdGFmcmFtZSBwYXJhIHBvZGVyIGp1bnRhciBsYSBpbmZvcm1hY2nDs24gZGUgY2FkYSB1bmEgZGUgbGFzIGTDqWNhZGFzCmBgYHtyfQpDYWxpZm9ybmlhPC0gYXMuZGF0YS5mcmFtZShwcm9ub3N0aWNvX0NBNSkKQXJpem9uYTwtIGFzLmRhdGEuZnJhbWUocHJvbm9zdGljb19BWjUpCkluZGlhbmE8LSBhcy5kYXRhLmZyYW1lKHByb25vc3RpY29fSU41KQpNb250YW5hPC0gYXMuZGF0YS5mcmFtZShwcm9ub3N0aWNvX01UNSkKTWFpbmU8LSBhcy5kYXRhLmZyYW1lKHByb25vc3RpY29fTUU1KQpgYGAKCmBgYHtyfQojYTwtIGFbYygxMSwyMSwzMSksXQpFc3RhZG9zPC1yYmluZChDYWxpZm9ybmlhLEFyaXpvbmEsSW5kaWFuYSxNb250YW5hLE1haW5lKQpgYGAKCmBgYHtyfQphPC0gRXN0YWRvc1tjKDEwLDIwLDMwLDQwLDUwLDYwLDcwLDgwLDkwLDEwMCwxMTAsMTIwLDEzMCwxNDAsMTUwLDE2MCwxNzAsMTgwLDE5MCwyMDAsMjEwLDIyMCwyMzAsMjQwLDI1MCksXQpgYGAKCmBgYHtyfQpBMTA8LWFbYygxLDYsMTEsMTYsMjEpLF0KQTIwPC1hW2MoMiw3LDEyLDE3LDIyKSxdCkEzMDwtYVtjKDMsOCwxMywxOCwyMyksXQpBNDA8LWFbYyg0LDksMTQsMTksMjQpLF0KQTUwPC1hW2MoNSwxMCwxNSwyMCwyNSksXQpgYGAKCiMjIyBDcmVhY2nDs24gZGUgTWFwYXMgZGUgUG9ibGFjacOzbiBwb3IgY2FkYSBkw6ljYWRhLiAKYGBge3J9CnJvd25hbWVzKEExMCkgPC0gYygnQ2FsaWZvcm5pYScsJ0FyaXpvbmEnLCdJbmRpYW5hJywnTW9udGFuYScsJ01haW5lJykKcm93bmFtZXMoQTIwKSA8LSBjKCdDYWxpZm9ybmlhJywnQXJpem9uYScsJ0luZGlhbmEnLCdNb250YW5hJywnTWFpbmUnKQpyb3duYW1lcyhBMzApIDwtIGMoJ0NhbGlmb3JuaWEnLCdBcml6b25hJywnSW5kaWFuYScsJ01vbnRhbmEnLCdNYWluZScpCnJvd25hbWVzKEE0MCkgPC0gYygnQ2FsaWZvcm5pYScsJ0FyaXpvbmEnLCdJbmRpYW5hJywnTW9udGFuYScsJ01haW5lJykKcm93bmFtZXMoQTUwKSA8LSBjKCdDYWxpZm9ybmlhJywnQXJpem9uYScsJ0luZGlhbmEnLCdNb250YW5hJywnTWFpbmUnKQpgYGAKCmBgYHtyfQptYXBhX2VzdGFkb3MgPC0gbWFwX2RhdGEoInN0YXRlIikKYGBgCgojIyMgTWFwYSBkZW50cm8gZGUgMTAgYcOxb3MKCiMjIyMgRGVmaW5pY2nDs24gZGUgY29sb3JlcyBwYXJhIGVsIG1hcGEKYGBge3J9CnJhbmdvc19wb2JsYWNpb24gPC0gYygwLCAyMDAwMDAwLCA2MDAwMDAwLCAxMDAwMDAwMCwgMTYwMDAwMDAsIG1heChBMTAkYFBvaW50IEZvcmVjYXN0YCkpCmNvbG9yZXMgPC0gYygibGlnaHRibHVlIiwgInNreWJsdWUiLCAiZGFya2N5YW4iLCAiYmx1ZTIiLCAiZGFya2JsdWUiKQpgYGAKCmBgYHtyfQojIENyZWFyIHVuYSBjb2x1bW5hIGVuIGRhdG9zX2NvbXBsZXRvcyBxdWUgaW5kaXF1ZSBlbCByYW5nbyBkZSBwb2JsYWNpw7NuCkExMCRgUG9pbnQgRm9yZWNhc3RgIDwtIGN1dChBMTAkYFBvaW50IEZvcmVjYXN0YCwgYnJlYWtzID0gcmFuZ29zX3BvYmxhY2lvbiwgbGFiZWxzID0gY29sb3JlcykKCmBgYAoKYGBge3J9CkExMCRyZWdpb24gPC0gYygnY2FsaWZvcm5pYScsJ2FyaXpvbmEnLCdpbmRpYW5hJywnbW9udGFuYScsJ21haW5lJykKYGBgCgpgYGB7cn0KbWFwYV8xMCA8LSBmdWxsX2pvaW4oQTEwLG1hcGFfZXN0YWRvcywgYnk9InJlZ2lvbiIpCmdncGxvdCgpICsKICBnZW9tX21hcChkYXRhID0gbWFwYV8xMCwgbWFwID0gbWFwYV8xMCwKICAgICAgICAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIG1hcF9pZCA9IHJlZ2lvbiwgZmlsbCA9IG1hcGFfMTAkYFBvaW50IEZvcmVjYXN0YCksCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4xKSArCiAgc2NhbGVfZmlsbF9pZGVudGl0eSgpICsgICMgVXRpbGl6YXIgbG9zIGNvbG9yZXMgZGlyZWN0YW1lbnRlIGRlIGxhIGNvbHVtbmEgJ2NvbG9yJwogIGV4cGFuZF9saW1pdHMoeCA9IG1hcGFfMTAkbG9uZywgeSA9IG1hcGFfMTAkbGF0KSArCiAgdGhlbWVfdm9pZCgpICsKICBsYWJzKHRpdGxlID0gIk1hcGEgZGUgcG9ibGFjacOzbiBwb3IgZXN0YWRvIGVuIEVzdGFkb3MgVW5pZG9zIGRlbnRybyBkZSAxMCBhw7FvcyIpCmBgYAoKIyMjIE1hcGEgZGVudHJvIGRlIDIwIGHDsW9zCmBgYHtyfQpyYW5nb3NfcG9ibGFjaW9uIDwtIGMoMCwgMjAwMDAwMCwgNjAwMDAwMCwgMTAwMDAwMDAsIDE2MDAwMDAwLCBtYXgoQTIwJGBQb2ludCBGb3JlY2FzdGApKQpjb2xvcmVzIDwtIGMoImxpZ2h0Ymx1ZSIsICJza3libHVlIiwgImRhcmtjeWFuIiwgImJsdWUyIiwgImRhcmtibHVlIikKYGBgCgpgYGB7cn0KIyBDcmVhciB1bmEgY29sdW1uYSBlbiBkYXRvc19jb21wbGV0b3MgcXVlIGluZGlxdWUgZWwgcmFuZ28gZGUgcG9ibGFjacOzbgpBMjAkYFBvaW50IEZvcmVjYXN0YCA8LSBjdXQoQTIwJGBQb2ludCBGb3JlY2FzdGAsIGJyZWFrcyA9IHJhbmdvc19wb2JsYWNpb24sIGxhYmVscyA9IGNvbG9yZXMpCgpgYGAKCmBgYHtyfQpBMjAkcmVnaW9uIDwtIGMoJ2NhbGlmb3JuaWEnLCdhcml6b25hJywnaW5kaWFuYScsJ21vbnRhbmEnLCdtYWluZScpCmBgYAoKYGBge3J9Cm1hcGFfMjAgPC0gZnVsbF9qb2luKEEyMCxtYXBhX2VzdGFkb3MsIGJ5PSJyZWdpb24iKQpnZ3Bsb3QoKSArCiAgZ2VvbV9tYXAoZGF0YSA9IG1hcGFfMjAsIG1hcCA9IG1hcGFfMjAsCiAgICAgICAgICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBtYXBfaWQgPSByZWdpb24sIGZpbGwgPSBtYXBhXzIwJGBQb2ludCBGb3JlY2FzdGApLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMSkgKwogIHNjYWxlX2ZpbGxfaWRlbnRpdHkoKSArICAjIFV0aWxpemFyIGxvcyBjb2xvcmVzIGRpcmVjdGFtZW50ZSBkZSBsYSBjb2x1bW5hICdjb2xvcicKICBleHBhbmRfbGltaXRzKHggPSBtYXBhXzIwJGxvbmcsIHkgPSBtYXBhXzIwJGxhdCkgKwogIHRoZW1lX3ZvaWQoKSArCiAgbGFicyh0aXRsZSA9ICJNYXBhIGRlIHBvYmxhY2nDs24gcG9yIGVzdGFkbyBlbiBFc3RhZG9zIFVuaWRvcyBkZW50cm8gZGUgMjAgYcOxb3MiKQpgYGAKCiMjIyBNYXBhIGRlbnRybyBkZSAzMCBhw7FvcwpgYGB7cn0KcmFuZ29zX3BvYmxhY2lvbiA8LSBjKDAsIDIwMDAwMDAsIDYwMDAwMDAsIDEwMDAwMDAwLCAxNjAwMDAwMCwgbWF4KEEzMCRgUG9pbnQgRm9yZWNhc3RgKSkKY29sb3JlcyA8LSBjKCJsaWdodGJsdWUiLCAic2t5Ymx1ZSIsICJkYXJrY3lhbiIsICJibHVlMiIsICJkYXJrYmx1ZSIpCmBgYAoKYGBge3J9CiMgQ3JlYXIgdW5hIGNvbHVtbmEgZW4gZGF0b3NfY29tcGxldG9zIHF1ZSBpbmRpcXVlIGVsIHJhbmdvIGRlIHBvYmxhY2nDs24KQTMwJGBQb2ludCBGb3JlY2FzdGAgPC0gY3V0KEEzMCRgUG9pbnQgRm9yZWNhc3RgLCBicmVha3MgPSByYW5nb3NfcG9ibGFjaW9uLCBsYWJlbHMgPSBjb2xvcmVzKQoKYGBgCgpgYGB7cn0KQTMwJHJlZ2lvbiA8LSBjKCdjYWxpZm9ybmlhJywnYXJpem9uYScsJ2luZGlhbmEnLCdtb250YW5hJywnbWFpbmUnKQpgYGAKCmBgYHtyfQptYXBhXzMwIDwtIGZ1bGxfam9pbihBMzAsbWFwYV9lc3RhZG9zLCBieT0icmVnaW9uIikKZ2dwbG90KCkgKwogIGdlb21fbWFwKGRhdGEgPSBtYXBhXzMwLCBtYXAgPSBtYXBhXzMwLAogICAgICAgICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgbWFwX2lkID0gcmVnaW9uLCBmaWxsID0gbWFwYV8zMCRgUG9pbnQgRm9yZWNhc3RgKSwKICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSAwLjEpICsKICBzY2FsZV9maWxsX2lkZW50aXR5KCkgKyAgIyBVdGlsaXphciBsb3MgY29sb3JlcyBkaXJlY3RhbWVudGUgZGUgbGEgY29sdW1uYSAnY29sb3InCiAgZXhwYW5kX2xpbWl0cyh4ID0gbWFwYV8zMCRsb25nLCB5ID0gbWFwYV8zMCRsYXQpICsKICB0aGVtZV92b2lkKCkgKwogIGxhYnModGl0bGUgPSAiTWFwYSBkZSBwb2JsYWNpw7NuIHBvciBlc3RhZG8gZW4gRXN0YWRvcyBVbmlkb3MgZGVudHJvIGRlIDMwIGHDsW9zIikKYGBgCgoKIyMjIE1hcGEgZGVudHJvIGRlIDQwIGHDsW9zCgpgYGB7ciB3YXJuaW5nPUZBTFNFfQpyYW5nb3NfcG9ibGFjaW9uIDwtIGMoMCwgMjAwMDAwMCwgNjAwMDAwMCwgMTAwMDAwMDAsIDE2MDAwMDAwLCBtYXgoQTQwJGBQb2ludCBGb3JlY2FzdGApKQpjb2xvcmVzIDwtIGMoImxpZ2h0Ymx1ZSIsICJza3libHVlIiwgImRhcmtjeWFuIiwgImJsdWUyIiwgImRhcmtibHVlIikKYGBgCgpgYGB7cn0KIyBDcmVhciB1bmEgY29sdW1uYSBlbiBkYXRvc19jb21wbGV0b3MgcXVlIGluZGlxdWUgZWwgcmFuZ28gZGUgcG9ibGFjacOzbgpBNDAkYFBvaW50IEZvcmVjYXN0YCA8LSBjdXQoQTQwJGBQb2ludCBGb3JlY2FzdGAsIGJyZWFrcyA9IHJhbmdvc19wb2JsYWNpb24sIGxhYmVscyA9IGNvbG9yZXMpCgpgYGAKCmBgYHtyfQpBNDAkcmVnaW9uIDwtIGMoJ2NhbGlmb3JuaWEnLCdhcml6b25hJywnaW5kaWFuYScsJ21vbnRhbmEnLCdtYWluZScpCmBgYAoKYGBge3J9Cm1hcGFfNDAgPC0gZnVsbF9qb2luKEE0MCxtYXBhX2VzdGFkb3MsIGJ5PSJyZWdpb24iKQpnZ3Bsb3QoKSArCiAgZ2VvbV9tYXAoZGF0YSA9IG1hcGFfNDAsIG1hcCA9IG1hcGFfNDAsCiAgICAgICAgICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBtYXBfaWQgPSByZWdpb24sIGZpbGwgPSBtYXBhXzQwJGBQb2ludCBGb3JlY2FzdGApLAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMSkgKwogIHNjYWxlX2ZpbGxfaWRlbnRpdHkoKSArICAjIFV0aWxpemFyIGxvcyBjb2xvcmVzIGRpcmVjdGFtZW50ZSBkZSBsYSBjb2x1bW5hICdjb2xvcicKICBleHBhbmRfbGltaXRzKHggPSBtYXBhXzQwJGxvbmcsIHkgPSBtYXBhXzQwJGxhdCkgKwogIHRoZW1lX3ZvaWQoKSArCiAgbGFicyh0aXRsZSA9ICJNYXBhIGRlIHBvYmxhY2nDs24gcG9yIGVzdGFkbyBlbiBFc3RhZG9zIFVuaWRvcyBkZW50cm8gZGUgNDAgYcOxb3MiKQpgYGAKCgojIyMgTWFwYSBkZW50cm8gZGUgNTAgYcOxb3MKYGBge3J9CnJhbmdvc19wb2JsYWNpb24gPC0gYygwLCAyMDAwMDAwLCA2MDAwMDAwLCAxMDAwMDAwMCwgMTYwMDAwMDAsIG1heChBNTAkYFBvaW50IEZvcmVjYXN0YCkpCmNvbG9yZXMgPC0gYygibGlnaHRibHVlIiwgInNreWJsdWUiLCAiZGFya2N5YW4iLCAiYmx1ZTIiLCAiZGFya2JsdWUiKQpgYGAKCmBgYHtyfQojIENyZWFyIHVuYSBjb2x1bW5hIGVuIGRhdG9zX2NvbXBsZXRvcyBxdWUgaW5kaXF1ZSBlbCByYW5nbyBkZSBwb2JsYWNpw7NuCkE1MCRgUG9pbnQgRm9yZWNhc3RgIDwtIGN1dChBNTAkYFBvaW50IEZvcmVjYXN0YCwgYnJlYWtzID0gcmFuZ29zX3BvYmxhY2lvbiwgbGFiZWxzID0gY29sb3JlcykKCmBgYAoKYGBge3J9CkE1MCRyZWdpb24gPC0gYygnY2FsaWZvcm5pYScsJ2FyaXpvbmEnLCdpbmRpYW5hJywnbW9udGFuYScsJ21haW5lJykKYGBgCgpgYGB7cn0KbWFwYV81MCA8LSBmdWxsX2pvaW4oQTUwLG1hcGFfZXN0YWRvcywgYnk9InJlZ2lvbiIpCmdncGxvdCgpICsKICBnZW9tX21hcChkYXRhID0gbWFwYV81MCwgbWFwID0gbWFwYV81MCwKICAgICAgICAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIG1hcF9pZCA9IHJlZ2lvbiwgZmlsbCA9IG1hcGFfNTAkYFBvaW50IEZvcmVjYXN0YCksCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4xKSArCiAgc2NhbGVfZmlsbF9pZGVudGl0eSgpICsgICMgVXRpbGl6YXIgbG9zIGNvbG9yZXMgZGlyZWN0YW1lbnRlIGRlIGxhIGNvbHVtbmEgJ2NvbG9yJwogIGV4cGFuZF9saW1pdHMoeCA9IG1hcGFfNTAkbG9uZywgeSA9IG1hcGFfNTAkbGF0KSArCiAgdGhlbWVfdm9pZCgpICsKICBsYWJzKHRpdGxlID0gIk1hcGEgZGUgcG9ibGFjacOzbiBwb3IgZXN0YWRvIGVuIEVzdGFkb3MgVW5pZG9zIGRlbnRybyBkZSA1MCBhw7FvcyIpCmBgYAoKCgo=