Introducción

En el anÔlisis de políticas públicas y desarrollo internacional, se utilizan diversas bases de datos que abarcan desde información macroeconómica hasta datos específicos sobre programas y proyectos.

A partir de cómo se presenten los datos, las bases de datos pueden tener diferentes tipologías

En ciencia de datos y econometría, se utilizan diversos tipos de bases de datos para analizar y modelar fenómenos económicos. Algunos de los tipos de bases de datos comunes en este campo incluyen:

Bases de Datos de Series Temporales: Contienen observaciones a lo largo del tiempo sobre variables económicas, como tasas de interés, inflación, PIB, tasas de empleo, entre otras. Estos conjuntos de datos son fundamentales para el anÔlisis de series temporales y la modelización de tendencias económicas.

Bases de Datos de Corte Transversal: Las bases de datos de corte transversal contienen observaciones recopiladas en un solo punto en el tiempo o a lo largo de un período específico para diferentes entidades (como países, empresas, individuos) sin seguirlas en el tiempo.Son esenciales para analizar relaciones y variaciones en un momento específico, como la comparación de indicadores económicos entre diferentes países en un año determinado.

Bases de Datos Longitudinales: Recopilan información sobre un grupo específico de individuos, empresas o regiones a lo largo del tiempo. Estas bases de datos permiten analizar el cambio en el tiempo y realizar estudios sobre trayectorias individuales o evolución de ciertos indicadores económicos.

Bases de Datos Transaccionales: Contienen información sobre transacciones económicas individuales. Estos datos son fundamentales para el anÔlisis de microeconomía y pueden incluir transacciones comerciales, datos financieros o registros de operaciones.

Bases de Datos Espaciales: Contienen información geogrÔfica relacionada con fenómenos económicos. Estos datos son esenciales para el anÔlisis espacial y la modelización de patrones económicos en diferentes regiones geogrÔficas.

Encuestas Económicas: Bases de datos derivadas de encuestas realizadas a individuos, empresas o hogares. Estas encuestas pueden incluir información sobre ingresos, gastos, preferencias de consumo y otros aspectos socioeconómicos.

Bases de Datos de Mercados Financieros: Contienen información sobre activos financieros, transacciones bursÔtiles, precios de acciones, tasas de interés y otros indicadores relacionados con los mercados financieros.

Bases de Datos Macroeconómicas: Recopilan datos agregados a nivel de país o región sobre variables económicas clave, como el PIB, la inflación, el desempleo, la deuda pública, entre otros.

Bases de Datos Experimentales: Contienen datos derivados de experimentos económicos, como ensayos clínicos, estudios de campo o investigaciones controladas que buscan analizar el comportamiento humano en contextos económicos específicos.

Revisemos en R algunas de estas tipologĆ­as de bases de datos

Bases de datos de Corte Transversal

Instalemos algunas bases de datos para trabajar con ellas

install.packages("wooldridge")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
install.packages('gapminder')
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
install.packages("ggplot2")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(wooldridge)
library(gapminder)
library(ggplot2)

Navegemos primero las bases de datos que nos ofrece el paquete Wooldrige,. Comencemos con la base de datos ā€œaffairsā€

help(wooldridge)
## No documentation for 'wooldridge' in specified packages and libraries:
## you could try '??wooldridge'
??wooldridge
## No vignettes or demos or help files found with alias or concept or
## title matching 'wooldridge' using fuzzy matching.
data()
data("affairs")
head(affairs)
tail(affairs)
length(affairs)
## [1] 19
affairs[1:10,]
summary(affairs)
##        id            male             age           yrsmarr      
##  Min.   :   4   Min.   :0.0000   Min.   :17.50   Min.   : 0.125  
##  1st Qu.: 528   1st Qu.:0.0000   1st Qu.:27.00   1st Qu.: 4.000  
##  Median :1009   Median :0.0000   Median :32.00   Median : 7.000  
##  Mean   :1060   Mean   :0.4759   Mean   :32.49   Mean   : 8.178  
##  3rd Qu.:1453   3rd Qu.:1.0000   3rd Qu.:37.00   3rd Qu.:15.000  
##  Max.   :9029   Max.   :1.0000   Max.   :57.00   Max.   :15.000  
##       kids            relig            educ           occup      
##  Min.   :0.0000   Min.   :1.000   Min.   : 9.00   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:2.000   1st Qu.:14.00   1st Qu.:3.000  
##  Median :1.0000   Median :3.000   Median :16.00   Median :5.000  
##  Mean   :0.7155   Mean   :3.116   Mean   :16.17   Mean   :4.195  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:18.00   3rd Qu.:6.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :20.00   Max.   :7.000  
##     ratemarr        naffairs          affair           vryhap     
##  Min.   :1.000   Min.   : 0.000   Min.   :0.0000   Min.   :0.000  
##  1st Qu.:3.000   1st Qu.: 0.000   1st Qu.:0.0000   1st Qu.:0.000  
##  Median :4.000   Median : 0.000   Median :0.0000   Median :0.000  
##  Mean   :3.932   Mean   : 1.456   Mean   :0.2496   Mean   :0.386  
##  3rd Qu.:5.000   3rd Qu.: 0.000   3rd Qu.:0.0000   3rd Qu.:1.000  
##  Max.   :5.000   Max.   :12.000   Max.   :1.0000   Max.   :1.000  
##      hapavg          avgmarr           unhap            vryrel      
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000   Median :0.0000   Median :0.0000  
##  Mean   :0.3228   Mean   :0.1547   Mean   :0.1098   Mean   :0.1165  
##  3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.:0.0000   3rd Qu.:0.0000  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
##      smerel          slghtrel          notrel      
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000   Median :0.0000  
##  Mean   :0.3161   Mean   :0.2146   Mean   :0.2729  
##  3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.:1.0000  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.0000
summary(affairs$educ)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    9.00   14.00   16.00   16.17   18.00   20.00
attach(affairs)
summary(educ)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    9.00   14.00   16.00   16.17   18.00   20.00
detach(affairs)
# summary(educ)

¿CuÔles son los metadatos de este dataset? Los metadatos pueden encontrarlos en: https://cran.r-project.org/web/packages/wooldridge/wooldridge.pdf

Recordar que en r las variables character (nominal), factor (categoricas), integer (discretas), y numeric (numericas)

Veamos ahora la base de datos de corte transversal wage1

Cargar la base de datos

Carga la base de datos ā€œwage1ā€ y explórala:

data("wage1")
head(wage1)
attach(wage1)
str(wage1)
## 'data.frame':    526 obs. of  24 variables:
##  $ wage    : num  3.1 3.24 3 6 5.3 ...
##  $ educ    : int  11 12 11 8 12 16 18 12 12 17 ...
##  $ exper   : int  2 22 2 44 7 9 15 5 26 22 ...
##  $ tenure  : int  0 2 0 28 2 8 7 3 4 21 ...
##  $ nonwhite: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ female  : int  1 1 0 0 0 0 0 1 1 0 ...
##  $ married : int  0 1 0 1 1 1 0 0 0 1 ...
##  $ numdep  : int  2 3 2 0 1 0 0 0 2 0 ...
##  $ smsa    : int  1 1 0 1 0 1 1 1 1 1 ...
##  $ northcen: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ south   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ west    : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ construc: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ ndurman : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ trcommpu: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ trade   : int  0 0 1 0 0 0 1 0 1 0 ...
##  $ services: int  0 1 0 0 0 0 0 0 0 0 ...
##  $ profserv: int  0 0 0 0 0 1 0 0 0 0 ...
##  $ profocc : int  0 0 0 0 0 1 1 1 1 1 ...
##  $ clerocc : int  0 0 0 1 0 0 0 0 0 0 ...
##  $ servocc : int  0 1 0 0 0 0 0 0 0 0 ...
##  $ lwage   : num  1.13 1.18 1.1 1.79 1.67 ...
##  $ expersq : int  4 484 4 1936 49 81 225 25 676 484 ...
##  $ tenursq : int  0 4 0 784 4 64 49 9 16 441 ...
##  - attr(*, "time.stamp")= chr "25 Jun 2011 23:03"

Explorar la estructura de la base de datos

str(wage1)
## 'data.frame':    526 obs. of  24 variables:
##  $ wage    : num  3.1 3.24 3 6 5.3 ...
##  $ educ    : int  11 12 11 8 12 16 18 12 12 17 ...
##  $ exper   : int  2 22 2 44 7 9 15 5 26 22 ...
##  $ tenure  : int  0 2 0 28 2 8 7 3 4 21 ...
##  $ nonwhite: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ female  : int  1 1 0 0 0 0 0 1 1 0 ...
##  $ married : int  0 1 0 1 1 1 0 0 0 1 ...
##  $ numdep  : int  2 3 2 0 1 0 0 0 2 0 ...
##  $ smsa    : int  1 1 0 1 0 1 1 1 1 1 ...
##  $ northcen: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ south   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ west    : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ construc: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ ndurman : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ trcommpu: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ trade   : int  0 0 1 0 0 0 1 0 1 0 ...
##  $ services: int  0 1 0 0 0 0 0 0 0 0 ...
##  $ profserv: int  0 0 0 0 0 1 0 0 0 0 ...
##  $ profocc : int  0 0 0 0 0 1 1 1 1 1 ...
##  $ clerocc : int  0 0 0 1 0 0 0 0 0 0 ...
##  $ servocc : int  0 1 0 0 0 0 0 0 0 0 ...
##  $ lwage   : num  1.13 1.18 1.1 1.79 1.67 ...
##  $ expersq : int  4 484 4 1936 49 81 225 25 676 484 ...
##  $ tenursq : int  0 4 0 784 4 64 49 9 16 441 ...
##  - attr(*, "time.stamp")= chr "25 Jun 2011 23:03"
# Según visto en la clase, ¿qué tipo de base de dato es?

Puedes utilizar la función summary para obtener estadísticas descriptivas bÔsicas: ## Estadísticas descriptivas

summary(wage1)
##       wage             educ           exper           tenure      
##  Min.   : 0.530   Min.   : 0.00   Min.   : 1.00   Min.   : 0.000  
##  1st Qu.: 3.330   1st Qu.:12.00   1st Qu.: 5.00   1st Qu.: 0.000  
##  Median : 4.650   Median :12.00   Median :13.50   Median : 2.000  
##  Mean   : 5.896   Mean   :12.56   Mean   :17.02   Mean   : 5.105  
##  3rd Qu.: 6.880   3rd Qu.:14.00   3rd Qu.:26.00   3rd Qu.: 7.000  
##  Max.   :24.980   Max.   :18.00   Max.   :51.00   Max.   :44.000  
##     nonwhite          female          married           numdep     
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.000  
##  Median :0.0000   Median :0.0000   Median :1.0000   Median :1.000  
##  Mean   :0.1027   Mean   :0.4791   Mean   :0.6084   Mean   :1.044  
##  3rd Qu.:0.0000   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:2.000  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :6.000  
##       smsa           northcen         south             west       
##  Min.   :0.0000   Min.   :0.000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :1.0000   Median :0.000   Median :0.0000   Median :0.0000  
##  Mean   :0.7224   Mean   :0.251   Mean   :0.3555   Mean   :0.1692  
##  3rd Qu.:1.0000   3rd Qu.:0.750   3rd Qu.:1.0000   3rd Qu.:0.0000  
##  Max.   :1.0000   Max.   :1.000   Max.   :1.0000   Max.   :1.0000  
##     construc          ndurman          trcommpu           trade       
##  Min.   :0.00000   Min.   :0.0000   Min.   :0.00000   Min.   :0.0000  
##  1st Qu.:0.00000   1st Qu.:0.0000   1st Qu.:0.00000   1st Qu.:0.0000  
##  Median :0.00000   Median :0.0000   Median :0.00000   Median :0.0000  
##  Mean   :0.04563   Mean   :0.1141   Mean   :0.04373   Mean   :0.2871  
##  3rd Qu.:0.00000   3rd Qu.:0.0000   3rd Qu.:0.00000   3rd Qu.:1.0000  
##  Max.   :1.00000   Max.   :1.0000   Max.   :1.00000   Max.   :1.0000  
##     services         profserv         profocc          clerocc      
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000   Median :0.0000   Median :0.0000  
##  Mean   :0.1008   Mean   :0.2586   Mean   :0.3669   Mean   :0.1673  
##  3rd Qu.:0.0000   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:0.0000  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
##     servocc           lwage            expersq          tenursq       
##  Min.   :0.0000   Min.   :-0.6349   Min.   :   1.0   Min.   :   0.00  
##  1st Qu.:0.0000   1st Qu.: 1.2030   1st Qu.:  25.0   1st Qu.:   0.00  
##  Median :0.0000   Median : 1.5369   Median : 182.5   Median :   4.00  
##  Mean   :0.1407   Mean   : 1.6233   Mean   : 473.4   Mean   :  78.15  
##  3rd Qu.:0.0000   3rd Qu.: 1.9286   3rd Qu.: 676.0   3rd Qu.:  49.00  
##  Max.   :1.0000   Max.   : 3.2181   Max.   :2601.0   Max.   :1936.00

Esto te proporcionarĆ” un resumen estadĆ­stico de todas las variables en la base de datos ā€œwage1ā€. AdemĆ”s, puedes utilizar funciones especĆ­ficas como mean, sd, quantile, etc., para obtener estadĆ­sticas mĆ”s detalladas.

Media y desviación estĆ”ndar de la variable ā€˜wage’

mean(wage1$wage)
## [1] 5.896103
sd(wage1$wage)
## [1] 3.693086

Cuantiles de la variable ā€˜wage’

quantile(wage1$wage)
##    0%   25%   50%   75%  100% 
##  0.53  3.33  4.65  6.88 24.98

Realicemos ahora algunas graficas con el paquete ggplot2

Histograma de la variable ā€˜wage’

ggplot(wage1, aes(x = wage)) +
  geom_histogram(binwidth = 2, fill = "blue", color = "black") +
  labs(title = "Histograma de Salarios", x = "Salario", y = "Frecuencia") +
  theme_minimal()

Diagrama de dispersión entre Experiencia (educ) y Salario (wage):

# Diagrama de dispersión educación vs. salario
ggplot(wage1, aes(x = educ, y = wage)) +
  geom_point(color = "green") +
  labs(title = "Diagrama de Dispersión entre Educación y Salario", x = "Educación", y = "Salario") +
  theme_minimal()

##GrƔfico de Barras para Categorƭas (female):

ggplot(wage1, aes(x = factor(female), fill = factor(female))) +
  geom_bar() +
  labs(title = "GrƔfico de Barras para GƩnero", x = "GƩnero", y = "Frecuencia") +
  scale_fill_manual(values = c("blue", "pink")) +
  theme_minimal()

Diagrama de caja comparando salarios entre hombres y mujeres

Este código utiliza geom_boxplot para crear un diagrama de caja que compara los salarios entre hombres (0) y mujeres (1). Los colores de llenado se ajustan para representar a hombres en azul y mujeres en rosado.

ggplot(wage1, aes(x = factor(female), y = wage, fill = factor(female))) +
  geom_boxplot() +
  labs(title = "Diagrama de Caja de Salarios por GƩnero", x = "GƩnero", y = "Salario") +
  scale_fill_manual(values = c("blue", "pink")) +
  theme_minimal()

Regresión lineal simple

Corramos una regresion lineal simple entre el logaritmo del salario como variable resultado y la variable predictor de educación

log_wage_model <- lm(lwage ~ educ, data = wage1)
summary(log_wage_model)
## 
## Call:
## lm(formula = lwage ~ educ, data = wage1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.21158 -0.36393 -0.07263  0.29712  1.52339 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.583773   0.097336   5.998 3.74e-09 ***
## educ        0.082744   0.007567  10.935  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4801 on 524 degrees of freedom
## Multiple R-squared:  0.1858, Adjusted R-squared:  0.1843 
## F-statistic: 119.6 on 1 and 524 DF,  p-value: < 2.2e-16
plot(log_wage_model)

Bases de datos de series de tiempo

veamos la base de datos tipo serie de tiempo en Wooldridge (ā€˜prminwge’)

data("prminwge")
# GrƔfico de lƭneas para la variable salarios
ggplot(prminwge, aes(x = year, y = avgmin)) +
  geom_line(color = "blue") +
  labs(title = "GrƔfico crecimiento salarios",
       x = "AƱos",
       y = "Salario minimo") +
  theme_minimal()

Ahora grafiquemos el crecimiento del desempleo

# GrƔfico de lƭneas para la variable desempleo
ggplot(prminwge, aes(x = year, y = prunemp)) +
  geom_line(color = "red") +
  labs(title = "GrƔfico desempleo",
       x = "AƱos",
       y = "Desempleo") +
  theme_minimal()

Base de datos de serie de tiempo DTF

Utilicemos en este caso la tasa DTF efectiva anual y las tasas de interes ofrecidas por los CDT a 180 dias

Carguemos la base de datos

datos <- read.csv("DTF.csv")
# Según lo visto en la clase, ¿qué tipo de base de datos es DTF.csv?

AsegĆŗrate de que la variable ā€˜Vigencia_desde’ sea de tipo Date

datos$Vigencia <- as.Date(datos$Vigencia, format = "%d/%m/%Y")

##Crear el grƔfico usando ggplot2

ggplot(datos, aes(x = Vigencia, y = DTF)) +
  geom_line() +
  labs(title = "Variación de DTF a lo largo del tiempo",
       x = "Vigencia desde (dd/mm/aaaa)",
       y = "DTF %") +
  theme_minimal()

##Crear el grƔfico con dos variables: DTF y CDT 180%

ggplot(datos, aes(x = Vigencia)) +
  geom_line(aes(y = DTF, color = "DTF"), size = 1) +
  geom_line(aes(y = CDT_180, color = "CDT 180%"), linetype = "dashed", size = 0.5) +
  labs(title = "Variación de DTF y CDT 180% a lo largo del tiempo",
       x = "Vigencia desde (dd/mm/aaaa)",
       y = "Porcentaje") +
  scale_color_manual(values = c("DTF" = "blue", "CDT 180%" = "red")) +
  theme_minimal()
## 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.

Ahora veamos una base de datos pool cross sections

data("hprice3")
attach(hprice3)
table(year)
## year
## 1978 1981 
##  179  142

Uso de la base de datos gapminder

# install.packages("gapminder")
library(gapminder)

##Mostrar las variables en el conjunto de datos

variables_gapminder <- names(gapminder)
print(variables_gapminder)
## [1] "country"   "continent" "year"      "lifeExp"   "pop"       "gdpPercap"

##Mostrar los primeros 100 datos del conjunto de datos gapminder

primeros_100_datos <- head(gapminder, 100)
print(primeros_100_datos)
## # A tibble: 100 Ɨ 6
##    country     continent  year lifeExp      pop gdpPercap
##    <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
##  1 Afghanistan Asia       1952    28.8  8425333      779.
##  2 Afghanistan Asia       1957    30.3  9240934      821.
##  3 Afghanistan Asia       1962    32.0 10267083      853.
##  4 Afghanistan Asia       1967    34.0 11537966      836.
##  5 Afghanistan Asia       1972    36.1 13079460      740.
##  6 Afghanistan Asia       1977    38.4 14880372      786.
##  7 Afghanistan Asia       1982    39.9 12881816      978.
##  8 Afghanistan Asia       1987    40.8 13867957      852.
##  9 Afghanistan Asia       1992    41.7 16317921      649.
## 10 Afghanistan Asia       1997    41.8 22227415      635.
## # ℹ 90 more rows

##Mostrar mƔs filas del conjunto de datos gapminder

print(gapminder, n = 100)
## # A tibble: 1,704 Ɨ 6
##     country     continent  year lifeExp      pop gdpPercap
##     <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
##   1 Afghanistan Asia       1952    28.8  8425333      779.
##   2 Afghanistan Asia       1957    30.3  9240934      821.
##   3 Afghanistan Asia       1962    32.0 10267083      853.
##   4 Afghanistan Asia       1967    34.0 11537966      836.
##   5 Afghanistan Asia       1972    36.1 13079460      740.
##   6 Afghanistan Asia       1977    38.4 14880372      786.
##   7 Afghanistan Asia       1982    39.9 12881816      978.
##   8 Afghanistan Asia       1987    40.8 13867957      852.
##   9 Afghanistan Asia       1992    41.7 16317921      649.
##  10 Afghanistan Asia       1997    41.8 22227415      635.
##  11 Afghanistan Asia       2002    42.1 25268405      727.
##  12 Afghanistan Asia       2007    43.8 31889923      975.
##  13 Albania     Europe     1952    55.2  1282697     1601.
##  14 Albania     Europe     1957    59.3  1476505     1942.
##  15 Albania     Europe     1962    64.8  1728137     2313.
##  16 Albania     Europe     1967    66.2  1984060     2760.
##  17 Albania     Europe     1972    67.7  2263554     3313.
##  18 Albania     Europe     1977    68.9  2509048     3533.
##  19 Albania     Europe     1982    70.4  2780097     3631.
##  20 Albania     Europe     1987    72    3075321     3739.
##  21 Albania     Europe     1992    71.6  3326498     2497.
##  22 Albania     Europe     1997    73.0  3428038     3193.
##  23 Albania     Europe     2002    75.7  3508512     4604.
##  24 Albania     Europe     2007    76.4  3600523     5937.
##  25 Algeria     Africa     1952    43.1  9279525     2449.
##  26 Algeria     Africa     1957    45.7 10270856     3014.
##  27 Algeria     Africa     1962    48.3 11000948     2551.
##  28 Algeria     Africa     1967    51.4 12760499     3247.
##  29 Algeria     Africa     1972    54.5 14760787     4183.
##  30 Algeria     Africa     1977    58.0 17152804     4910.
##  31 Algeria     Africa     1982    61.4 20033753     5745.
##  32 Algeria     Africa     1987    65.8 23254956     5681.
##  33 Algeria     Africa     1992    67.7 26298373     5023.
##  34 Algeria     Africa     1997    69.2 29072015     4797.
##  35 Algeria     Africa     2002    71.0 31287142     5288.
##  36 Algeria     Africa     2007    72.3 33333216     6223.
##  37 Angola      Africa     1952    30.0  4232095     3521.
##  38 Angola      Africa     1957    32.0  4561361     3828.
##  39 Angola      Africa     1962    34    4826015     4269.
##  40 Angola      Africa     1967    36.0  5247469     5523.
##  41 Angola      Africa     1972    37.9  5894858     5473.
##  42 Angola      Africa     1977    39.5  6162675     3009.
##  43 Angola      Africa     1982    39.9  7016384     2757.
##  44 Angola      Africa     1987    39.9  7874230     2430.
##  45 Angola      Africa     1992    40.6  8735988     2628.
##  46 Angola      Africa     1997    41.0  9875024     2277.
##  47 Angola      Africa     2002    41.0 10866106     2773.
##  48 Angola      Africa     2007    42.7 12420476     4797.
##  49 Argentina   Americas   1952    62.5 17876956     5911.
##  50 Argentina   Americas   1957    64.4 19610538     6857.
##  51 Argentina   Americas   1962    65.1 21283783     7133.
##  52 Argentina   Americas   1967    65.6 22934225     8053.
##  53 Argentina   Americas   1972    67.1 24779799     9443.
##  54 Argentina   Americas   1977    68.5 26983828    10079.
##  55 Argentina   Americas   1982    69.9 29341374     8998.
##  56 Argentina   Americas   1987    70.8 31620918     9140.
##  57 Argentina   Americas   1992    71.9 33958947     9308.
##  58 Argentina   Americas   1997    73.3 36203463    10967.
##  59 Argentina   Americas   2002    74.3 38331121     8798.
##  60 Argentina   Americas   2007    75.3 40301927    12779.
##  61 Australia   Oceania    1952    69.1  8691212    10040.
##  62 Australia   Oceania    1957    70.3  9712569    10950.
##  63 Australia   Oceania    1962    70.9 10794968    12217.
##  64 Australia   Oceania    1967    71.1 11872264    14526.
##  65 Australia   Oceania    1972    71.9 13177000    16789.
##  66 Australia   Oceania    1977    73.5 14074100    18334.
##  67 Australia   Oceania    1982    74.7 15184200    19477.
##  68 Australia   Oceania    1987    76.3 16257249    21889.
##  69 Australia   Oceania    1992    77.6 17481977    23425.
##  70 Australia   Oceania    1997    78.8 18565243    26998.
##  71 Australia   Oceania    2002    80.4 19546792    30688.
##  72 Australia   Oceania    2007    81.2 20434176    34435.
##  73 Austria     Europe     1952    66.8  6927772     6137.
##  74 Austria     Europe     1957    67.5  6965860     8843.
##  75 Austria     Europe     1962    69.5  7129864    10751.
##  76 Austria     Europe     1967    70.1  7376998    12835.
##  77 Austria     Europe     1972    70.6  7544201    16662.
##  78 Austria     Europe     1977    72.2  7568430    19749.
##  79 Austria     Europe     1982    73.2  7574613    21597.
##  80 Austria     Europe     1987    74.9  7578903    23688.
##  81 Austria     Europe     1992    76.0  7914969    27042.
##  82 Austria     Europe     1997    77.5  8069876    29096.
##  83 Austria     Europe     2002    79.0  8148312    32418.
##  84 Austria     Europe     2007    79.8  8199783    36126.
##  85 Bahrain     Asia       1952    50.9   120447     9867.
##  86 Bahrain     Asia       1957    53.8   138655    11636.
##  87 Bahrain     Asia       1962    56.9   171863    12753.
##  88 Bahrain     Asia       1967    59.9   202182    14805.
##  89 Bahrain     Asia       1972    63.3   230800    18269.
##  90 Bahrain     Asia       1977    65.6   297410    19340.
##  91 Bahrain     Asia       1982    69.1   377967    19211.
##  92 Bahrain     Asia       1987    70.8   454612    18524.
##  93 Bahrain     Asia       1992    72.6   529491    19036.
##  94 Bahrain     Asia       1997    73.9   598561    20292.
##  95 Bahrain     Asia       2002    74.8   656397    23404.
##  96 Bahrain     Asia       2007    75.6   708573    29796.
##  97 Bangladesh  Asia       1952    37.5 46886859      684.
##  98 Bangladesh  Asia       1957    39.3 51365468      662.
##  99 Bangladesh  Asia       1962    41.2 56839289      686.
## 100 Bangladesh  Asia       1967    43.5 62821884      721.
## # ℹ 1,604 more rows

Crear grƔficos

Crear el grÔfico de dispersión cruzando Población con PIB per cÔpita. No es una buena grafica porque es una serie de tiempo.

ggplot(gapminder, aes(x = pop, y = gdpPercap)) +
  geom_point(size = 3, color = "blue") +
  labs(title = "GrÔfico de dispersión de Población y PIB per cÔpita",
       x = "Población",
       y = "PIB per cƔpita") +
  theme_minimal()

Debemos entonces pensar en solo un año para entender mejor la serie. Analicemos que paso en el año 97 con relación al PIB percapita y la esperanza de vida

# Filtrar datos para el aƱo 1997
datos_1997 <- gapminder[gapminder$year == 1997, ]

# Crear el grÔfico de dispersión cruzando PIB per cÔpita con Esperanza de Vida
ggplot(datos_1997, aes(x = gdpPercap, y = lifeExp)) +
  geom_point(size = 3, color = "green") +
  labs(title = "GrÔfico de dispersión de PIB per cÔpita y Esperanza de Vida (1997)",
       x = "PIB per cƔpita",
       y = "Esperanza de Vida") +
  theme_minimal()

Serie 1952 a 2007

Veamos ahora la serie desde 1952 a 2007 con respecto a esta relacion, esperanza de vida y PIB per capita

# Filtrar datos para el aƱo 1952 y 2007
datos_1952 <- gapminder[gapminder$year == 1952, ]
datos_2007 <- gapminder[gapminder$year == 2007, ]

# Crear el grÔfico de dispersión comparando PIB per cÔpita y Esperanza de Vida
ggplot() +
  geom_point(data = datos_1952, aes(x = gdpPercap, y = lifeExp, color = "1952"), size = 3) +
  geom_point(data = datos_2007, aes(x = gdpPercap, y = lifeExp, color = "2007"), size = 3) +
  labs(title = "Comparación de PIB per cÔpita y Esperanza de Vida (1952 vs. 2007)",
       x = "PIB per cƔpita",
       y = "Esperanza de Vida") +
  scale_color_manual(values = c("1952" = "blue", "2007" = "red")) +
  theme_minimal()

¿Y qué pasa en Colombia?

# Filtrar datos para Colombia desde 1952 a 2007
datos_colombia <- gapminder[gapminder$country == "Colombia" & gapminder$year >= 1952 & gapminder$year <= 2007, ]

# Crear el grƔfico de serie de tiempo para PIB per cƔpita de Colombia
ggplot(datos_colombia, aes(x = year, y = gdpPercap)) +
  geom_line(color = "blue", size = 1.5) +
  labs(title = "Serie de Tiempo: PIB per cƔpita en Colombia (1952-2007)",
       x = "AƱo",
       y = "PIB per cƔpita") +
  theme_minimal()

Comparemos paĆ­ses

Por Ćŗltimo, veamos el caso de Colombia, Venezuela y dos paĆ­ses similares en la decada de los 50 (Corea del Sur e Irlanda)

# Filtrar datos para Colombia, Venezuela, Corea del Sur e Irlanda desde 1957 a 2007
datos_paises <- gapminder[gapminder$country %in% c("Colombia", "Venezuela", "Korea, Rep.", "Ireland") & gapminder$year >= 1957 & gapminder$year <= 2007, ]

# Crear el grƔfico de serie de tiempo para PIB per cƔpita de los paƭses seleccionados
ggplot(datos_paises, aes(x = year, y = gdpPercap, color = country)) +
  geom_line(size = 1.5) +
  labs(title = "Serie de Tiempo: PIB per cƔpita (1957-2007)",
       x = "AƱo",
       y = "PIB per cƔpita") +
  theme_minimal()

Base de datos: pooled cross section panel data (pool en dos anos)

Esta es una combinación independiente de cortes transversales en el tiempo datos de 1978 y 1985. Son independientes cada muestra.

library(wooldridge)
data("cps78_85")
head(cps78_85)
tail(cps78_85)

Bases de datos experimentales

Carguemos la base de datos de canasta

datos <- read.csv("experimentos_aleatorios_base copy.csv")
attach(datos)
hist(ha_nchs)

LS0tCnRpdGxlOiAiVGlwb3MgZGUgYmFzZXMgZGUgZGF0b3MiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCi0tLQojIEludHJvZHVjY2nDs24gCgpFbiBlbCBhbsOhbGlzaXMgZGUgcG9sw610aWNhcyBww7pibGljYXMgeSBkZXNhcnJvbGxvIGludGVybmFjaW9uYWwsIHNlIHV0aWxpemFuIGRpdmVyc2FzIGJhc2VzIGRlIGRhdG9zIHF1ZSBhYmFyY2FuIGRlc2RlIGluZm9ybWFjacOzbiBtYWNyb2Vjb27Ds21pY2EgaGFzdGEgZGF0b3MgZXNwZWPDrWZpY29zIHNvYnJlIHByb2dyYW1hcyB5IHByb3llY3Rvcy4gCgpBIHBhcnRpciBkZSBjw7NtbyBzZSBwcmVzZW50ZW4gbG9zIGRhdG9zLCBsYXMgYmFzZXMgZGUgZGF0b3MgcHVlZGVuIHRlbmVyIGRpZmVyZW50ZXMgdGlwb2xvZ8OtYXMKCkVuIGNpZW5jaWEgZGUgZGF0b3MgeSBlY29ub21ldHLDrWEsIHNlIHV0aWxpemFuIGRpdmVyc29zIHRpcG9zIGRlIGJhc2VzIGRlIGRhdG9zIHBhcmEgYW5hbGl6YXIgeSBtb2RlbGFyIGZlbsOzbWVub3MgZWNvbsOzbWljb3MuIEFsZ3Vub3MgZGUgbG9zIHRpcG9zIGRlIGJhc2VzIGRlIGRhdG9zIGNvbXVuZXMgZW4gZXN0ZSBjYW1wbyBpbmNsdXllbjoKCioqQmFzZXMgZGUgRGF0b3MgZGUgU2VyaWVzIFRlbXBvcmFsZXMqKjogQ29udGllbmVuIG9ic2VydmFjaW9uZXMgYSBsbyBsYXJnbyBkZWwgdGllbXBvIHNvYnJlIHZhcmlhYmxlcyBlY29uw7NtaWNhcywgY29tbyB0YXNhcyBkZSBpbnRlcsOpcywgaW5mbGFjacOzbiwgUElCLCB0YXNhcyBkZSBlbXBsZW8sIGVudHJlIG90cmFzLiBFc3RvcyBjb25qdW50b3MgZGUgZGF0b3Mgc29uIGZ1bmRhbWVudGFsZXMgcGFyYSBlbCBhbsOhbGlzaXMgZGUgc2VyaWVzIHRlbXBvcmFsZXMgeSBsYSBtb2RlbGl6YWNpw7NuIGRlIHRlbmRlbmNpYXMgZWNvbsOzbWljYXMuCgoqKkJhc2VzIGRlIERhdG9zIGRlIENvcnRlIFRyYW5zdmVyc2FsKio6IExhcyBiYXNlcyBkZSBkYXRvcyBkZSBjb3J0ZSB0cmFuc3ZlcnNhbCBjb250aWVuZW4gb2JzZXJ2YWNpb25lcyByZWNvcGlsYWRhcyBlbiB1biBzb2xvIHB1bnRvIGVuIGVsIHRpZW1wbyBvIGEgbG8gbGFyZ28gZGUgdW4gcGVyw61vZG8gZXNwZWPDrWZpY28gcGFyYSBkaWZlcmVudGVzIGVudGlkYWRlcyAoY29tbyBwYcOtc2VzLCBlbXByZXNhcywgaW5kaXZpZHVvcykgc2luIHNlZ3VpcmxhcyBlbiBlbCB0aWVtcG8uU29uIGVzZW5jaWFsZXMgcGFyYSBhbmFsaXphciByZWxhY2lvbmVzIHkgdmFyaWFjaW9uZXMgZW4gdW4gbW9tZW50byBlc3BlY8OtZmljbywgY29tbyBsYSBjb21wYXJhY2nDs24gZGUgaW5kaWNhZG9yZXMgZWNvbsOzbWljb3MgZW50cmUgZGlmZXJlbnRlcyBwYcOtc2VzIGVuIHVuIGHDsW8gZGV0ZXJtaW5hZG8uCgoqKkJhc2VzIGRlIERhdG9zIExvbmdpdHVkaW5hbGVzKio6IFJlY29waWxhbiBpbmZvcm1hY2nDs24gc29icmUgdW4gZ3J1cG8gZXNwZWPDrWZpY28gZGUgaW5kaXZpZHVvcywgZW1wcmVzYXMgbyByZWdpb25lcyBhIGxvIGxhcmdvIGRlbCB0aWVtcG8uIEVzdGFzIGJhc2VzIGRlIGRhdG9zIHBlcm1pdGVuIGFuYWxpemFyIGVsIGNhbWJpbyBlbiBlbCB0aWVtcG8geSByZWFsaXphciBlc3R1ZGlvcyBzb2JyZSB0cmF5ZWN0b3JpYXMgaW5kaXZpZHVhbGVzIG8gZXZvbHVjacOzbiBkZSBjaWVydG9zIGluZGljYWRvcmVzIGVjb27Ds21pY29zLgoKKipCYXNlcyBkZSBEYXRvcyBUcmFuc2FjY2lvbmFsZXMqKjogQ29udGllbmVuIGluZm9ybWFjacOzbiBzb2JyZSB0cmFuc2FjY2lvbmVzIGVjb27Ds21pY2FzIGluZGl2aWR1YWxlcy4gRXN0b3MgZGF0b3Mgc29uIGZ1bmRhbWVudGFsZXMgcGFyYSBlbCBhbsOhbGlzaXMgZGUgbWljcm9lY29ub23DrWEgeSBwdWVkZW4gaW5jbHVpciB0cmFuc2FjY2lvbmVzIGNvbWVyY2lhbGVzLCBkYXRvcyBmaW5hbmNpZXJvcyBvIHJlZ2lzdHJvcyBkZSBvcGVyYWNpb25lcy4KCioqQmFzZXMgZGUgRGF0b3MgRXNwYWNpYWxlcyoqOiBDb250aWVuZW4gaW5mb3JtYWNpw7NuIGdlb2dyw6FmaWNhIHJlbGFjaW9uYWRhIGNvbiBmZW7Ds21lbm9zIGVjb27Ds21pY29zLiBFc3RvcyBkYXRvcyBzb24gZXNlbmNpYWxlcyBwYXJhIGVsIGFuw6FsaXNpcyBlc3BhY2lhbCB5IGxhIG1vZGVsaXphY2nDs24gZGUgcGF0cm9uZXMgZWNvbsOzbWljb3MgZW4gZGlmZXJlbnRlcyByZWdpb25lcyBnZW9ncsOhZmljYXMuCgoqKkVuY3Vlc3RhcyBFY29uw7NtaWNhcyoqOiBCYXNlcyBkZSBkYXRvcyBkZXJpdmFkYXMgZGUgZW5jdWVzdGFzIHJlYWxpemFkYXMgYSBpbmRpdmlkdW9zLCBlbXByZXNhcyBvIGhvZ2FyZXMuIEVzdGFzIGVuY3Vlc3RhcyBwdWVkZW4gaW5jbHVpciBpbmZvcm1hY2nDs24gc29icmUgaW5ncmVzb3MsIGdhc3RvcywgcHJlZmVyZW5jaWFzIGRlIGNvbnN1bW8geSBvdHJvcyBhc3BlY3RvcyBzb2Npb2Vjb27Ds21pY29zLgoKKipCYXNlcyBkZSBEYXRvcyBkZSBNZXJjYWRvcyBGaW5hbmNpZXJvcyoqOiBDb250aWVuZW4gaW5mb3JtYWNpw7NuIHNvYnJlIGFjdGl2b3MgZmluYW5jaWVyb3MsIHRyYW5zYWNjaW9uZXMgYnVyc8OhdGlsZXMsIHByZWNpb3MgZGUgYWNjaW9uZXMsIHRhc2FzIGRlIGludGVyw6lzIHkgb3Ryb3MgaW5kaWNhZG9yZXMgcmVsYWNpb25hZG9zIGNvbiBsb3MgbWVyY2Fkb3MgZmluYW5jaWVyb3MuCgoqKkJhc2VzIGRlIERhdG9zIE1hY3JvZWNvbsOzbWljYXMqKjogUmVjb3BpbGFuIGRhdG9zIGFncmVnYWRvcyBhIG5pdmVsIGRlIHBhw61zIG8gcmVnacOzbiBzb2JyZSB2YXJpYWJsZXMgZWNvbsOzbWljYXMgY2xhdmUsIGNvbW8gZWwgUElCLCBsYSBpbmZsYWNpw7NuLCBlbCBkZXNlbXBsZW8sIGxhIGRldWRhIHDDumJsaWNhLCBlbnRyZSBvdHJvcy4KCioqQmFzZXMgZGUgRGF0b3MgRXhwZXJpbWVudGFsZXMqKjogQ29udGllbmVuIGRhdG9zIGRlcml2YWRvcyBkZSBleHBlcmltZW50b3MgZWNvbsOzbWljb3MsIGNvbW8gZW5zYXlvcyBjbMOtbmljb3MsIGVzdHVkaW9zIGRlIGNhbXBvIG8gaW52ZXN0aWdhY2lvbmVzIGNvbnRyb2xhZGFzIHF1ZSBidXNjYW4gYW5hbGl6YXIgZWwgY29tcG9ydGFtaWVudG8gaHVtYW5vIGVuIGNvbnRleHRvcyBlY29uw7NtaWNvcyBlc3BlY8OtZmljb3MuCgpSZXZpc2Vtb3MgZW4gUiBhbGd1bmFzIGRlIGVzdGFzIHRpcG9sb2fDrWFzIGRlIGJhc2VzIGRlIGRhdG9zCgojIEJhc2VzIGRlIGRhdG9zIGRlIENvcnRlIFRyYW5zdmVyc2FsCkluc3RhbGVtb3MgYWxndW5hcyBiYXNlcyBkZSBkYXRvcyBwYXJhIHRyYWJhamFyIGNvbiBlbGxhcwpgYGB7cn0gCmluc3RhbGwucGFja2FnZXMoIndvb2xkcmlkZ2UiKQppbnN0YWxsLnBhY2thZ2VzKCdnYXBtaW5kZXInKQppbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikKbGlicmFyeSh3b29sZHJpZGdlKQpsaWJyYXJ5KGdhcG1pbmRlcikKbGlicmFyeShnZ3Bsb3QyKQpgYGAKCk5hdmVnZW1vcyBwcmltZXJvIGxhcyBiYXNlcyBkZSBkYXRvcyBxdWUgbm9zIG9mcmVjZSBlbCBwYXF1ZXRlIFdvb2xkcmlnZSwuIENvbWVuY2Vtb3MgY29uIGxhIGJhc2UgZGUgZGF0b3MgImFmZmFpcnMiCmBgYHtyfQpoZWxwKHdvb2xkcmlkZ2UpCj8/d29vbGRyaWRnZQpkYXRhKCkKZGF0YSgiYWZmYWlycyIpCmhlYWQoYWZmYWlycykKdGFpbChhZmZhaXJzKQpsZW5ndGgoYWZmYWlycykKYWZmYWlyc1sxOjEwLF0Kc3VtbWFyeShhZmZhaXJzKQpzdW1tYXJ5KGFmZmFpcnMkZWR1YykKYXR0YWNoKGFmZmFpcnMpCnN1bW1hcnkoZWR1YykKZGV0YWNoKGFmZmFpcnMpCiMgc3VtbWFyeShlZHVjKQoKYGBgCgrCv0N1w6FsZXMgc29uIGxvcyBtZXRhZGF0b3MgZGUgZXN0ZSBkYXRhc2V0PwpMb3MgbWV0YWRhdG9zIHB1ZWRlbiBlbmNvbnRyYXJsb3MgZW46IDxodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvd29vbGRyaWRnZS93b29sZHJpZGdlLnBkZj4KClJlY29yZGFyIHF1ZSBlbiByIGxhcyB2YXJpYWJsZXMgY2hhcmFjdGVyIChub21pbmFsKSwgZmFjdG9yIChjYXRlZ29yaWNhcyksIGludGVnZXIgKGRpc2NyZXRhcyksIHkgbnVtZXJpYyAobnVtZXJpY2FzKQoKVmVhbW9zIGFob3JhIGxhIGJhc2UgZGUgZGF0b3MgZGUgY29ydGUgdHJhbnN2ZXJzYWwgKndhZ2UxKgoKIyMgQ2FyZ2FyIGxhIGJhc2UgZGUgZGF0b3MKQ2FyZ2EgbGEgYmFzZSBkZSBkYXRvcyAid2FnZTEiIHkgZXhwbMOzcmFsYToKYGBge3J9CmRhdGEoIndhZ2UxIikKaGVhZCh3YWdlMSkKYXR0YWNoKHdhZ2UxKQpzdHIod2FnZTEpCmBgYAoKIyMgRXhwbG9yYXIgbGEgZXN0cnVjdHVyYSBkZSBsYSBiYXNlIGRlIGRhdG9zCmBgYHtyfQpzdHIod2FnZTEpCiMgU2Vnw7puIHZpc3RvIGVuIGxhIGNsYXNlLCDCv3F1w6kgdGlwbyBkZSBiYXNlIGRlIGRhdG8gZXM/CmBgYAoKUHVlZGVzIHV0aWxpemFyIGxhIGZ1bmNpw7NuICoqc3VtbWFyeSoqIHBhcmEgb2J0ZW5lciBlc3RhZMOtc3RpY2FzIGRlc2NyaXB0aXZhcyBiw6FzaWNhczoKIyMgRXN0YWTDrXN0aWNhcyBkZXNjcmlwdGl2YXMKYGBge3J9CnN1bW1hcnkod2FnZTEpCmBgYAoKRXN0byB0ZSBwcm9wb3JjaW9uYXLDoSB1biByZXN1bWVuIGVzdGFkw61zdGljbyBkZSB0b2RhcyBsYXMgdmFyaWFibGVzIGVuIGxhIGJhc2UgZGUgZGF0b3MgIndhZ2UxIi4gQWRlbcOhcywgcHVlZGVzIHV0aWxpemFyIGZ1bmNpb25lcyBlc3BlY8OtZmljYXMgY29tbyAqKm1lYW4qKiwgKipzZCoqLCAqKnF1YW50aWxlKiosIGV0Yy4sIHBhcmEgb2J0ZW5lciBlc3RhZMOtc3RpY2FzIG3DoXMgZGV0YWxsYWRhcy4KCiMjIE1lZGlhIHkgZGVzdmlhY2nDs24gZXN0w6FuZGFyIGRlIGxhIHZhcmlhYmxlICd3YWdlJwpgYGB7cn0KbWVhbih3YWdlMSR3YWdlKQpzZCh3YWdlMSR3YWdlKQpgYGAKCiMjIEN1YW50aWxlcyBkZSBsYSB2YXJpYWJsZSAnd2FnZScKYGBge3J9CnF1YW50aWxlKHdhZ2UxJHdhZ2UpCmBgYAoKUmVhbGljZW1vcyBhaG9yYSBhbGd1bmFzIGdyYWZpY2FzIGNvbiBlbCBwYXF1ZXRlIGdncGxvdDIKCiMjIEhpc3RvZ3JhbWEgZGUgbGEgdmFyaWFibGUgJ3dhZ2UnCmBgYHtyfQpnZ3Bsb3Qod2FnZTEsIGFlcyh4ID0gd2FnZSkpICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDIsIGZpbGwgPSAiYmx1ZSIsIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnModGl0bGUgPSAiSGlzdG9ncmFtYSBkZSBTYWxhcmlvcyIsIHggPSAiU2FsYXJpbyIsIHkgPSAiRnJlY3VlbmNpYSIpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgojIyBEaWFncmFtYSBkZSBkaXNwZXJzacOzbiBlbnRyZSBFeHBlcmllbmNpYSAoZWR1YykgeSBTYWxhcmlvICh3YWdlKToKIApgYGB7cn0KIyBEaWFncmFtYSBkZSBkaXNwZXJzacOzbiBlZHVjYWNpw7NuIHZzLiBzYWxhcmlvCmdncGxvdCh3YWdlMSwgYWVzKHggPSBlZHVjLCB5ID0gd2FnZSkpICsKICBnZW9tX3BvaW50KGNvbG9yID0gImdyZWVuIikgKwogIGxhYnModGl0bGUgPSAiRGlhZ3JhbWEgZGUgRGlzcGVyc2nDs24gZW50cmUgRWR1Y2FjacOzbiB5IFNhbGFyaW8iLCB4ID0gIkVkdWNhY2nDs24iLCB5ID0gIlNhbGFyaW8iKSArCiAgdGhlbWVfbWluaW1hbCgpCmBgYAoKIyNHcsOhZmljbyBkZSBCYXJyYXMgcGFyYSBDYXRlZ29yw61hcyAoZmVtYWxlKToKCmBgYHtyfQoKZ2dwbG90KHdhZ2UxLCBhZXMoeCA9IGZhY3RvcihmZW1hbGUpLCBmaWxsID0gZmFjdG9yKGZlbWFsZSkpKSArCiAgZ2VvbV9iYXIoKSArCiAgbGFicyh0aXRsZSA9ICJHcsOhZmljbyBkZSBCYXJyYXMgcGFyYSBHw6luZXJvIiwgeCA9ICJHw6luZXJvIiwgeSA9ICJGcmVjdWVuY2lhIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImJsdWUiLCAicGluayIpKSArCiAgdGhlbWVfbWluaW1hbCgpCmBgYAoKIyMgRGlhZ3JhbWEgZGUgY2FqYSBjb21wYXJhbmRvIHNhbGFyaW9zIGVudHJlIGhvbWJyZXMgeSBtdWplcmVzCkVzdGUgY8OzZGlnbyB1dGlsaXphIGdlb21fYm94cGxvdCBwYXJhIGNyZWFyIHVuIGRpYWdyYW1hIGRlIGNhamEgcXVlIGNvbXBhcmEgbG9zIHNhbGFyaW9zIGVudHJlIGhvbWJyZXMgKDApIHkgbXVqZXJlcyAoMSkuIExvcyBjb2xvcmVzIGRlIGxsZW5hZG8gc2UgYWp1c3RhbiBwYXJhIHJlcHJlc2VudGFyIGEgaG9tYnJlcyBlbiBhenVsIHkgbXVqZXJlcyBlbiByb3NhZG8uCgpgYGB7cn0KCmdncGxvdCh3YWdlMSwgYWVzKHggPSBmYWN0b3IoZmVtYWxlKSwgeSA9IHdhZ2UsIGZpbGwgPSBmYWN0b3IoZmVtYWxlKSkpICsKICBnZW9tX2JveHBsb3QoKSArCiAgbGFicyh0aXRsZSA9ICJEaWFncmFtYSBkZSBDYWphIGRlIFNhbGFyaW9zIHBvciBHw6luZXJvIiwgeCA9ICJHw6luZXJvIiwgeSA9ICJTYWxhcmlvIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImJsdWUiLCAicGluayIpKSArCiAgdGhlbWVfbWluaW1hbCgpCmBgYAoKIyMgUmVncmVzacOzbiBsaW5lYWwgc2ltcGxlCkNvcnJhbW9zIHVuYSByZWdyZXNpb24gbGluZWFsIHNpbXBsZSBlbnRyZSBlbCBsb2dhcml0bW8gZGVsIHNhbGFyaW8gY29tbyB2YXJpYWJsZSByZXN1bHRhZG8geSBsYSB2YXJpYWJsZSBwcmVkaWN0b3IgZGUgZWR1Y2FjacOzbgoKYGBge3J9CmxvZ193YWdlX21vZGVsIDwtIGxtKGx3YWdlIH4gZWR1YywgZGF0YSA9IHdhZ2UxKQpzdW1tYXJ5KGxvZ193YWdlX21vZGVsKQpwbG90KGxvZ193YWdlX21vZGVsKQpgYGAKCiMgQmFzZXMgZGUgZGF0b3MgZGUgc2VyaWVzIGRlIHRpZW1wbwoKIyMgdmVhbW9zIGxhIGJhc2UgZGUgZGF0b3MgdGlwbyBzZXJpZSBkZSB0aWVtcG8gZW4gV29vbGRyaWRnZSAoJ3BybWlud2dlJykKYGBge3J9CmRhdGEoInBybWlud2dlIikKYGBgCgpgYGB7cn0KIyBHcsOhZmljbyBkZSBsw61uZWFzIHBhcmEgbGEgdmFyaWFibGUgc2FsYXJpb3MKZ2dwbG90KHBybWlud2dlLCBhZXMoeCA9IHllYXIsIHkgPSBhdmdtaW4pKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsdWUiKSArCiAgbGFicyh0aXRsZSA9ICJHcsOhZmljbyBjcmVjaW1pZW50byBzYWxhcmlvcyIsCiAgICAgICB4ID0gIkHDsW9zIiwKICAgICAgIHkgPSAiU2FsYXJpbyBtaW5pbW8iKSArCiAgdGhlbWVfbWluaW1hbCgpCmBgYAoKIyMgQWhvcmEgZ3JhZmlxdWVtb3MgZWwgY3JlY2ltaWVudG8gZGVsIGRlc2VtcGxlbwoKYGBge3J9CiMgR3LDoWZpY28gZGUgbMOtbmVhcyBwYXJhIGxhIHZhcmlhYmxlIGRlc2VtcGxlbwpnZ3Bsb3QocHJtaW53Z2UsIGFlcyh4ID0geWVhciwgeSA9IHBydW5lbXApKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gInJlZCIpICsKICBsYWJzKHRpdGxlID0gIkdyw6FmaWNvIGRlc2VtcGxlbyIsCiAgICAgICB4ID0gIkHDsW9zIiwKICAgICAgIHkgPSAiRGVzZW1wbGVvIikgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCiMjIEJhc2UgZGUgZGF0b3MgZGUgc2VyaWUgZGUgdGllbXBvIERURgoKVXRpbGljZW1vcyBlbiBlc3RlIGNhc28gbGEgdGFzYSBEVEYgZWZlY3RpdmEgYW51YWwgeSBsYXMgdGFzYXMgZGUgaW50ZXJlcyBvZnJlY2lkYXMgcG9yIGxvcyBDRFQgYSAxODAgZGlhcwoKIyMgQ2FyZ3VlbW9zIGxhIGJhc2UgZGUgZGF0b3MKYGBge3J9CmRhdG9zIDwtIHJlYWQuY3N2KCJEVEYuY3N2IikKIyBTZWfDum4gbG8gdmlzdG8gZW4gbGEgY2xhc2UsIMK/cXXDqSB0aXBvIGRlIGJhc2UgZGUgZGF0b3MgZXMgRFRGLmNzdj8KYGBgCgpBc2Vnw7pyYXRlIGRlIHF1ZSBsYSB2YXJpYWJsZSAnVmlnZW5jaWFfZGVzZGUnIHNlYSBkZSB0aXBvIERhdGUKYGBge3J9CmRhdG9zJFZpZ2VuY2lhIDwtIGFzLkRhdGUoZGF0b3MkVmlnZW5jaWEsIGZvcm1hdCA9ICIlZC8lbS8lWSIpCmBgYAoKIyNDcmVhciBlbCBncsOhZmljbyB1c2FuZG8gZ2dwbG90MgpgYGB7cn0KZ2dwbG90KGRhdG9zLCBhZXMoeCA9IFZpZ2VuY2lhLCB5ID0gRFRGKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIlZhcmlhY2nDs24gZGUgRFRGIGEgbG8gbGFyZ28gZGVsIHRpZW1wbyIsCiAgICAgICB4ID0gIlZpZ2VuY2lhIGRlc2RlIChkZC9tbS9hYWFhKSIsCiAgICAgICB5ID0gIkRURiAlIikgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCiMjQ3JlYXIgZWwgZ3LDoWZpY28gY29uIGRvcyB2YXJpYWJsZXM6IERURiB5IENEVCAxODAlCmBgYHtyfQpnZ3Bsb3QoZGF0b3MsIGFlcyh4ID0gVmlnZW5jaWEpKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gRFRGLCBjb2xvciA9ICJEVEYiKSwgc2l6ZSA9IDEpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBDRFRfMTgwLCBjb2xvciA9ICJDRFQgMTgwJSIpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBzaXplID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJWYXJpYWNpw7NuIGRlIERURiB5IENEVCAxODAlIGEgbG8gbGFyZ28gZGVsIHRpZW1wbyIsCiAgICAgICB4ID0gIlZpZ2VuY2lhIGRlc2RlIChkZC9tbS9hYWFhKSIsCiAgICAgICB5ID0gIlBvcmNlbnRhamUiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIkRURiIgPSAiYmx1ZSIsICJDRFQgMTgwJSIgPSAicmVkIikpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgpBaG9yYSB2ZWFtb3MgdW5hIGJhc2UgZGUgZGF0b3MgcG9vbCBjcm9zcyBzZWN0aW9ucwoKYGBge3J9CmRhdGEoImhwcmljZTMiKQphdHRhY2goaHByaWNlMykKdGFibGUoeWVhcikKYGBgCgojIFVzbyBkZSBsYSBiYXNlIGRlIGRhdG9zIGdhcG1pbmRlcgpgYGB7cn0KIyBpbnN0YWxsLnBhY2thZ2VzKCJnYXBtaW5kZXIiKQpsaWJyYXJ5KGdhcG1pbmRlcikKYGBgCgojI01vc3RyYXIgbGFzIHZhcmlhYmxlcyBlbiBlbCBjb25qdW50byBkZSBkYXRvcwpgYGB7cn0KdmFyaWFibGVzX2dhcG1pbmRlciA8LSBuYW1lcyhnYXBtaW5kZXIpCnByaW50KHZhcmlhYmxlc19nYXBtaW5kZXIpCmBgYAoKIyNNb3N0cmFyIGxvcyBwcmltZXJvcyAxMDAgZGF0b3MgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIGdhcG1pbmRlcgpgYGB7cn0KcHJpbWVyb3NfMTAwX2RhdG9zIDwtIGhlYWQoZ2FwbWluZGVyLCAxMDApCnByaW50KHByaW1lcm9zXzEwMF9kYXRvcykKYGBgCgojI01vc3RyYXIgbcOhcyBmaWxhcyBkZWwgY29uanVudG8gZGUgZGF0b3MgZ2FwbWluZGVyCmBgYHtyfQpwcmludChnYXBtaW5kZXIsIG4gPSAxMDApCmBgYAoKIyMgQ3JlYXIgZ3LDoWZpY29zCkNyZWFyIGVsIGdyw6FmaWNvIGRlIGRpc3BlcnNpw7NuIGNydXphbmRvIFBvYmxhY2nDs24gY29uIFBJQiBwZXIgY8OhcGl0YS4gTm8gZXMgdW5hIGJ1ZW5hIGdyYWZpY2EgcG9ycXVlIGVzIHVuYSBzZXJpZSBkZSB0aWVtcG8uIApgYGB7cn0KZ2dwbG90KGdhcG1pbmRlciwgYWVzKHggPSBwb3AsIHkgPSBnZHBQZXJjYXApKSArCiAgZ2VvbV9wb2ludChzaXplID0gMywgY29sb3IgPSAiYmx1ZSIpICsKICBsYWJzKHRpdGxlID0gIkdyw6FmaWNvIGRlIGRpc3BlcnNpw7NuIGRlIFBvYmxhY2nDs24geSBQSUIgcGVyIGPDoXBpdGEiLAogICAgICAgeCA9ICJQb2JsYWNpw7NuIiwKICAgICAgIHkgPSAiUElCIHBlciBjw6FwaXRhIikgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCkRlYmVtb3MgZW50b25jZXMgcGVuc2FyIGVuIHNvbG8gdW4gYcOxbyBwYXJhIGVudGVuZGVyIG1lam9yIGxhIHNlcmllLiBBbmFsaWNlbW9zIHF1ZSBwYXNvIGVuIGVsIGHDsW8gOTcgY29uIHJlbGFjacOzbiBhbCBQSUIgcGVyY2FwaXRhIHkgbGEgZXNwZXJhbnphIGRlIHZpZGEKCmBgYHtyfQojIEZpbHRyYXIgZGF0b3MgcGFyYSBlbCBhw7FvIDE5OTcKZGF0b3NfMTk5NyA8LSBnYXBtaW5kZXJbZ2FwbWluZGVyJHllYXIgPT0gMTk5NywgXQoKIyBDcmVhciBlbCBncsOhZmljbyBkZSBkaXNwZXJzacOzbiBjcnV6YW5kbyBQSUIgcGVyIGPDoXBpdGEgY29uIEVzcGVyYW56YSBkZSBWaWRhCmdncGxvdChkYXRvc18xOTk3LCBhZXMoeCA9IGdkcFBlcmNhcCwgeSA9IGxpZmVFeHApKSArCiAgZ2VvbV9wb2ludChzaXplID0gMywgY29sb3IgPSAiZ3JlZW4iKSArCiAgbGFicyh0aXRsZSA9ICJHcsOhZmljbyBkZSBkaXNwZXJzacOzbiBkZSBQSUIgcGVyIGPDoXBpdGEgeSBFc3BlcmFuemEgZGUgVmlkYSAoMTk5NykiLAogICAgICAgeCA9ICJQSUIgcGVyIGPDoXBpdGEiLAogICAgICAgeSA9ICJFc3BlcmFuemEgZGUgVmlkYSIpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgojIyBTZXJpZSAxOTUyIGEgMjAwNwpWZWFtb3MgYWhvcmEgbGEgc2VyaWUgZGVzZGUgMTk1MiBhIDIwMDcgY29uIHJlc3BlY3RvIGEgZXN0YSByZWxhY2lvbiwgZXNwZXJhbnphIGRlIHZpZGEgeSBQSUIgcGVyIGNhcGl0YQoKYGBge3J9CiMgRmlsdHJhciBkYXRvcyBwYXJhIGVsIGHDsW8gMTk1MiB5IDIwMDcKZGF0b3NfMTk1MiA8LSBnYXBtaW5kZXJbZ2FwbWluZGVyJHllYXIgPT0gMTk1MiwgXQpkYXRvc18yMDA3IDwtIGdhcG1pbmRlcltnYXBtaW5kZXIkeWVhciA9PSAyMDA3LCBdCgojIENyZWFyIGVsIGdyw6FmaWNvIGRlIGRpc3BlcnNpw7NuIGNvbXBhcmFuZG8gUElCIHBlciBjw6FwaXRhIHkgRXNwZXJhbnphIGRlIFZpZGEKZ2dwbG90KCkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGRhdG9zXzE5NTIsIGFlcyh4ID0gZ2RwUGVyY2FwLCB5ID0gbGlmZUV4cCwgY29sb3IgPSAiMTk1MiIpLCBzaXplID0gMykgKwogIGdlb21fcG9pbnQoZGF0YSA9IGRhdG9zXzIwMDcsIGFlcyh4ID0gZ2RwUGVyY2FwLCB5ID0gbGlmZUV4cCwgY29sb3IgPSAiMjAwNyIpLCBzaXplID0gMykgKwogIGxhYnModGl0bGUgPSAiQ29tcGFyYWNpw7NuIGRlIFBJQiBwZXIgY8OhcGl0YSB5IEVzcGVyYW56YSBkZSBWaWRhICgxOTUyIHZzLiAyMDA3KSIsCiAgICAgICB4ID0gIlBJQiBwZXIgY8OhcGl0YSIsCiAgICAgICB5ID0gIkVzcGVyYW56YSBkZSBWaWRhIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIxOTUyIiA9ICJibHVlIiwgIjIwMDciID0gInJlZCIpKSArCiAgdGhlbWVfbWluaW1hbCgpCmBgYAoKwr9ZIHF1w6kgcGFzYSBlbiAqKkNvbG9tYmlhKio/CgpgYGB7cn0KIyBGaWx0cmFyIGRhdG9zIHBhcmEgQ29sb21iaWEgZGVzZGUgMTk1MiBhIDIwMDcKZGF0b3NfY29sb21iaWEgPC0gZ2FwbWluZGVyW2dhcG1pbmRlciRjb3VudHJ5ID09ICJDb2xvbWJpYSIgJiBnYXBtaW5kZXIkeWVhciA+PSAxOTUyICYgZ2FwbWluZGVyJHllYXIgPD0gMjAwNywgXQoKIyBDcmVhciBlbCBncsOhZmljbyBkZSBzZXJpZSBkZSB0aWVtcG8gcGFyYSBQSUIgcGVyIGPDoXBpdGEgZGUgQ29sb21iaWEKZ2dwbG90KGRhdG9zX2NvbG9tYmlhLCBhZXMoeCA9IHllYXIsIHkgPSBnZHBQZXJjYXApKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gImJsdWUiLCBzaXplID0gMS41KSArCiAgbGFicyh0aXRsZSA9ICJTZXJpZSBkZSBUaWVtcG86IFBJQiBwZXIgY8OhcGl0YSBlbiBDb2xvbWJpYSAoMTk1Mi0yMDA3KSIsCiAgICAgICB4ID0gIkHDsW8iLAogICAgICAgeSA9ICJQSUIgcGVyIGPDoXBpdGEiKSArCiAgdGhlbWVfbWluaW1hbCgpCmBgYAoKIyMgQ29tcGFyZW1vcyBwYcOtc2VzClBvciDDumx0aW1vLCB2ZWFtb3MgZWwgY2FzbyBkZSBDb2xvbWJpYSwgVmVuZXp1ZWxhIHkgZG9zIHBhw61zZXMgc2ltaWxhcmVzIGVuIGxhIGRlY2FkYSBkZSBsb3MgNTAgKENvcmVhIGRlbCBTdXIgZSBJcmxhbmRhKQoKYGBge3J9CiMgRmlsdHJhciBkYXRvcyBwYXJhIENvbG9tYmlhLCBWZW5lenVlbGEsIENvcmVhIGRlbCBTdXIgZSBJcmxhbmRhIGRlc2RlIDE5NTcgYSAyMDA3CmRhdG9zX3BhaXNlcyA8LSBnYXBtaW5kZXJbZ2FwbWluZGVyJGNvdW50cnkgJWluJSBjKCJDb2xvbWJpYSIsICJWZW5lenVlbGEiLCAiS29yZWEsIFJlcC4iLCAiSXJlbGFuZCIpICYgZ2FwbWluZGVyJHllYXIgPj0gMTk1NyAmIGdhcG1pbmRlciR5ZWFyIDw9IDIwMDcsIF0KCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgc2VyaWUgZGUgdGllbXBvIHBhcmEgUElCIHBlciBjw6FwaXRhIGRlIGxvcyBwYcOtc2VzIHNlbGVjY2lvbmFkb3MKZ2dwbG90KGRhdG9zX3BhaXNlcywgYWVzKHggPSB5ZWFyLCB5ID0gZ2RwUGVyY2FwLCBjb2xvciA9IGNvdW50cnkpKSArCiAgZ2VvbV9saW5lKHNpemUgPSAxLjUpICsKICBsYWJzKHRpdGxlID0gIlNlcmllIGRlIFRpZW1wbzogUElCIHBlciBjw6FwaXRhICgxOTU3LTIwMDcpIiwKICAgICAgIHggPSAiQcOxbyIsCiAgICAgICB5ID0gIlBJQiBwZXIgY8OhcGl0YSIpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgojIEJhc2UgZGUgZGF0b3M6IHBvb2xlZCBjcm9zcyBzZWN0aW9uIHBhbmVsIGRhdGEgKHBvb2wgZW4gZG9zIGFub3MpCgpFc3RhIGVzIHVuYSBjb21iaW5hY2nDs24gaW5kZXBlbmRpZW50ZSBkZSBjb3J0ZXMgdHJhbnN2ZXJzYWxlcyBlbiBlbCB0aWVtcG8gZGF0b3MgZGUgMTk3OCB5IDE5ODUuIFNvbiBpbmRlcGVuZGllbnRlcyBjYWRhIG11ZXN0cmEuCgpgYGB7cn0KbGlicmFyeSh3b29sZHJpZGdlKQpkYXRhKCJjcHM3OF84NSIpCmhlYWQoY3BzNzhfODUpCnRhaWwoY3BzNzhfODUpCmBgYAojIEJhc2VzIGRlIGRhdG9zIGV4cGVyaW1lbnRhbGVzCgpDYXJndWVtb3MgbGEgYmFzZSBkZSBkYXRvcyBkZSBjYW5hc3RhCmBgYHtyfQpkYXRvcyA8LSByZWFkLmNzdigiZXhwZXJpbWVudG9zX2FsZWF0b3Jpb3NfYmFzZSBjb3B5LmNzdiIpCmF0dGFjaChkYXRvcykKYGBgCgpgYGB7cn0KaGlzdChoYV9uY2hzKQpgYGAKCg==