PEC3

Solución PAC3

Victoria Bermúdez Ruiz

Última modificación

29 de novembre de 2024

Actividad 1

En esta actividad utilizaremos un marco de datos que contiene información de la European Social Survey (ESS). La ESS es una encuesta que se realiza a nivel europeo y es ampliamente utilizada en los campos de la Sociología y la Ciencia Política. Con estos datos, analizaremos las diversas dimensiones del desarrollo social entre países. Importaremos los datos almacenados en CRON_fin.xlsx con la función read_xls() y le daremos el nombre de cron. Una vez realizada la importación, asegúrate de que en el Environment aparezca el objeto cron.

Mostrar codigo
library(readxl)
cron <- read_xlsx("CRON_fin.xlsx")

Realiza una exploración rápida del mismo con las funciones que conoces, identificando el número de observaciones, qué variables tiene, cómo están codificadas y la unidad de observación.

Mostrar codigo
cron
# A tibble: 6,032 × 24
   cntry  gndr  agea eduyrs eisced hincfel hinctnta netusoft region  w4q1  w4q2
   <chr> <dbl> <dbl>  <dbl>  <dbl>   <dbl>    <dbl>    <dbl> <chr>  <dbl> <dbl>
 1 AT        1    73     11      3       1       10        5 AT32       4     4
 2 AT        2    41     13      6       2       77        5 AT22       4     4
 3 AT        1    35     14      5       1        3        5 AT22       4     5
 4 AT        1    55     12      3       1       77        4 AT34       3     3
 5 AT        2    65     12      2       1        7        5 AT12       4     5
 6 AT        2    27     21      6       2       77        5 AT31       4     4
 7 AT        2    35     20      7       2        6        5 AT31       5     3
 8 AT        2    20     14      4       3        8        5 AT12       3     3
 9 AT        1    68     25      7       1        8        5 AT12       3     2
10 AT        1    51     14      5       1        7        4 AT21       3     4
# ℹ 6,022 more rows
# ℹ 13 more variables: w4q3 <dbl>, w4q4 <dbl>, w4q5 <dbl>, w4q6 <dbl>,
#   w4q7 <dbl>, w4q8 <dbl>, w4q9 <dbl>, w4q10 <dbl>, w4q11 <dbl>, w4q12 <dbl>,
#   w4q13 <dbl>, w4q14 <dbl>, w4q15 <dbl>
Mostrar codigo
head(cron)
# A tibble: 6 × 24
  cntry  gndr  agea eduyrs eisced hincfel hinctnta netusoft region  w4q1  w4q2
  <chr> <dbl> <dbl>  <dbl>  <dbl>   <dbl>    <dbl>    <dbl> <chr>  <dbl> <dbl>
1 AT        1    73     11      3       1       10        5 AT32       4     4
2 AT        2    41     13      6       2       77        5 AT22       4     4
3 AT        1    35     14      5       1        3        5 AT22       4     5
4 AT        1    55     12      3       1       77        4 AT34       3     3
5 AT        2    65     12      2       1        7        5 AT12       4     5
6 AT        2    27     21      6       2       77        5 AT31       4     4
# ℹ 13 more variables: w4q3 <dbl>, w4q4 <dbl>, w4q5 <dbl>, w4q6 <dbl>,
#   w4q7 <dbl>, w4q8 <dbl>, w4q9 <dbl>, w4q10 <dbl>, w4q11 <dbl>, w4q12 <dbl>,
#   w4q13 <dbl>, w4q14 <dbl>, w4q15 <dbl>
Mostrar codigo
str(cron)
tibble [6,032 × 24] (S3: tbl_df/tbl/data.frame)
 $ cntry   : chr [1:6032] "AT" "AT" "AT" "AT" ...
 $ gndr    : num [1:6032] 1 2 1 1 2 2 2 2 1 1 ...
 $ agea    : num [1:6032] 73 41 35 55 65 27 35 20 68 51 ...
 $ eduyrs  : num [1:6032] 11 13 14 12 12 21 20 14 25 14 ...
 $ eisced  : num [1:6032] 3 6 5 3 2 6 7 4 7 5 ...
 $ hincfel : num [1:6032] 1 2 1 1 1 2 2 3 1 1 ...
 $ hinctnta: num [1:6032] 10 77 3 77 7 77 6 8 8 7 ...
 $ netusoft: num [1:6032] 5 5 5 4 5 5 5 5 5 4 ...
 $ region  : chr [1:6032] "AT32" "AT22" "AT22" "AT34" ...
 $ w4q1    : num [1:6032] 4 4 4 3 4 4 5 3 3 3 ...
 $ w4q2    : num [1:6032] 4 4 5 3 5 4 3 3 2 4 ...
 $ w4q3    : num [1:6032] 3 3 4 3 3 2 1 1 4 3 ...
 $ w4q4    : num [1:6032] 3 4 3 3 4 3 4 2 3 2 ...
 $ w4q5    : num [1:6032] 4 4 5 4 5 4 5 4 3 4 ...
 $ w4q6    : num [1:6032] 5 4 5 4 5 4 5 5 4 4 ...
 $ w4q7    : num [1:6032] 4 2 4 2 5 2 3 3 2 2 ...
 $ w4q8    : num [1:6032] 4 4 2 4 5 4 5 4 4 3 ...
 $ w4q9    : num [1:6032] 5 4 4 4 5 4 5 5 4 3 ...
 $ w4q10   : num [1:6032] 4 3 5 4 4 3 5 3 2 3 ...
 $ w4q11   : num [1:6032] 5 3 5 2 1 2 3 3 2 3 ...
 $ w4q12   : num [1:6032] 5 4 3 4 5 4 3 4 4 3 ...
 $ w4q13   : num [1:6032] 5 4 2 4 5 4 4 5 4 3 ...
 $ w4q14   : num [1:6032] 5 4 3 4 5 4 5 4 4 4 ...
 $ w4q15   : num [1:6032] 4 4 3 4 5 4 4 2 4 3 ...
Mostrar codigo
dim(cron)
[1] 6032   24
Mostrar codigo
summary(cron)
    cntry                gndr            agea            eduyrs     
 Length:6032        Min.   :1.000   Min.   : 17.00   Min.   : 0.00  
 Class :character   1st Qu.:1.000   1st Qu.: 37.00   1st Qu.:12.00  
 Mode  :character   Median :2.000   Median : 51.00   Median :15.00  
                    Mean   :1.536   Mean   : 50.83   Mean   :15.63  
                    3rd Qu.:2.000   3rd Qu.: 63.00   3rd Qu.:17.00  
                    Max.   :9.000   Max.   :999.00   Max.   :99.00  
     eisced          hincfel         hinctnta        netusoft    
 Min.   : 1.000   Min.   :1.000   Min.   : 1.00   Min.   :1.000  
 1st Qu.: 4.000   1st Qu.:1.000   1st Qu.: 5.00   1st Qu.:5.000  
 Median : 5.000   Median :1.000   Median : 7.00   Median :5.000  
 Mean   : 5.208   Mean   :1.658   Mean   :12.46   Mean   :4.791  
 3rd Qu.: 6.000   3rd Qu.:2.000   3rd Qu.: 9.00   3rd Qu.:5.000  
 Max.   :99.000   Max.   :9.000   Max.   :99.00   Max.   :9.000  
    region               w4q1            w4q2            w4q3      
 Length:6032        Min.   :1.000   Min.   :1.000   Min.   :1.000  
 Class :character   1st Qu.:4.000   1st Qu.:4.000   1st Qu.:1.000  
 Mode  :character   Median :4.000   Median :4.000   Median :2.000  
                    Mean   :4.122   Mean   :4.066   Mean   :2.273  
                    3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:3.000  
                    Max.   :9.000   Max.   :9.000   Max.   :9.000  
      w4q4            w4q5            w4q6           w4q7            w4q8      
 Min.   :1.000   Min.   :1.000   Min.   :1.00   Min.   :1.000   Min.   :1.000  
 1st Qu.:3.000   1st Qu.:4.000   1st Qu.:4.00   1st Qu.:2.000   1st Qu.:4.000  
 Median :3.000   Median :4.000   Median :5.00   Median :3.000   Median :4.000  
 Mean   :3.224   Mean   :4.229   Mean   :4.58   Mean   :3.064   Mean   :4.059  
 3rd Qu.:4.000   3rd Qu.:5.000   3rd Qu.:5.00   3rd Qu.:4.000   3rd Qu.:5.000  
 Max.   :9.000   Max.   :9.000   Max.   :9.00   Max.   :9.000   Max.   :9.000  
      w4q9           w4q10           w4q11           w4q12      
 Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
 1st Qu.:4.000   1st Qu.:3.000   1st Qu.:2.000   1st Qu.:4.000  
 Median :5.000   Median :4.000   Median :3.000   Median :4.000  
 Mean   :4.495   Mean   :3.818   Mean   :3.017   Mean   :4.163  
 3rd Qu.:5.000   3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:5.000  
 Max.   :9.000   Max.   :9.000   Max.   :9.000   Max.   :9.000  
     w4q13           w4q14           w4q15      
 Min.   :1.000   Min.   :1.000   Min.   :1.000  
 1st Qu.:4.000   1st Qu.:4.000   1st Qu.:3.000  
 Median :5.000   Median :5.000   Median :4.000  
 Mean   :4.501   Mean   :4.526   Mean   :3.988  
 3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:4.000  
 Max.   :9.000   Max.   :9.000   Max.   :9.000  

Actividad 2

Para examinar a fondo la tabla, es importante que utilices el libro de códigos CRON2W4e01 codebook.html incluido en el archivo zip que te has descargado. Responde las siguientes preguntas con el resultado y un breve análisis.

  1. Crea una tabla de frecuencias para la variable w4q13 y comenta el resultado.
Mostrar codigo
table(cron$w4q13)

   1    2    3    4    5    9 
  17   68  429 2094 3370   54 
Mostrar codigo
# La tabla muestra la existencia de seis valores, que se distribuyen de forma desigual. La mayoría se concentra en el valor "5", y la minoría en el valor "1".
  1. Calcula la frecuencia absoluta de la variable cntry. Representa la frecuencia y comenta brevemente el resultado.
Mostrar codigo
table(cron$cntry)

 AT  BE  CZ  FI  FR  GB  IS  IT  PT  SE  SI 
647 573 284 739 724 487 525 243 396 845 569 
Mostrar codigo
# En la tabla se muestra que los países más seleccionados son Suecia, Finlandia y Austria. Los menos elegidos son Italia y Chequia.
  1. Explica la variable w4q3 en Portugal, Francia y Suecia y razona sobre los resultados. Pista: usa filter(), count(x) y ten en cuenta que la variable w4q3 indica la prioridad de “Enfatizar los valores religiosos”.
Mostrar codigo
library(dplyr)
cron |>
  filter(cntry %in% c("PT", "FR", "SE")) |>
  count(cntry, w4q3)
# A tibble: 18 × 3
   cntry  w4q3     n
   <chr> <dbl> <int>
 1 FR        1   355
 2 FR        2   140
 3 FR        3   147
 4 FR        4    51
 5 FR        5    16
 6 FR        9    15
 7 PT        1    96
 8 PT        2    89
 9 PT        3   139
10 PT        4    49
11 PT        5    17
12 PT        9     6
13 SE        1   312
14 SE        2   309
15 SE        3   159
16 SE        4    48
17 SE        5     9
18 SE        9     8
Mostrar codigo
# Asumiento que respecto a la idea de "enfatizar los valores religiosos", el 1 representa "Nada de acuerdo" y el 5 "Muy de acuerdo", siendo el 9 un "No sabe, no contesta", considero que es una representación de cómo de religiosa es la población de Portugal, Francia y Suecia. Los tres muestran una tendencia por el rechazo a enfatizar los valores religiosos, especialmente Suecia, que encaja con su tradición secular. A su vez, el país que tiene más "tolerancia" hacia el énfasis de estos valores es Portugal, cuyo valor más repetido es el 3 (neutral), frente a Francia y Suecia, cuyo valor más repetido siempre es el 1; tiene sentido debido a su tradición religiosa.

4.¿Qué porcentaje de personas ha respondido con un valor de 5 a la pregunta w4q15?

Mostrar codigo
total <- nrow(cron)
valor_cinco <- sum(cron$w4q15 == 5)
valor_cinco*100/total
[1] 21.76724
Mostrar codigo
# Un 21.77%, aproximadamente
  1. ¿Cuál es el valor más frecuente (moda) para la variable w4q1?
Mostrar codigo
table(cron$w4q1)

   1    2    3    4    5    9 
  42  117  896 3067 1890   20 
Mostrar codigo
# El valor más repetido es el 4, con 3067 respuestas.
  1. Calcula la media y la mediana de la variable eduyrs por país y comenta brevemente el resultado más alto y el más bajo.
Mostrar codigo
media_mediana <- cron |>
  group_by(cntry) |>
  summarise(
    media = mean(eduyrs, na.rm = TRUE),
    mediana = median(eduyrs, na.rm = TRUE))
print(media_mediana)
# A tibble: 11 × 3
   cntry media mediana
   <chr> <dbl>   <dbl>
 1 AT     15.8      14
 2 BE     15.3      15
 3 CZ     17.1      13
 4 FI     15.8      16
 5 FR     15.1      14
 6 GB     15.7      16
 7 IS     16.9      17
 8 IT     15.5      14
 9 PT     13.7      12
10 SE     16.4      14
11 SI     14.5      14
  1. Elimina los valores 77, 88 y 99 de la variable eduyrs. (Pista: te resultará más práctico si creas un nuevo dataset, por ejemplo cron_2)
Mostrar codigo
cron_2 <- cron |>
    filter(eduyrs != 77 & eduyrs != 88 & eduyrs != 99)
  1. Ahora, utilizando el nuevo cron_2, haz un boxplot de la distribución de la variable eduyrs por país y comenta los resultados.
Mostrar codigo
library(ggplot2)
ggplot(cron_2, aes(x = cntry, y = eduyrs)) +
  geom_boxplot()

Mostrar codigo
# En este boxplot se muestra que la mediana de estos paíse suele rondar entre 12 y 15 años de educación, con algunos casos atípicos. El país que tiene una mediana superior es Islandia, mientras que el país con el Q1 más superior es Gran Bretaña. El país con la mediana más baja es Portugal, que a su vez tiene el Q4 más bajo. El país que tiene el Q4 más alto es Eslovenia, junto con Bélgica y Chequia, y el que tiene el Q1 más bajo es Serbia junto a Chequia de nuevo. Chequia y Bélgica tienen una distribución compacta, mientras que países como Gran Bretaña, Islandia o Suecia muestran una mayor dispersión.

Actividad 3

En esta actividad analizaremos una versión ampliada del marco de datos `gapminder``. El proyecto Gapminder está orientado a recopilar datos de los países en diversas dimensiones del desarrollo, como el medio ambiente, la pobreza o el mercado laboral. Descargaremos una versión reducida de los datos, que se encuentra en el paquete dslabs.Si no tienes el paquete instalado lo tendrás que instalar con la función install.packages(“dslabs”) y despues cargarlo.

Mostrar codigo
library(dslabs)
gap <- tibble(dslabs::gapminder)
  1. En primer lugar, realiza una exploración del marco de datos gap. No olvides explicar si tenemos NA y en qué variables.
Mostrar codigo
gap
# A tibble: 10,545 × 9
   country   year infant_mortality life_expectancy fertility population      gdp
   <fct>    <int>            <dbl>           <dbl>     <dbl>      <dbl>    <dbl>
 1 Albania   1960            115.             62.9      6.19    1636054 NA      
 2 Algeria   1960            148.             47.5      7.65   11124892  1.38e10
 3 Angola    1960            208              36.0      7.32    5270844 NA      
 4 Antigua…  1960             NA              63.0      4.43      54681 NA      
 5 Argenti…  1960             59.9            65.4      3.11   20619075  1.08e11
 6 Armenia   1960             NA              66.9      4.55    1867396 NA      
 7 Aruba     1960             NA              65.7      4.82      54208 NA      
 8 Austral…  1960             20.3            70.9      3.45   10292328  9.67e10
 9 Austria   1960             37.3            68.8      2.7     7065525  5.24e10
10 Azerbai…  1960             NA              61.3      5.57    3897889 NA      
# ℹ 10,535 more rows
# ℹ 2 more variables: continent <fct>, region <fct>
Mostrar codigo
head(gap)
# A tibble: 6 × 9
  country    year infant_mortality life_expectancy fertility population      gdp
  <fct>     <int>            <dbl>           <dbl>     <dbl>      <dbl>    <dbl>
1 Albania    1960            115.             62.9      6.19    1636054 NA      
2 Algeria    1960            148.             47.5      7.65   11124892  1.38e10
3 Angola     1960            208              36.0      7.32    5270844 NA      
4 Antigua …  1960             NA              63.0      4.43      54681 NA      
5 Argentina  1960             59.9            65.4      3.11   20619075  1.08e11
6 Armenia    1960             NA              66.9      4.55    1867396 NA      
# ℹ 2 more variables: continent <fct>, region <fct>
Mostrar codigo
str(gap)
tibble [10,545 × 9] (S3: tbl_df/tbl/data.frame)
 $ country         : Factor w/ 185 levels "Albania","Algeria",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ year            : int [1:10545] 1960 1960 1960 1960 1960 1960 1960 1960 1960 1960 ...
 $ infant_mortality: num [1:10545] 115.4 148.2 208 NA 59.9 ...
 $ life_expectancy : num [1:10545] 62.9 47.5 36 63 65.4 ...
 $ fertility       : num [1:10545] 6.19 7.65 7.32 4.43 3.11 4.55 4.82 3.45 2.7 5.57 ...
 $ population      : num [1:10545] 1636054 11124892 5270844 54681 20619075 ...
 $ gdp             : num [1:10545] NA 1.38e+10 NA NA 1.08e+11 ...
 $ continent       : Factor w/ 5 levels "Africa","Americas",..: 4 1 1 2 2 3 2 5 4 3 ...
 $ region          : Factor w/ 22 levels "Australia and New Zealand",..: 19 11 10 2 15 21 2 1 22 21 ...
Mostrar codigo
dim(gap)
[1] 10545     9
Mostrar codigo
summary(gap)
                country           year      infant_mortality life_expectancy
 Albania            :   57   Min.   :1960   Min.   :  1.50   Min.   :13.20  
 Algeria            :   57   1st Qu.:1974   1st Qu.: 16.00   1st Qu.:57.50  
 Angola             :   57   Median :1988   Median : 41.50   Median :67.54  
 Antigua and Barbuda:   57   Mean   :1988   Mean   : 55.31   Mean   :64.81  
 Argentina          :   57   3rd Qu.:2002   3rd Qu.: 85.10   3rd Qu.:73.00  
 Armenia            :   57   Max.   :2016   Max.   :276.90   Max.   :83.90  
 (Other)            :10203                  NA's   :1453                    
   fertility       population             gdp               continent   
 Min.   :0.840   Min.   :3.124e+04   Min.   :4.040e+07   Africa  :2907  
 1st Qu.:2.200   1st Qu.:1.333e+06   1st Qu.:1.846e+09   Americas:2052  
 Median :3.750   Median :5.009e+06   Median :7.794e+09   Asia    :2679  
 Mean   :4.084   Mean   :2.701e+07   Mean   :1.480e+11   Europe  :2223  
 3rd Qu.:6.000   3rd Qu.:1.523e+07   3rd Qu.:5.540e+10   Oceania : 684  
 Max.   :9.220   Max.   :1.376e+09   Max.   :1.174e+13                  
 NA's   :187     NA's   :185         NA's   :2972                       
             region    
 Western Asia   :1026  
 Eastern Africa : 912  
 Western Africa : 912  
 Caribbean      : 741  
 South America  : 684  
 Southern Europe: 684  
 (Other)        :5586  
Mostrar codigo
# Hay 10545 observaciones y 9 variables (country, year, infant_mortality, life_expectancy, fertility, population, gdp, continent, region). Excluyendo las dos primeras variables, las demás tienen 1453, 0, 187, 0, 2972, 0 y 0 NAs.
  1. Elige dos países y visualiza cómo ha evolucionado la fertilidad a lo largo del tiempo. Comenta brevemente cómo estaba distribuida la fertilidad en los dos países entre 1966 y 2016.
Mostrar codigo
gap |>
  filter((country == "Argentina" | country == "Spain") & year >= 1966 & year <= 2016) |>
  ggplot(aes(x = year, y = fertility, color = country)) + 
  geom_line()

Mostrar codigo
# Argentina siempre ha superado a España en fertilidad desde 1966, como se muestra en el gráfico. Al inicio no estaban tan lejos entre sí, ambos estaban cerca de la cifra 3.0; pero a mediados de los 70, Argentina subió hasta alcanzar su pico a finales de década, en casi 3.5, mientras que España no dejó de bajar hasta llegar a su valor más bajo a finales de los 90, estando casi a 1.0. A partir de su pico, la fertilidad en Argentina no ha dejado de bajar, hasta llegar a algo más de 2.0, mientras que España subió tras su valor más bajo ligeramente, quedando a día de hoy en 1.5.
  1. Haz un histograma con los dos países de cada año, separado por un facet.
Mostrar codigo
gap |>
  filter((country == "Argentina" | country == "Spain") & year >= 1966 & year <= 2016) |>
  ggplot(aes(x = fertility)) +
  geom_histogram() +
  facet_wrap(~ country)

  1. Hazte una pregunta sobre uno o varios países que puedas resolver mediante una visualización de las que has estudiado en esta unidad. Respóndela con un gráfico.
Mostrar codigo
gap |>
     filter(continent == "Americas" & year >= 1960 & year <= 2016 & 
                !(country == "Antigua and Barbuda" | 
                      country == "Aruba" | 
                      country == "St. Lucia" | 
                      country == "St. Vincent and the Grenadines" | 
                      country == "Haiti" | 
                      country == "Bahamas" | 
                      country == "Barbados" | 
                      country == "Grenada" | 
                      country == "Greenland" | 
                      country == "Jamaica" | 
                      country == "Suriname" | 
                      country == "Trinidad and Tobago" | 
                      country == "United States" |
                      country == "Belize")) |>
     ggplot(aes(x = year, y = life_expectancy, color = country)) +
     geom_line()

Mostrar codigo
# ¿Cómo ha evolucionado la esperanza de vida en América Latina?
# La esperanza de vida en América Latina ha ido en ascenso desde los 60 hasta la actualidad, con algunas caídas en años clave, pero todos con una tendencia positiva.