| Variable | Pregunta | Escala / categorías respuesta |
|---|---|---|
| SEXO | Sexo de la persona entrevistada | Hombre; Mujer |
| EDAD | Edad de la persona entrevistada | Edad (en años) |
| ESTUDIOS | Nivel de estudios alcanzado por la persona entrevistada | No universitarios; Universitarios |
| TRUMP | Efectos de la presidencia de Donald Trump en la relación de la Unión Europea y EE. UU. | Va a continuar como estaba; Va a cambiar |
| TRUMP_EEUU | Valoración para los EE.UU. de los efectos del cambio de la relación entre la UE y EE. UU. con la presidencia de Donald Trump | De 1 (Será muy positivo) a 5 (Será muy malo) |
| TRUMP_UE | Valoración para la UE de los efectos del cambio de la relación entre la UE y EE. UU. con la presidencia de Donald Trump | De 1 (Será muy positivo) a 5 (Será muy malo) |
| PROBVOTO | Escala de probabilidad de voto (0-10) en elecciones generales | De 0 (Con toda seguridad, no iría a votar) a 10 (Con toda seguridad, iría a votar) |
| ESCIDEOL | Escala de autoubicación ideológica | De 1 (Izquierda) a 10 (Derecha) |
Visualización y Gestión de Datos. Reto 1
Introducción
Para resolver los retos de la asignatura de Visualización y Gestión de Datos, debéis descargar e instalar R y RStudio y utilizar Quarto dentro de RStudio para elaborar y entregar los resultados en formato HTML.
En este primer reto realizaréis operaciones básicas con variables, manipularéis datos con código y generaréis un documento HTML mediante Quarto.
Para ejecutar correctamente el código, debéis tener instalados, como mínimo, los paquetes dplyr, tidyverse, tibble y knitr.
Actividad 1
Este Reto 1 se basa en el Barómetro del Centro de Investigaciones Sociológicas (CIS) de Marzo 2025. Se ha realizado a población española de ambos sexos de 18 años y más. Se puede consultar el estudio completo en este enlace.
Para realizar el ejercicio, se adjunta el conjunto datos CIS_2025.RData, en formato de R, donde se encuentran las siguientes variables que se han escogido a partir de los datos originales.
A partir de las variables, se pueden llevar a cabo diferentes análisis basados en los objetivos o intereses que tengan los investigadores.
- Antes de empezar, carga los datos
CIS_2025.Rdata.
Responde a las siguientes preguntas:
- Para cada variable
SEXO,EDAD,ESTUDIOS,TRUMP,TRUMP_EEUU,TRUMP_UE,PROBVOTO,ESCIDEOLdetermina la tipología de variable.
| Variable | Tipo de variable |
|---|---|
| SEXO | Cualitativa / Categórica nominal |
| EDAD | Cuantitativa / Numérica |
| ESTUDIOS | Cualitativa / Categórica ordinal |
| TRUMP | Cualitativa / Categórica nominal |
| TRUMP_EEUU | Cuantitativa / Numérica |
| TRUMP_UE | Cuantitativa / Numérica |
| PROBVOTO | Cuantitativa / Numérica |
| ESCIDEOL | Cuantitativa / Numérica |
SEXO = Cualitativa nominal
EDAD = Cuantitativa numérica
ESTUDIOS = Cualitativa ordinal
TRUMP = Cualitativa nominal
TRUMP_EEUU = Cuantitativa numérica (escala ordinal tratada como numérica)
TRUMP_UE = Cuantitativa numérica (escala ordinal tratada como numérica)
PROBVOTO = Cuantitativa numérica
ESCIDEOL = Cuantitativa numérica
- Cuantas observaciones tiene el conjunto de datos? 4018 observaciones (personas entrevistadas)
- Revisa el conjunto de datos de manera preliminar utilizando las funciones básicas disponibles:
str(CIS_2025)tibble [4,018 × 8] (S3: tbl_df/tbl/data.frame)
$ SEXO : Factor w/ 2 levels "Hombre","Mujer": 1 2 1 1 2 1 1 2 1 1 ...
$ EDAD : num [1:4018] 45 60 60 43 38 54 67 71 23 31 ...
$ ESTUDIOS : Factor w/ 2 levels "No universitarios",..: 1 1 2 1 1 2 2 2 1 2 ...
$ TRUMP : Factor w/ 2 levels "Va a cambiar",..: NA 1 1 1 2 2 1 1 1 2 ...
$ TRUMP_EEUU: num [1:4018] NA 4 5 5 NA NA 4 5 4 NA ...
$ TRUMP_UE : num [1:4018] NA 5 4 2 NA NA 5 5 4 NA ...
$ PROBVOTO : num [1:4018] 0 8 10 10 10 10 0 10 8 2 ...
$ ESCIDEOL : num [1:4018] 5 1 3 4 10 6 1 1 4 6 ...
summary(CIS_2025) SEXO EDAD ESTUDIOS
Hombre:2129 Min. :18.00 No universitarios:1938
Mujer :1889 1st Qu.:39.00 Universitarios :2078
Median :51.00 NA's : 2
Mean :50.96
3rd Qu.:63.00
Max. :97.00
TRUMP TRUMP_EEUU TRUMP_UE
Va a cambiar :3273 Min. :1.000 Min. :1.000
Va a continuar como estaba: 477 1st Qu.:2.000 1st Qu.:4.000
NA's : 268 Median :4.000 Median :4.000
Mean :3.556 Mean :3.953
3rd Qu.:4.000 3rd Qu.:5.000
Max. :5.000 Max. :5.000
NA's :973 NA's :841
PROBVOTO ESCIDEOL
Min. : 0.000 Min. : 1.000
1st Qu.: 9.000 1st Qu.: 3.000
Median :10.000 Median : 5.000
Mean : 8.494 Mean : 4.861
3rd Qu.:10.000 3rd Qu.: 6.000
Max. :10.000 Max. :10.000
NA's :14 NA's :171
head(CIS_2025)# A tibble: 6 × 8
SEXO EDAD ESTUDIOS TRUMP TRUMP_EEUU TRUMP_UE PROBVOTO ESCIDEOL
<fct> <dbl> <fct> <fct> <dbl> <dbl> <dbl> <dbl>
1 Hombre 45 No universitarios <NA> NA NA 0 5
2 Mujer 60 No universitarios Va a cam… 4 5 8 1
3 Hombre 60 Universitarios Va a cam… 5 4 10 3
4 Hombre 43 No universitarios Va a cam… 5 2 10 4
5 Mujer 38 No universitarios Va a con… NA NA 10 10
6 Hombre 54 Universitarios Va a con… NA NA 10 6
- La variable
EDADrecoge la edad de la persona entrevistada. Crea una nueva variable llamadaNACIMIENTOque estime su año de nacimiento (a partir deEDAD).
CIS_2025 <- CIS_2025 %>%
mutate(NACIMIENTO = 2025 - EDAD)- Crea una tabla que incluya las variables
SEXOEDADyNACIMIENTO
tabla_basica <- CIS_2025 %>%
select(SEXO, EDAD, NACIMIENTO)
head(tabla_basica)# A tibble: 6 × 3
SEXO EDAD NACIMIENTO
<fct> <dbl> <dbl>
1 Hombre 45 1980
2 Mujer 60 1965
3 Hombre 60 1965
4 Hombre 43 1982
5 Mujer 38 1987
6 Hombre 54 1971
- Muestra una tabla con las personas que tienen estudios universitarios e indica cuántas observaciones (personas) cumplen esa condición
universitarios <- CIS_2025 %>%
filter(ESTUDIOS == "Universitarios")
nrow(universitarios)[1] 2078
- Muestra una tabla con las personas que tienen estudios universitarios y una edad entre 30 y 35 años (incluidos). Indica también cuántas observaciones cumplen ambas condiciones.
uni_30_35 <- CIS_2025 %>%
filter(ESTUDIOS == "Universitarios",
EDAD >= 30 & EDAD <= 35)
nrow(uni_30_35)[1] 216
- Calcula un resumen estadístico (usando la función
summarize) del conjunto de datos obteniendo la media dePROBVOTO, la media y la mediana deEDAD, y el valor máximo deEDAD. Nota: Trata los valores perdidos comoNA).
resumen <- CIS_2025 %>%
summarize(
media_probvoto = mean(PROBVOTO, na.rm = TRUE),
media_edad = mean(EDAD, na.rm = TRUE),
mediana_edad = median(EDAD, na.rm = TRUE),
max_edad = max(EDAD, na.rm = TRUE)
)- Repite el análisis del ejercicio anterior desagregando por
SEXO: calcula los mismos estadísticos por separado para hombres y mujeres.
resumen_sexo <- CIS_2025 %>%
group_by(SEXO) %>%
summarize(
media_probvoto = mean(PROBVOTO, na.rm = TRUE),
media_edad = mean(EDAD, na.rm = TRUE),
mediana_edad = median(EDAD, na.rm = TRUE),
max_edad = max(EDAD, na.rm = TRUE)
)- Recodifica la variable
SEXOpara que la categoría “Hombre” pase a llamarse “Masculino” y “Mujer” pase a “Femenino”.
CIS_2025 <- CIS_2025 %>%
mutate(SEXO = recode(SEXO,
"Hombre" = "Masculino",
"Mujer" = "Femenino"))- Crea una nueva variable categórica ordinal a partir de
EDAD(por ejemplo,EDAD_CAT) que agrupe las edades en los siguientes intervalos:
| Rango de edad |
|---|
| De 18 a 25 años |
| De 26 a 35 años |
| De 36 a 45 años |
| De 46 a 55 años |
| De 56 a 65 años |
| 66 años o más |
CIS_2025 <- CIS_2025 %>%
mutate(EDAD_CAT = case_when(
EDAD >= 18 & EDAD <= 25 ~ "18-25",
EDAD >= 26 & EDAD <= 35 ~ "26-35",
EDAD >= 36 & EDAD <= 45 ~ "36-45",
EDAD >= 46 & EDAD <= 55 ~ "46-55",
EDAD >= 56 & EDAD <= 65 ~ "56-65",
EDAD >= 66 ~ "66+"
))- Entre las personas que valoran como muy malos los efectos del cambio en la relación UE–EE.UU. con la presidencia de Donald Trump tanto para la UE (
TRUMP_UE= 5) como para EE.UU. (TRUMP_EEUU= 5), y que afirman que con toda seguridad irán a votar (PROBVOTO= 10), ¿cuántas personas hay en cada nivel de ESTUDIOS? Nota:Para resolverlo, utiliza la funciónfilter()para aplicar las condiciones ycount()para obtener el recuento porESTUDIOS.
resultado <- CIS_2025 %>%
filter(TRUMP_UE == 5,
TRUMP_EEUU == 5,
PROBVOTO == 10) %>%
count(ESTUDIOS)Actividad 2
Para practicar la creación de bases de datos y la identificación de tipos de variables (nominales, ordinales y numéricas), se construirá un pequeño conjunto de datos desde cero.
- Usando la función
tibble(), crea un conjunto de datos con cinco países que además incluya una variable nominal, una variable ordinal y dos variables numéricas.
library(tibble)
library(dplyr)
paises <- tibble(
pais = c("España", "México", "Alemania", "Brasil", "Japón"),
continente = c("Europa", "América", "Europa", "América", "Asia"),
nivel_desarrollo = factor(
c("alto", "medio", "alto", "medio", "alto"),
levels = c("bajo", "medio", "alto"),
ordered = TRUE
),
poblacion_millones = c(48.6, 129.7, 84.4, 203.1, 123.3),
pib_per_capita = c(33000, 14000, 52000, 11000, 42000)
)- Crea una variable lógica (
TRUE/FALSE):
paises <- paises %>%
mutate(mas_100_millones = poblacion_millones > 100)
paises# A tibble: 5 × 6
pais continente nivel_desarrollo poblacion_millones pib_per_capita
<chr> <chr> <ord> <dbl> <dbl>
1 España Europa alto 48.6 33000
2 México América medio 130. 14000
3 Alemania Europa alto 84.4 52000
4 Brasil América medio 203. 11000
5 Japón Asia alto 123. 42000
# ℹ 1 more variable: mas_100_millones <lgl>
- Ordena el conjunto de datos según una de las variables numéricas utilizando la función
arrange()(puede ser en orden ascendente o descendente).
paises_ordenados <- paises %>%
arrange(desc(pib_per_capita))
paises_ordenados# A tibble: 5 × 6
pais continente nivel_desarrollo poblacion_millones pib_per_capita
<chr> <chr> <ord> <dbl> <dbl>
1 Alemania Europa alto 84.4 52000
2 Japón Asia alto 123. 42000
3 España Europa alto 48.6 33000
4 México América medio 130. 14000
5 Brasil América medio 203. 11000
# ℹ 1 more variable: mas_100_millones <lgl>
- Elimina dos países del conjunto de datos que has creado (por ejemplo, filtrándolos por su nombre) y muestra el resultado.
paises_filtrados <- paises %>%
filter(!pais %in% c("Brasil", "Japón"))
paises_filtrados# A tibble: 3 × 6
pais continente nivel_desarrollo poblacion_millones pib_per_capita
<chr> <chr> <ord> <dbl> <dbl>
1 España Europa alto 48.6 33000
2 México América medio 130. 14000
3 Alemania Europa alto 84.4 52000
# ℹ 1 more variable: mas_100_millones <lgl>
- Plantea una pregunta adicional de interés que puedas responder con estos datos y resuélvela utilizando las funciones adecuadas y el operador pipe
(%>%). Cuál es el PIB per cápita medio de los países con nivel de desarrollo alto?
paises %>%
filter(nivel_desarrollo == "alto") %>%
summarise(media_pib_per_capita = mean(pib_per_capita))# A tibble: 1 × 1
media_pib_per_capita
<dbl>
1 42333.