1. Carga y descripción de los datos

La base de datos utilizada en este análisis es una encuesta simulada sobre la percepción de la población española frente a la migración marroquí. Los datos fueron generados de manera simulada con fines académicos, replicando patrones plausibles de opinión pública, dado que no se contó con acceso a una encuesta real para este ejercicio.

El análisis de la percepción migratoria resulta relevante en el contexto español actual, donde los flujos migratorios desde el norte de África han sido objeto de debate político y social recurrente. Comprender cómo variables como la ideología, la edad, el nivel educativo o el contacto directo con población inmigrante se relacionan con la percepción ciudadana permite identificar patrones de opinión pública relevantes para el estudio de fenómenos migratorios y su tratamiento en la esfera política.

En este documento se presenta primero el análisis exploratorio de datos (EDA) y luego se construyen, manualmente, cuatro intervalos de confianza a partir de sus fórmulas estadísticas, sin utilizar t.test() ni prop.test().

library(readxl)
library(dplyr)
library(ggplot2)
datos <- read_excel("encuesta_migracion.xlsx")

1.1 Microdatos

En esta sección se presentan las primeras seis observaciones del conjunto de datos, con el propósito de verificar que la información haya sido importada correctamente y realizar un primer acercamiento a las variables disponibles.

head(datos)
## # A tibble: 6 × 12
##      ID  Edad Sexo  Nivel_Educativo Ingreso_Mensual Ideologia Comunidad_Autonoma
##   <dbl> <dbl> <chr> <chr>                     <dbl> <chr>     <chr>             
## 1     1    58 Homb… Secundaria                  930 Centro    Andalucía         
## 2     2    47 Mujer Universitario              3290 Izquierda Madrid            
## 3     3    34 Mujer Formación Prof…            1710 Izquierda Madrid            
## 4     4    66 Mujer Formación Prof…            1900 Derecha   Comunidad Valenci…
## 5     5    79 Homb… Postgrado                  1500 Centro    Comunidad Valenci…
## 6     6    37 Homb… Secundaria                 1870 Izquierda Otra              
## # ℹ 5 more variables: Contacto_Inmigrantes <dbl>, Horas_Noticias <dbl>,
## #   Percepcion_Migracion <dbl>, Postura_Migracion <chr>,
## #   Fuente_Informacion <chr>

La base de datos contiene información sociodemográfica y relacionada con las percepciones sobre la migración: identificador, edad, sexo, nivel educativo, ingreso mensual, ideología política, comunidad autónoma, contacto con inmigrantes, horas de consumo de noticias, percepción de la migración, postura frente a la migración y fuente de información.

1.2 Dimensiones y tipo de variables

dim(datos)
## [1] 100  12

La base de datos está conformada por 100 observaciones y 12 variables. Las observaciones corresponden a los participantes de la encuesta y las variables contienen información relacionada con sus características sociodemográficas y percepciones sobre la migración.

tipos <- data.frame(Variable = names(datos), Tipo = sapply(datos, class))
rownames(tipos) <- NULL
knitr::kable(tipos)
Variable Tipo
ID numeric
Edad numeric
Sexo character
Nivel_Educativo character
Ingreso_Mensual numeric
Ideologia character
Comunidad_Autonoma character
Contacto_Inmigrantes numeric
Horas_Noticias numeric
Percepcion_Migracion numeric
Postura_Migracion character
Fuente_Informacion character

La base de datos contiene 12 variables, de las cuales 6 son numéricas y 6 son categóricas. Entre las numéricas se encuentran ID, edad, ingreso mensual, contacto con inmigrantes, horas de noticias y percepción de la migración. Las categóricas corresponden a sexo, nivel educativo, ideología, comunidad autónoma, postura frente a la migración y fuente de información. La variable ID, aunque es numérica, funciona como identificador de cada participante y no se utiliza en los análisis estadísticos.

1.3 Datos faltantes

colSums(is.na(datos))
##                   ID                 Edad                 Sexo 
##                    0                    0                    0 
##      Nivel_Educativo      Ingreso_Mensual            Ideologia 
##                    0                    0                    0 
##   Comunidad_Autonoma Contacto_Inmigrantes       Horas_Noticias 
##                    0                    0                    0 
## Percepcion_Migracion    Postura_Migracion   Fuente_Informacion 
##                    0                    0                    0

No se presentan datos faltantes en ninguna variable. Por lo tanto, no es necesario realizar procesos de imputación o eliminación de observaciones, y las medidas estadísticas utilizan las 100 observaciones disponibles.

2. Análisis Exploratorio de Datos (EDA)

2.1 Resumen estadístico de las variables numéricas

Para las variables numéricas se calculan el mínimo, primer cuartil (Q1), mediana, media, tercer cuartil (Q3), máximo y desviación estándar.

vars_num <- c("Edad", "Ingreso_Mensual", "Contacto_Inmigrantes",
              "Horas_Noticias", "Percepcion_Migracion")

resumen <- data.frame(
  Variable = vars_num,
  Minimo   = sapply(datos[vars_num], min),
  Q1       = sapply(datos[vars_num], function(v) quantile(v, 0.25)),
  Mediana  = sapply(datos[vars_num], median),
  Media    = sapply(datos[vars_num], mean),
  Q3       = sapply(datos[vars_num], function(v) quantile(v, 0.75)),
  Maximo   = sapply(datos[vars_num], max),
  Desv_Est = sapply(datos[vars_num], sd)
)
rownames(resumen) <- NULL
knitr::kable(resumen, digits = 2)
Variable Minimo Q1 Mediana Media Q3 Maximo Desv_Est
Edad 18.0 33.00 48.0 48.55 64.00 79 18.08
Ingreso_Mensual 810.0 1697.50 2015.0 2095.60 2527.50 4220 708.43
Contacto_Inmigrantes 0.0 2.00 5.0 5.21 8.00 10 3.22
Horas_Noticias 0.1 6.62 11.5 10.88 15.45 20 5.72
Percepcion_Migracion 1.0 4.20 5.4 5.45 6.62 10 2.06

La edad de los participantes abarca un rango entre los 18 y los 79 años, con una media de 48,55 años y una mediana de 48,00 años; la cercanía entre ambas medidas sugiere una distribución aproximadamente simétrica. El ingreso mensual presenta valores entre 810 y 4.220 unidades, con una media (2.095,60) ligeramente superior a la mediana (2.015,00), lo que indica una leve concentración de valores altos hacia el extremo superior. Las horas dedicadas al consumo de noticias oscilan entre 0,10 y 20,00, con una media de 10,88. Finalmente, la percepción de la migración se mide en una escala de 1 a 10, con una media de 5,45 y una mediana de 5,40, es decir, ligeramente por encima del centro de la escala, con una desviación estándar de 2,06.

2.2 Resumen de las variables categóricas

Para las variables categóricas se calcula la frecuencia absoluta y el porcentaje de cada categoría.

vars_cat <- c("Sexo", "Nivel_Educativo", "Ideologia",
              "Comunidad_Autonoma", "Postura_Migracion", "Fuente_Informacion")

for (v in vars_cat) {
  tab <- as.data.frame(table(datos[[v]]))
  names(tab) <- c("Categoria", "Frecuencia")
  tab$Porcentaje <- round(100 * tab$Frecuencia / nrow(datos), 1)
  cat("\n\n**", v, "**\n\n")
  print(knitr::kable(tab))
}

** Sexo **

Categoria Frecuencia Porcentaje
Hombre 51 51
Mujer 49 49

** Nivel_Educativo **

Categoria Frecuencia Porcentaje
Formación Profesional 27 27
Postgrado 18 18
Secundaria 30 30
Universitario 25 25

** Ideologia **

Categoria Frecuencia Porcentaje
Centro 35 35
Derecha 34 34
Izquierda 31 31

** Comunidad_Autonoma **

Categoria Frecuencia Porcentaje
Andalucía 24 24
Cataluña 15 15
Comunidad Valenciana 17 17
Madrid 18 18
Otra 15 15
País Vasco 11 11

** Postura_Migracion **

Categoria Frecuencia Porcentaje
Desfavorable 24 24
Favorable 26 26
Neutral 50 50

** Fuente_Informacion **

Categoria Frecuencia Porcentaje
Conversaciones Personales 13 13
Prensa Digital 23 23
Radio 13 13
Redes Sociales 29 29
Televisión 22 22

La muestra está equilibrada por sexo (51% hombres y 49% mujeres) y por ideología (35% centro, 34% derecha y 31% izquierda). Respecto a la postura frente a la migración, la mitad de la muestra (50%) adopta una posición neutral, el 26% una postura favorable y el 24% una desfavorable. Las redes sociales son la principal fuente de información (29%), seguidas por la prensa digital (23%) y la televisión (22%).

2.3 Histogramas

ggplot(datos, aes(x = Edad)) +
  geom_histogram(bins = 15, fill = "#4C78A8", color = "white") +
  labs(title = "Distribución de la edad",
       x = "Edad (años)", y = "Frecuencia") +
  theme_minimal()

El histograma de la edad refleja una cobertura amplia, de los 18 a los 79 años, sin asimetría pronunciada hacia ninguno de los extremos. Esto es coherente con la cercanía entre la media y la mediana.

ggplot(datos, aes(x = Ingreso_Mensual)) +
  geom_histogram(bins = 15, fill = "#F58518", color = "white") +
  labs(title = "Distribución del ingreso mensual",
       x = "Ingreso mensual", y = "Frecuencia") +
  theme_minimal()

El histograma del ingreso mensual muestra una concentración en el tramo central (entre 1.500 y 2.500) y un leve alargamiento hacia la derecha, lo que concuerda con una media ligeramente superior a la mediana (asimetría positiva leve).

2.4 Gráficos de barras

ggplot(datos, aes(x = Sexo, fill = Sexo)) +
  geom_bar() +
  labs(title = "Distribución por sexo", x = "Sexo", y = "Frecuencia") +
  theme_minimal() +
  theme(legend.position = "none")

La distribución por sexo es prácticamente paritaria: 51 hombres (51%) y 49 mujeres (49%).

ggplot(datos, aes(x = Postura_Migracion, fill = Postura_Migracion)) +
  geom_bar() +
  labs(title = "Postura frente a la migración",
       x = "Postura", y = "Frecuencia") +
  theme_minimal() +
  theme(legend.position = "none")

La postura neutral es la más frecuente (50 participantes), seguida de la favorable (26) y la desfavorable (24). Estos resultados describen únicamente a la muestra; para extenderlos a la población española se necesita inferencia, que es lo que se hace a continuación.

3. Intervalos de confianza

En los siguientes ejemplos se utiliza un nivel de confianza del 95 %. Cada intervalo se construye directamente a partir de sus componentes: mean(), sd(), length(), qnorm(), el error estándar y el margen de error.

Nota: en los intervalos para medias la varianza poblacional es desconocida, por lo que se usa la desviación estándar muestral s. Como los tamaños muestrales son suficientemente grandes, se utiliza la aproximación normal basada en el Teorema Central del Límite.

3.1. Intervalo de confianza para una media

Queremos estimar la percepción media de la migración marroquí (escala de 1 a 10) en la población española.

\[ IC_{95\%}=\bar{x}\pm z_{\alpha/2}\frac{s}{\sqrt{n}} \]

Paso 1: calcular los estadísticos muestrales

x <- datos$Percepcion_Migracion

media <- mean(x)
s <- sd(x)
n <- length(x)

media
## [1] 5.454
s
## [1] 2.061647
n
## [1] 100

Paso 2: calcular el valor crítico

confianza <- 0.95
alpha <- 1 - confianza
z <- qnorm(1 - alpha / 2)

z
## [1] 1.959964

Paso 3: calcular el error estándar y el margen de error

error_estandar <- s / sqrt(n)
margen_error <- z * error_estandar

error_estandar
## [1] 0.2061647
margen_error
## [1] 0.4040754

Paso 4: construir el intervalo

limite_inferior <- media - margen_error
limite_superior <- media + margen_error

ic1 <- c(limite_inferior, limite_superior)
ic1
## [1] 5.049925 5.858075

Interpretación

Con un 95 % de confianza, estimamos que la percepción promedio de la población española frente a la migración marroquí se encuentra entre 5.05 y 5.86 puntos en la escala de 1 a 10 (donde los valores más altos indican una percepción más favorable).

En el contexto del estudio, esto significa que, en promedio, la opinión de la población es moderada: el intervalo incluye el punto medio de la escala (5,5), así que con estos datos no podemos afirmar que los españoles, como conjunto, tengan una percepción claramente favorable ni claramente desfavorable de la migración marroquí. Además, el intervalo es relativamente estrecho (el margen de error es de apenas 0.4 puntos), lo que indica que, con 100 personas encuestadas, la estimación del promedio poblacional es bastante precisa.


3.2. Intervalo de confianza para una proporción

Queremos estimar la proporción de personas con una postura desfavorable frente a la migración.

\[ IC_{95\%}=\hat{p}\pm z_{\alpha/2}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]

Paso 1: obtener la proporción mediante prop.table()

frecuencias <- table(datos$Postura_Migracion)
frecuencias
## 
## Desfavorable    Favorable      Neutral 
##           24           26           50
proporciones <- prop.table(frecuencias)
proporciones
## 
## Desfavorable    Favorable      Neutral 
##         0.24         0.26         0.50
p <- as.numeric(proporciones["Desfavorable"])
n <- length(datos$Postura_Migracion)

p
## [1] 0.24
n
## [1] 100

Paso 2: calcular el valor crítico

alpha <- 1 - 0.95
z <- qnorm(1 - alpha / 2)

z
## [1] 1.959964

Paso 3: calcular el error estándar y el margen de error

error_estandar <- sqrt(p * (1 - p) / n)
margen_error <- z * error_estandar

error_estandar
## [1] 0.04270831
margen_error
## [1] 0.08370676

Paso 4: construir el intervalo

limite_inferior <- p - margen_error
limite_superior <- p + margen_error

ic2 <- c(limite_inferior, limite_superior)
ic2
## [1] 0.1562932 0.3237068

Interpretación

Con un 95 % de confianza, estimamos que la proporción de la población española con una postura desfavorable frente a la migración marroquí se encuentra entre 0.156 y 0.324, es decir, entre el 15.6 % y el 32.4 %.

En la muestra, el 24 % de los encuestados se declaró desfavorable, pero el intervalo muestra que en toda la población esa proporción podría ir desde cerca de 1 de cada 6 personas hasta cerca de 1 de cada 3. En el contexto del estudio, esto indica que la postura abiertamente desfavorable es minoritaria: incluso en el extremo superior del intervalo (32.4 %) no alcanza a la mitad de la población, lo que es coherente con que la mayoría de la muestra (76 %) se haya declarado neutral o favorable.


3.3. Intervalo de confianza para la diferencia de dos medias

Comparamos la percepción media de la migración entre las personas de izquierda y de derecha. La diferencia que queremos estimar es:

\[ \mu_{\text{izquierda}}-\mu_{\text{derecha}} \]

\[ (\bar{x}_1-\bar{x}_2)\pm z_{\alpha/2}\sqrt{\frac{s_1^2}{n_1}+\frac{s_2^2}{n_2}} \]

Paso 1: separar las dos muestras

percepcion_izq <- datos[datos$Ideologia == "Izquierda", ]$Percepcion_Migracion
percepcion_der <- datos[datos$Ideologia == "Derecha", ]$Percepcion_Migracion

Paso 2: calcular los estadísticos muestrales

media_1 <- mean(percepcion_izq)
s_1 <- sd(percepcion_izq)
n_1 <- length(percepcion_izq)

media_2 <- mean(percepcion_der)
s_2 <- sd(percepcion_der)
n_2 <- length(percepcion_der)

media_1
## [1] 6.135484
s_1
## [1] 1.800287
n_1
## [1] 31
media_2
## [1] 4.729412
s_2
## [1] 1.987923
n_2
## [1] 34

Paso 3: calcular la diferencia de medias

diferencia_medias <- media_1 - media_2
diferencia_medias
## [1] 1.406072

Paso 4: calcular el error estándar

error_estandar <- sqrt((s_1^2 / n_1) + (s_2^2 / n_2))
error_estandar
## [1] 0.4698722

Paso 5: calcular el margen de error

alpha <- 0.05
z <- qnorm(1 - alpha / 2)

margen_error <- z * error_estandar

z
## [1] 1.959964
margen_error
## [1] 0.9209326

Paso 6: construir el intervalo

limite_inferior <- diferencia_medias - margen_error
limite_superior <- diferencia_medias + margen_error

ic3 <- c(limite_inferior, limite_superior)
ic3
## [1] 0.4851395 2.3270047

Interpretación

El intervalo estima la diferencia entre las percepciones medias poblacionales de las personas de izquierda y de derecha, en ese orden. El valor 0 es el punto de referencia: si el intervalo lo contiene, no hay evidencia de diferencia entre los dos grupos.

Con un 95 % de confianza, la diferencia en la percepción media de la migración marroquí entre izquierda y derecha se encuentra entre 0.49 y 2.33 puntos. Como ambos límites son positivos y el intervalo no contiene el 0, estimamos que las personas de izquierda tienen una percepción media más alta que las de derecha (valores más altos de la escala corresponden a una percepción más favorable, como lo confirma que la izquierda tenga más posturas favorables y la derecha más desfavorables en la muestra). La ideología política parece, por tanto, asociada a cómo se percibe la migración marroquí.


3.4. Intervalo de confianza para la diferencia de dos proporciones

Comparamos la proporción de personas con una postura favorable frente a la migración entre hombres y mujeres. La diferencia de interés es:

\[ p_{\text{hombres}}-p_{\text{mujeres}} \]

\[ (\hat{p}_1-\hat{p}_2)\pm z_{\alpha/2}\sqrt{\frac{\hat{p}_1(1-\hat{p}_1)}{n_1}+\frac{\hat{p}_2(1-\hat{p}_2)}{n_2}} \]

Paso 1: crear la variable indicadora

# TRUE si la postura es favorable
datos$Favorable <- datos$Postura_Migracion == "Favorable"

Paso 2: construir la tabla de frecuencias

tabla_prop <- table(datos$Sexo, datos$Favorable)
tabla_prop
##         
##          FALSE TRUE
##   Hombre    39   12
##   Mujer     35   14

Paso 3: obtener las proporciones mediante prop.table()

proporciones <- prop.table(tabla_prop, margin = 1)
proporciones
##         
##              FALSE      TRUE
##   Hombre 0.7647059 0.2352941
##   Mujer  0.7142857 0.2857143
p_1 <- proporciones["Hombre", "TRUE"]
p_2 <- proporciones["Mujer", "TRUE"]

p_1
## [1] 0.2352941
p_2
## [1] 0.2857143

Paso 4: calcular los tamaños de muestra

n_1 <- length(datos[datos$Sexo == "Hombre", ]$Postura_Migracion)
n_2 <- length(datos[datos$Sexo == "Mujer", ]$Postura_Migracion)

n_1
## [1] 51
n_2
## [1] 49

Paso 5: calcular la diferencia de proporciones

diferencia_proporciones <- p_1 - p_2
diferencia_proporciones
## [1] -0.05042017

Paso 6: calcular el error estándar

error_estandar <- sqrt((p_1 * (1 - p_1) / n_1) + (p_2 * (1 - p_2) / n_2))
error_estandar
## [1] 0.08770967

Paso 7: calcular el margen de error

alpha <- 0.05
z <- qnorm(1 - alpha / 2)

margen_error <- z * error_estandar

z
## [1] 1.959964
margen_error
## [1] 0.1719078

Paso 8: construir el intervalo

limite_inferior <- diferencia_proporciones - margen_error
limite_superior <- diferencia_proporciones + margen_error

ic4 <- c(limite_inferior, limite_superior)
ic4
## [1] -0.2223280  0.1214876

Interpretación

El intervalo estima la diferencia entre la proporción poblacional de hombres con postura favorable y la de mujeres con postura favorable, en ese orden. El valor 0 es el punto de referencia.

Con un 95 % de confianza, la diferencia entre ambas proporciones se encuentra entre -0.22 y 0.12. Como el intervalo contiene el 0, no hay evidencia estadística de que la proporción de personas con postura favorable sea distinta entre hombres y mujeres al 5 % de significancia. Aunque en la muestra las mujeres tienen una proporción algo mayor (28.6 % frente a 23.5 %), esa diferencia es compatible con que, en la población, no exista ninguna.

4. Resumen de los cuatro intervalos

resumen_ic <- data.frame(
  Intervalo = c("Una media", "Una proporción",
                "Diferencia de medias", "Diferencia de proporciones"),
  Parametro = c("Percepción media de la migración",
                "Proporción con postura desfavorable",
                "Percepción media: izquierda - derecha",
                "Postura favorable: hombres - mujeres"),
  Limite_inferior = round(c(ic1[1], ic2[1], ic3[1], ic4[1]), 3),
  Limite_superior = round(c(ic1[2], ic2[2], ic3[2], ic4[2]), 3)
)
knitr::kable(resumen_ic)
Intervalo Parametro Limite_inferior Limite_superior
Una media Percepción media de la migración 5.050 5.858
Una proporción Proporción con postura desfavorable 0.156 0.324
Diferencia de medias Percepción media: izquierda - derecha 0.485 2.327
Diferencia de proporciones Postura favorable: hombres - mujeres -0.222 0.121

5. Conclusión

En este trabajo se realizó un análisis exploratorio de la encuesta simulada sobre la percepción española frente a la migración marroquí y se construyeron manualmente cuatro intervalos de confianza al 95 %.

Mientras que el EDA describe únicamente a los 100 encuestados, los intervalos permiten estimar, con un margen de incertidumbre explícito, cómo sería la población española. Los resultados muestran que la percepción promedio de la población se ubica en la zona media de la escala (entre 5.05 y 5.86), y que entre un 15.6 % y un 32.4 % de la población tendría una postura desfavorable. El hallazgo más relevante es la diferencia por ideología: las personas de izquierda tienen una percepción de la migración más alta (más favorable) que las de derecha, ya que el intervalo de la diferencia (0.49 a 2.33) no incluye el 0. En cambio, entre hombres y mujeres no se encontró evidencia de diferencias en la proporción de posturas favorables, porque el intervalo correspondiente sí incluye el 0.

Esto sugiere que, en estos datos, la ideología política muestra una asociación clara con la percepción de la migración, mientras que para el sexo no se encontró evidencia de diferencia en la postura favorable (aunque ambos hallazgos se midieron con variables distintas, por lo que su comparación es solo orientativa). Como limitación, hay que recordar que los datos son simulados con fines académicos, por lo que estas conclusiones ilustran el método y no describen la opinión real de la población española. Además, los intervalos informan sobre asociaciones, no sobre causas.