Tarea 2

Actividad Práctica

Por: Valentina Cabrera

Librerías

Base de datos

data = read_csv("master.csv", col_types = list(UNIT = col_character()), col_names = TRUE)
datatable(
  data[1:10, ],
  caption = "Base de datos: Suicide Rates Overview 1985 to 2016",
  options = list(
    scrollX = TRUE,
    scrollY = "450px",
    paging = FALSE
  )
)

Tipo de variables

spc_tbl_ [27,820 × 12] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ country           : chr [1:27820] "Albania" "Albania" "Albania" "Albania" ...
 $ year              : num [1:27820] 1987 1987 1987 1987 1987 ...
 $ sex               : chr [1:27820] "male" "male" "female" "male" ...
 $ age               : chr [1:27820] "15-24 years" "35-54 years" "15-24 years" "75+ years" ...
 $ suicides_no       : num [1:27820] 21 16 14 1 9 1 6 4 1 0 ...
 $ population        : num [1:27820] 312900 308000 289700 21800 274300 ...
 $ suicides/100k pop : num [1:27820] 6.71 5.19 4.83 4.59 3.28 2.81 2.15 1.56 0.73 0 ...
 $ country-year      : chr [1:27820] "Albania1987" "Albania1987" "Albania1987" "Albania1987" ...
 $ HDI for year      : num [1:27820] NA NA NA NA NA NA NA NA NA NA ...
 $ gdp_for_year ($)  : num [1:27820] 2.16e+09 2.16e+09 2.16e+09 2.16e+09 2.16e+09 ...
 $ gdp_per_capita ($): num [1:27820] 796 796 796 796 796 796 796 796 796 796 ...
 $ generation        : chr [1:27820] "Generation X" "Silent" "Generation X" "G.I. Generation" ...
 - attr(*, "spec")=
  .. cols(
  ..   country = col_character(),
  ..   year = col_double(),
  ..   sex = col_character(),
  ..   age = col_character(),
  ..   suicides_no = col_double(),
  ..   population = col_double(),
  ..   `suicides/100k pop` = col_double(),
  ..   `country-year` = col_character(),
  ..   `HDI for year` = col_double(),
  ..   `gdp_for_year ($)` = col_number(),
  ..   `gdp_per_capita ($)` = col_double(),
  ..   generation = col_character()
  .. )
 - attr(*, "problems")=<externalptr> 

Dimensión de la base

[1] 27820    12

Primer punto:

– Características de la base de datos.

Para este ejercicio, contamos con la base de datos Suicide Rates Overview 1985 to 2016. Este conjunto de datos busca encontrar cuáles señales están correlacionadas con el aumento de suicidios a nivel mundial. La información se encuentra organizada en 27820 filas (# observaciones) y 12 columnas (# variables), en donde cada una de ellas ofrece información socieconómica y demográfica de cada país.

En cuanto a las variables, tal como se mencionó antes, en total son 12 y se tienen tanto numéricas como categóricas. A continuación, veamos de qué tipo son y cómo están codificadas en este caso.

– Numéricas:

  • year, la cual representa el año.

  • suicides_no, la cual representa el número de suicidios.

  • population, la cual representa la población.

  • suicides.100k.pop, la cual representa las tasas de suicidios por cada 100 mil habitantes.

  • HDI.for.year, la cual representa el índice de desarrollo humano (IDH) por año.

  • gdp_for_year ($), la cual representa el producto interno bruto (PIB) por año.

  • gdp_per_capita, la cual representa el producto interno bruto per capita.

– Categóricas:

  • country, la cual representa el país.

  • sex, la cual representa el género y se trabaja con dos valores establecidos, “male” y “female”.

  • age, la cual representa el grupo de edad.

  • country.year, la cual representa la clave compuesta por el país y el año.

  • generation, la cual representa la generación a la cual pertenece el grupo de personas.

A continuación, se analizará la correlación de las variables cuantitativas.

Para esto, se filtró la base de datos de tal manera que solo quedaran las columnas de tipo numérico, pero sin incluir la columna HDI for year, debido a su alta cantidad de datos faltantes.

data_num <- select_if(data, is.numeric) 
data_num <- select_if(data, is.numeric) %>% select(-"HDI for year") 
print(data_num)
# A tibble: 27,820 × 6
    year suicides_no population `suicides/100k pop` `gdp_for_year ($)`
   <dbl>       <dbl>      <dbl>               <dbl>              <dbl>
 1  1987          21     312900                6.71         2156624900
 2  1987          16     308000                5.19         2156624900
 3  1987          14     289700                4.83         2156624900
 4  1987           1      21800                4.59         2156624900
 5  1987           9     274300                3.28         2156624900
 6  1987           1      35600                2.81         2156624900
 7  1987           6     278800                2.15         2156624900
 8  1987           4     257200                1.56         2156624900
 9  1987           1     137500                0.73         2156624900
10  1987           0     311000                0            2156624900
# ℹ 27,810 more rows
# ℹ 1 more variable: `gdp_per_capita ($)` <dbl>
cor_test <- cor_mat(data_num) 
cor_test
# A tibble: 6 × 7
  rowname     year suicides_no population `suicides/100k pop` `gdp_for_year ($)`
* <chr>      <dbl>       <dbl>      <dbl>               <dbl>              <dbl>
1 year      1          -0.0045     0.0089             -0.039               0.095
2 suicide… -0.0045      1          0.62                0.31                0.43 
3 populat…  0.0089      0.62       1                   0.0083              0.71 
4 suicide… -0.039       0.31       0.0083              1                   0.025
5 gdp_for…  0.095       0.43       0.71                0.025               1    
6 gdp_per…  0.34        0.061      0.082               0.0018              0.3  
# ℹ 1 more variable: `gdp_per_capita ($)` <dbl>
ggcorrplot(cor_test, hc.order = TRUE, type = "lower",
   lab = TRUE)

A partir de esto, podemos observar que, a rasgos generales, en su mayoría las variables no están fuertemente correlacionadas entre sí. Las únicas que presentan un nivel “alto” son suicides_no y population cuyo coeficiente de correlación es 0.62, es decir, están moderadamente correlacionadas y, por otro lado, population con gpd_for_year ($) con coeficiente de correlación igual a 0.71, por tanto, están fuertemente correlacionadas. El resto de casos, se encuentra dentro de los rangos de débilmente correlacionadas.

– Características de cada variable

  • year

       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
       1985    1995    2002    2001    2008    2016 

    Para poder visualizar esta variable de forma gráfica, vamos a trabajar con datos agrupados debido a la gran variedad de años registrados en la base de datos.

    n_sturges = 1 + log(length(data))/log(2) 
    n_sturgesc = ceiling(n_sturges) 
    n_sturgesf = floor(n_sturges) 
    
    n_clases = 0 
    if (n_sturgesc%%2 == 0) {
      n_clases = n_sturgesf
    } else {
      n_clases = n_sturgesc
    }
    
    R = max(data$year) - min(data$year) 
    w = ceiling(R/n_clases) 
    
    bins <- seq(min(data$year), max(data$year) + w, by = w) 
    años <- cut(data$year, bins) 
    freq_table <- transform(table(años), Rel_Freq = prop.table(Freq), Cum_Freq = cumsum(Freq))
    knitr::kable(freq_table)
    años Freq Rel_Freq Cum_Freq
    (1985,1992] 4752 0.1744237 4752
    (1992,1999] 6324 0.2321245 11076
    (1999,2006] 7188 0.2638379 18264
    (2006,2013] 7140 0.2620761 25404
    (2013,2020] 1840 0.0675378 27244
    data_freq <- data.frame(x = freq_table$años, y = freq_table$Freq)
    ggplot(data=data_freq, aes(x=x, y=y)) +
      geom_bar(stat="identity", fill="lightblue") +
      xlab("Rango de años") +
      ylab("Frecuencia")

    Esta gráfica revela que la cantidad de suicidios ocurridos entre 1999 y 2006, con un total de 7188 casos, es notablemente mayor en comparación con los otros periodos analizados. Por otro lado, entre 2013 y 2020, se observa una disminución significativa en el número de suicidios, con solo 1840 casos registrados. Esto indica que existe una posible asimetría a la derecha en la distribución de la variable, debido a la alta concentración de casos en los años anteriores.

  • suicides_no

       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
        0.0     3.0    25.0   242.6   131.0 22338.0 
    boxplot(data$suicides_no, main = "Boxplot de número de suicidios", col = "lightblue")

    Es evidente la gran cantidad de valores atípicos que presenta. A su vez, dada la gran diferencia entre los valores descriptivos, podemos afirmar que existe una asimetría a la derecha.

  • population

        Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
         278    97498   430150  1844794  1486143 43805214 
    boxplot(data$population, main = "Boxplot de población", col = "lightblue")

    Es evidente la gran cantidad de valores atípicos que presenta. A su vez, dada la gran diferencia entre los valores descriptivos, podemos afirmar que existe una asimetría a la derecha.

  • suicides.100k.pop

       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
       0.00    0.92    5.99   12.82   16.62  224.97 
  • HDI.for.year

       Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
      0.483   0.713   0.779   0.777   0.855   0.944   19456 
  • gdp_for_year

         Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
    4.692e+07 8.985e+09 4.811e+10 4.456e+11 2.602e+11 1.812e+13 
  • gdp_per_capita

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    251    3447    9372   16866   24874  126352 
  • sex

female   male 
 13910  13910 

Observamos que la distribución de la variable sex es igual para ambos valores.

  • generation

    
            Boomers G.I. Generation    Generation X    Generation Z      Millenials 
               4990            2744            6408            1470            5844 
             Silent 
               6364 

Las generaciones Generation y Generation Z tienen frecuencias alejadas a las demás. La de menor frecuencia es Generation Z con 1470 registros y la que cuenta con mayor cantidad es Generation X con 6408.

– Identificación de NA

gg_miss_var(data, show_pct = TRUE)

md.pattern(data, plot = TRUE, rotate.names = TRUE)

      country year sex age suicides_no population suicides/100k pop
8364        1    1   1   1           1          1                 1
19456       1    1   1   1           1          1                 1
            0    0   0   0           0          0                 0
      country-year gdp_for_year ($) gdp_per_capita ($) generation HDI for year
8364             1                1                  1          1            1
19456            1                1                  1          1            0
                 0                0                  0          0        19456
           
8364      0
19456     1
      19456

En cuanto a la identificación de datos faltantes (NA), se observa que la base Suicide Rates Overview 1985 to 2016 contiene este tipo de datos. En particular, solo la variable HDI for year presenta valores NA. De las 27820 observaciones en la base, 19456 contienen valores NA, lo que representa aproximadamente el 70% de los valores en esa variable.

– Detección de valores atípicos

Se puede observar una cantidad significativa de datos atípicos en varias variables, lo cual puede estar relacionado con la diversidad de los datos. Por ejemplo, en el caso del PIB per cápita, las diferencias económicas entre países pueden llevar a que algunos países presenten valores muy altos o muy bajos en comparación con otros, generando así valores atípicos en esta variable

– Decisión con NA’s : imputación

ks.test(data$`HDI for year`, "pnorm", mean = mean(data$`HDI for year`, na.rm = TRUE), sd = sd(data$`HDI for year`, na.rm = TRUE))
Warning in ks.test.default(data$`HDI for year`, "pnorm", mean = mean(data$`HDI
for year`, : ties should not be present for the Kolmogorov-Smirnov test

    Asymptotic one-sample Kolmogorov-Smirnov test

data:  data$`HDI for year`
D = 0.055914, p-value < 2.2e-16
alternative hypothesis: two-sided

Al hacer la prueba de Kolmogorov-Smirnov, se obtuvo un p-valor inferior a 0.05, esto indica que los datos no siguen una distribución normal. Es decir, la imputación debe realizarse haciendo uso de la mediana.

median = median(data$`HDI for year`, na.rm = TRUE) 
data$`HDI for year` <- replace_na(data$`HDI for year`, median)
suppressWarnings(missmap(data, col = c("lightblue","lightpink")))

Segundo punto:

– Filtrado de la base de datos

– Colombia

master_col = data %>%
  filter(country == "Colombia")
datatable(
  master_col[1:10, ],
  caption = "Base de datos: Suicide Rates Overview 1985 to 2016 - Colombia",
  options = list(
    scrollX = TRUE,
    scrollY = "450px",
    paging = FALSE
  )
)

– Estados Unidos

master_eu = data %>%
  filter(country == "United States")
datatable(
  master_eu[1:10, ],
  caption = "Base de datos: Suicide Rates Overview 1985 to 2016 - EE UU",
  options = list(
    scrollX = TRUE,
    scrollY = "450px",
    paging = FALSE
  )
)

– Analisis de la evolución a lo largo de los años (promedio)

En este ejercicio, trabajaremos con el promedio de cada una de las variables por año. Esta decisión se basa en el hecho de que, para un solo año, existen múltiples registros en los datos. Por lo tanto, resulta útil calcular el promedio de las variables correspondientes, ya que esto nos permitirá obtener una representación centralizada y más manejable de la información anual.

# Colombia 
media_col <- master_col %>%
  group_by(year, country) %>%
  summarise(
    mean_suicidios = mean(`suicides/100k pop`, na.rm = TRUE),
    mean_GDP = mean(`gdp_per_capita ($)`, na.rm = TRUE),
    mean_HDI = mean(`HDI for year`, na.rm = TRUE))
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
# EE UU
media_eu <- master_eu %>%
  group_by(year, country) %>%
  summarise(
    mean_suicidios = mean(`suicides/100k pop`, na.rm = TRUE),
    mean_GDP = mean(`gdp_per_capita ($)`, na.rm = TRUE),
  ) 
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
combinado <- bind_rows(master_col, master_eu)
media <- bind_rows(media_col, media_eu)
  1. Suicidios por cada 100.000 habitantes

    media %>%
      group_by(year, country) %>%
      ggplot(aes(x = year, y = mean_suicidios, color = country, group = country)) +
      geom_line() +
      labs(
        title = "Evolución de los suicidios por cada 100.000 habitantes",
        x = "Año",
        y = "Suicidios por cada 100.000 habitantes",
        color = "País"
      ) +
      theme_minimal()

Al graficar la evolución de las tasas de suicidio por cada 100000 habitantes para ambos países, se observa claramente que el promedio anual de suicidios en Estados Unidos está notablemente por encima del de Colombia en todos los años de este estudio. Esto indica que la cantidad de suicidios en Estados Unidos ha sido constantemente mayor. Específicamente, la línea azul que representa a Estados Unidos muestra un pico cercano a 16 y un mínimo de aproximadamente 12, mientras que la línea roja para Colombia alcanza un pico de alrededor de 7 y un mínimo cercano a 3. Estos valores evidencian que, en todos los casos, Estados Unidos presenta tasas de suicidio significativamente más altas que Colombia.

Otra observación que se puede hacer es que desde antes de 1990 hasta el 2010, el comportamiento de ambos países fue inverso, es decir, en el caso de Colombia, desde antes de 1990 hasta aproximadamente los 2000, la tendencia iba más relacionada con el aumento en la tasa de suicidios y desde los 2000 hasta después de 2010, esta fue disminuyendo. En el caso de Estados Unidos, esto ocurre al contrario.

  1.  PIB per cápita 
combinado %>%
  group_by(year, country) %>%
  ggplot(aes(x = year, y = `gdp_per_capita ($)`, color = country, group = country)) +
  geom_line() +
  labs(
    title = "Evolución del PIB per cápita",
    x = "Año",
    y = "PIB per cápita",
    color = "País"
  ) +
  theme_minimal()

En este caso, podemos notar que, nuevamente, los registros de Colombia se encuentran por debajo de los de Estados Unidos. Es decir, Colombia, a lo largo de los años que se incluyen en este estudio, ha mantenido un PIB per cápita inferior al país norteamericano, lo cual se traduce en que este último ha tenido mayor productividad y desarrollo económico.

  1. Índice de desarrollo humano (IDH)

    combinado %>%
      group_by(year, country) %>%
      ggplot(aes(x = year, y = `HDI for year`, color = country, group = country)) +
      geom_line(na.rm = TRUE) +
      labs(
        title = "Evolución del índice de desarrollo humano",
        x = "Año",
        y = "Índice de desarrollo humano",
        color = "País") + 
    
      theme_minimal()

    Aquí podemos analizar que ambos países tienen un comportamiento inverso pues mientras el índice de desarrollo humano de Estados Unidos crecía, el de Colombia por el contrario disminuía. Cabe resaltar que coinciden en los lapsos de tiempo en los cuales el IDH se mantuvo constante. En resumidas cuentas, los estadounidenses, a lo largo de los años, han contado con mejor esperanza de vida, educación e indicadores de ingresos per cápita en comparación con los colombianos.

– Análisis de la evolución a lo largo de los años (promedio) por género

media_colsex <- master_col %>%
  group_by(year, sex) %>%
  summarise(
    mean_suicidios = mean(`suicides/100k pop`, na.rm = TRUE),
    mean_GDP = mean(`gdp_per_capita ($)`, na.rm = TRUE),
    mean_HDI = mean(`HDI for year`, na.rm = TRUE),
    .groups = "drop"  
  )
media_eusex <- master_eu %>%
  group_by(year, sex) %>%
  summarise(
    mean_suicidios = mean(`suicides/100k pop`, na.rm = TRUE),
    mean_GDP = mean(`gdp_per_capita ($)`, na.rm = TRUE),
    mean_HDI = mean(`HDI for year`, na.rm = TRUE),
    .groups = "drop"  
  )
  1. Suicidios por cada 100.000 habitantes

    suic_colsex<- media_colsex %>%
      group_by(year, sex) %>%
      ggplot(aes(x = year, y = mean_suicidios, group = sex, color = sex)) +
      geom_line() +
      theme_minimal() +
      xlab('Año') +
      ylab('Tasa de suicidio en Colombia') 
    
    suic_eusex<- media_eusex %>%
      group_by(year, sex) %>%
      ggplot(aes(x = year, y = mean_suicidios, group = sex, color = sex)) +
      geom_line() +
      theme_minimal() +
      xlab('Año') +
      ylab('Tasa de suicidio en EE UU') 
    
    grid.arrange(suic_colsex, suic_eusex , ncol = 2)

    Al graficar la tasa de suicidios por sexo en ambos países, se observa que en ambos casos la tasa de suicidios en hombres se mantiene superior a la de mujeres, es decir, por cada 100000 habitantes, la cantidad de personas del género masculino que se suicidan es mayor que la de mujeres. Además, se puede notar que este resultado es coherente con lo hallado anteriormente, ya que el rango de valores en el eje Y para el gráfico de Colombia es inferior al correspondiente a Estados Unidos.

  2. PIB per cápita

    gdp_colsex<- media_colsex %>%
      group_by(year, sex) %>%
      ggplot(aes(x = year, y = mean_GDP, group = sex, color = sex)) +
      geom_line() +
      theme_minimal() +
      xlab('Año') +
      ylab('PIB per cápita en Colombia') 
    
    gdp_eusex<- media_eusex %>%
      group_by(year, sex) %>%
      ggplot(aes(x = year, y = mean_GDP, group = sex, color = sex)) +
      geom_line() +
      theme_minimal() +
      xlab('Año') +
      ylab('PIB per cápita en EE UU') 
    
    grid.arrange(gdp_colsex, gdp_eusex , ncol = 2)

  3. Índice de desarrollo humano

idh_colsex<- media_colsex %>%
  group_by(year, sex) %>%
  ggplot(aes(x = year, y = mean_HDI, group = sex, color = sex)) +
  geom_line() +
  theme_minimal() +
  xlab('Año') +
  ylab('Índice de desarrollo humano en Colombia') 

idh_eusex<- media_eusex %>%
  group_by(year, sex) %>%
  ggplot(aes(x = year, y = mean_HDI, group = sex, color = sex)) +
  geom_line() +
  theme_minimal() +
  xlab('Año') +
  ylab('Índice de desarrollo humano en EE UU') 

grid.arrange(idh_colsex, idh_eusex , ncol = 2)

– Análisis de la evolución a lo largo de los años (promedio) por grupo de edad

  1. Suicidios por cada 100.000 habitantes

    media_colage <- master_col %>%
      group_by(year, age) %>%
      summarise(
        mean_suicidios = mean(`suicides/100k pop`, na.rm = TRUE),
        mean_GDP = mean(`gdp_per_capita ($)`, na.rm = TRUE),
        mean_HDI = mean(`HDI for year`, na.rm = TRUE), .groups = "keep"
      )
    
    media_euage <- master_eu %>%
      group_by(year, age) %>%
      summarise(
        mean_suicidios = mean(`suicides/100k pop`, na.rm = TRUE),
        mean_GDP = mean(`gdp_per_capita ($)`, na.rm = TRUE),
        mean_HDI = mean(`HDI for year`, na.rm = TRUE), .groups = "keep"
      )
    suic_colage<- media_colage %>%
      group_by(year, age) %>%
      ggplot(aes(x = year, y = mean_suicidios, group = age, color = age)) +
      geom_line() +
      theme_minimal() +
      xlab('Año') +
      ylab('Tasa de suicidio en Colombia') 
    
    suic_euage<- media_euage %>%
      group_by(year, age) %>%
      ggplot(aes(x = year, y = mean_suicidios, group = age, color = age)) +
      geom_line() +
      theme_minimal() +
      xlab('Año') +
      ylab('Tasa de suicidio en EE UU') 
    
    grid.arrange(suic_colage, suic_euage , ncol = 2)

    Al analizar el comportamiento de las tasas de suicidio por grupo de edad en ambos países, podemos notar que a lo largo de los años las personas pertenecientes al grupo 75+ years son las que más por encima se han mantenido. A su vez, los individuos del grupo 5-14 years son los que han mantenido la menor tasa de suicidios durante todos los años de estudio.

  2. PIB per cápita

    gdp_colage<- media_colage %>%
      group_by(year, age) %>%
      ggplot(aes(x = year, y = mean_GDP, group = age, color = age)) +
      geom_line() +
      theme_minimal() +
      xlab('Año') +
      ylab('PIB per cápita en Colombia') 
    
    gdp_euage<- media_euage %>%
      group_by(year, age) %>%
      ggplot(aes(x = year, y = mean_GDP, group = age, color = age)) +
      geom_line() +
      theme_minimal() +
      xlab('Año') +
      ylab('PIB per cápita en EE UU') 
    
    grid.arrange(gdp_colage, gdp_euage , ncol = 2)

  3. Índice de desarrollo humano

idh_colage<- media_colage %>%
  group_by(year, age) %>%
  ggplot(aes(x = year, y = mean_HDI, group = age, color = age)) +
  geom_line() +
  theme_minimal() +
  xlab('Año') +
  ylab('Índice de desarrollo humano en Colombia') 

idh_euage<- media_euage %>%
  group_by(year, age) %>%
  ggplot(aes(x = year, y = mean_HDI, group = age, color = age)) +
  geom_line() +
  theme_minimal() +
  xlab('Año') +
  ylab('Índice de desarrollo humano en EE UU') 

grid.arrange(idh_colage, idh_euage , ncol = 2)