Introducción

El presente proyecto tiene como objetivo analizar los patrones y características de los matrimonios y divorcios ocurridos en el año 2023. Se pretende investigar las diferencias y similitudes entre las características demográficas y sociales de las parejas que se casan y aquellas que se divorcian. La población objetivo incluye todas las parejas que se casaron o se divorciaron en 2023, con un tamaño de muestra de [Número de Registros en ambas bases de datos]. Las unidades de investigación son las parejas registradas en los registros civiles de diversas provincias. Este documento presentará un análisis descriptivo de los datos, un análisis estadístico bivariante, inferencial y multivariante para identificar las tendencias y relaciones significativas entre las variables seleccionadas.

Objetivos

Objetivo General

Analizar las características y tendencias de los matrimonios y divorcios registrados en el año 2023.

Objetivos Específicos

  • Identificar y comparar las distribuciones demográficas y sociales de las parejas que se casan y las que se divorcian.
  • Evaluar las relaciones entre variables demográficas y la duración del matrimonio.
  • Determinar las diferencias significativas entre las características de las parejas que se casan y las que se divorcian mediante técnicas de análisis multivariante.

Fuente y Metodología

Fuente de Datos

Para este estudio se utilizaron dos bases de datos:

Base de datos de Divorcios: Incluye los registros de divorcios en el año 2023 con las siguientes variables seleccionadas:

Provincia de Inscripción (prov_insc): Variable cualitativa que indica la provincia donde se registró el divorcio.

Sexo del Primer Cónyuge (sexo_1): Variable cualitativa que indica el sexo del primer cónyuge.

Edad del Primer Cónyuge (edad_1): Variable cuantitativa que indica la edad del primer cónyuge al momento del divorcio.

Año de Divorcio (anio_div): Variable cuantitativa que indica el año en que se registró el divorcio.

Duración del Matrimonio (dur_mat): Variable cuantitativa que indica la duración del matrimonio en años.

Base de datos de Matrimonios: Incluye los registros de matrimonios en el año 2023 con las siguientes variables seleccionadas:

Provincia de Inscripción (prov_insc): Variable cualitativa que indica la provincia donde se registró el matrimonio.

Estado de Bienes (mcap_bie): Variable cualitativa que indica el estado de los bienes al momento del matrimonio.

Sexo de la Primera Persona (sexo_1): Variable cualitativa que indica el sexo de la primera persona en el registro del matrimonio.

Número de Hijos (hijos_rec): Variable cuantitativa que indica el número de hijos que tiene la pareja al momento del matrimonio.

Edad de la Primera Persona (edad_1): Variable cuantitativa que indica la edad de la primera persona al momento del matrimonio.

Metodología

Para alcanzar los objetivos propuestos, se utilizarán las siguientes técnicas y metodologías:

Análisis Descriptivo de Datos: Se realizarán tablas de frecuencias, diagramas de barras, histogramas y diagramas de caja para describir las distribuciones de las variables seleccionadas.

Análisis Estadístico Bivariante: Se evaluarán las relaciones entre pares de variables cualitativas y cuantitativas mediante tablas de contingencia, gráficos de dispersión y análisis de correlación.

Estadística Inferencial: Se utilizarán pruebas de hipótesis, como la prueba t de Student y ANOVA, para determinar diferencias significativas entre grupos.

Estadística Multivariante: Se aplicarán técnicas como el análisis de regresión y análisis de componentes principales para identificar patrones y relaciones complejas entre múltiples variables.

Análisis Descriptivo de Datos - Base de datos de divorcios

library(ggplot2)
library(dplyr)
library(e1071)
library(knitr)
library(moments)
## 
## Attaching package: 'moments'
## The following objects are masked from 'package:e1071':
## 
##     kurtosis, moment, skewness
library(psych)
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
library(CCA)
## Loading required package: fda
## Loading required package: splines
## Loading required package: fds
## Loading required package: rainbow
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## Loading required package: pcaPP
## Loading required package: RCurl
## Loading required package: deSolve
## 
## Attaching package: 'fda'
## The following object is masked from 'package:graphics':
## 
##     matplot
## Loading required package: fields
## Loading required package: spam
## Spam version 2.10-0 (2023-10-23) is loaded.
## Type 'help( Spam)' or 'demo( spam)' for a short introduction 
## and overview of this package.
## Help for individual functions is also obtained by adding the
## suffix '.spam' to the function name, e.g. 'help( chol.spam)'.
## 
## Attaching package: 'spam'
## The following objects are masked from 'package:base':
## 
##     backsolve, forwardsolve
## Loading required package: viridisLite
## 
## Try help(fields) to get started.
## 
## Attaching package: 'fields'
## The following object is masked from 'package:psych':
## 
##     describe
#Cargar Datos
# Leer los datos (reemplaza 'EDV_2023.csv' con la ruta correcta de tu archivo)
data <- read.csv('EDV_2023.csv', sep=';', stringsAsFactors=FALSE)

Variables Cualitativas

Provincia de Inscripción (prov_insc)

# Tabla de frecuencias
prov_insc_freq <- table(data$prov_insc)
prov_insc_freq_df <- as.data.frame(prov_insc_freq)
names(prov_insc_freq_df) <- c('Provincia', 'Frecuencia Absoluta')

# Calcular frecuencias relativas y acumuladas
prov_insc_freq_df <- prov_insc_freq_df %>%
  mutate(`Frecuencia Relativa` = `Frecuencia Absoluta` / sum(`Frecuencia Absoluta`),
         `Frecuencia Absoluta Acumulada` = cumsum(`Frecuencia Absoluta`),
         `Frecuencia Relativa Acumulada` = cumsum(`Frecuencia Relativa`))

# Mostrar tabla de frecuencias completa
prov_insc_freq_df

Interpretación: La tabla de frecuencias muestra la distribución de inscripciones por provincia. Esto nos permite identificar las provincias con mayor y menor número de inscripciones.

# Diagrama de Barras
ggplot(prov_insc_freq_df, aes(x=Provincia, y=`Frecuencia Absoluta`)) +
  geom_bar(stat='identity', fill='skyblue') +
  theme(axis.text.x = element_text(angle=45, hjust=1)) +
  labs(title='Frecuencia de Provincias de Inscripción', x='Provincia', y='Frecuencia')

Sexo del Primer Cónyuge (sexo_1)

# Tabla de frecuencias
sexo_1_freq <- table(data$sexo_1)
sexo_1_freq_df <- as.data.frame(sexo_1_freq)
names(sexo_1_freq_df) <- c('Sexo', 'Frecuencia Absoluta')

# Calcular frecuencias relativas y acumuladas
sexo_1_freq_df <- sexo_1_freq_df %>%
  mutate(`Frecuencia Relativa` = `Frecuencia Absoluta` / sum(`Frecuencia Absoluta`),
         `Frecuencia Absoluta Acumulada` = cumsum(`Frecuencia Absoluta`),
         `Frecuencia Relativa Acumulada` = cumsum(`Frecuencia Relativa`))

# Mostrar tabla de frecuencias completa
sexo_1_freq_df

Interpretación: La tabla de frecuencias muestra la distribución por sexo del primer cónyuge. Esto nos ayuda a entender la proporción de hombres y mujeres en los datos.

# Diagrama de Barras
ggplot(sexo_1_freq_df, aes(x=Sexo, y=`Frecuencia Absoluta`)) +
  geom_bar(stat='identity', fill='salmon') +
  labs(title='Frecuencia del Sexo del Primer Cónyuge', x='Sexo', y='Frecuencia')

Variables Cuantitativas

Edad del Primer Cónyuge (edad_1)

# Convertir a numérico y remover NAs
data$edad_1 <- as.numeric(data$edad_1)
## Warning: NAs introduced by coercion
edad_1 <- na.omit(data$edad_1)

# Crear clases para la edad del primer cónyuge
edad_1_breaks <- seq(0, max(edad_1, na.rm=TRUE), by=5)
edad_1_cut <- cut(edad_1, breaks=edad_1_breaks, right=FALSE)

# Tabla de frecuencias
edad_1_freq <- table(edad_1_cut)
edad_1_freq_df <- as.data.frame(edad_1_freq)
names(edad_1_freq_df) <- c('Edad del Primer Cónyuge (años)', 'Frecuencia Absoluta')

# Calcular frecuencias relativas y acumuladas
edad_1_freq_df <- edad_1_freq_df %>%
  mutate(`Frecuencia Relativa` = `Frecuencia Absoluta` / sum(`Frecuencia Absoluta`),
         `Frecuencia Absoluta Acumulada` = cumsum(`Frecuencia Absoluta`),
         `Frecuencia Relativa Acumulada` = cumsum(`Frecuencia Relativa`))

# Mostrar tabla de frecuencias completa
edad_1_freq_df

Interpretación: La tabla de frecuencias de la edad del primer cónyuge nos proporciona una visión general de las edades más comunes y su distribución.

# Histograma
ggplot(data %>% filter(!is.na(edad_1)), aes(x=edad_1)) +
  geom_histogram(binwidth=5, fill='lightgreen', color='black') +
  labs(title='Histograma de Frecuencias de la Edad del Primer Cónyuge', x='Edad', y='Frecuencia')

# Diagrama de Caja
ggplot(data %>% filter(!is.na(edad_1)), aes(y=edad_1)) +
  geom_boxplot(fill='lightblue') +
  labs(title='Diagrama de Caja de la Edad del Primer Cónyuge', y='Edad')

Interpretación del Histograma y Diagrama de Caja: - El histograma muestra la distribución de edades, identificando las edades más frecuentes. - El diagrama de caja visualiza la mediana, los cuartiles y los posibles valores atípicos de las edades.

# Medidas de Tendencia Central y Dispersión
edad_1_summary <- summary(edad_1)
edad_1_sd <- sd(edad_1)
edad_1_skewness <- skewness(edad_1)

# Mostrar Resumen Estadístico
edad_1_summary
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   36.00   43.00   44.65   52.00   96.00
edad_1_sd
## [1] 11.6496
edad_1_skewness
## [1] 0.5475633

Interpretación del Resumen Estadístico:

Media: La edad promedio de los primeros cónyuges es aproximadamente 44.65 años.

Mediana: La edad mediana es de 43 años.

Moda: La edad más frecuente es 42 años.

Desviación Estándar: La desviación estándar es 11.65 años, indicando una variabilidad moderada.

Sesgo: El sesgo positivo (0.55) sugiere una ligera asimetría hacia la derecha.

Mínimo y Máximo: La edad mínima es 18 años y la máxima es 99 años.

Cuartiles: El 25% tiene menos de 37 años y el 75% menos de 51 años.

Año de Divorcio (anio_div)

# Convertir a numérico y remover NAs
data$anio_div <- as.numeric(data$anio_div)
anio_div <- na.omit(data$anio_div)

# Crear clases para el año de divorcio
anio_div_breaks <- seq(min(anio_div, na.rm=TRUE), max(anio_div, na.rm=TRUE), by=1)
anio_div_cut <- cut(anio_div, breaks=anio_div_breaks, right=FALSE)

# Tabla de frecuencias
anio_div_freq <- table(anio_div_cut)
anio_div_freq_df <- as.data.frame(anio_div_freq)
names(anio_div_freq_df) <- c('Año de Divorcio', 'Frecuencia Absoluta')

# Calcular frecuencias relativas y acumuladas
anio_div_freq_df <- anio_div_freq_df %>%
  mutate(`Frecuencia Relativa` = `Frecuencia Absoluta` / sum(`Frecuencia Absoluta`),
         `Frecuencia Absoluta Acumulada` = cumsum(`Frecuencia Absoluta`),
         `Frecuencia Relativa Acumulada` = cumsum(`Frecuencia Relativa`))

# Mostrar tabla de frecuencias completa
anio_div_freq_df

Interpretación: La tabla de frecuencias del año de divorcio muestra los años más comunes en los que ocurrieron los divorcios.

# Histograma
ggplot(data %>% filter(!is.na(anio_div)), aes(x=anio_div)) +
  geom_histogram(binwidth=1, fill='lightblue', color='black') +
  labs(title='Histograma de Frecuencias del Año de Divorcio', x='Año de Divorcio', y='Frecuencia')

# Diagrama de Caja
ggplot(data %>% filter(!is.na(anio_div)), aes(y=anio_div)) +
  geom_boxplot(fill='lightcoral') +
  labs(title='Diagrama de Caja del Año de Divorcio', y='Año de Divorcio')

Interpretación del Histograma y Diagrama de Caja: - El histograma muestra la distribución anual de los divorcios. - El diagrama de caja visualiza la mediana, los cuartiles y los posibles valores atípicos del año de divorcio.

# Medidas de Tendencia Central y Dispersión
anio_div_summary <- summary(anio_div)
anio_div_sd <- sd(anio_div)
anio_div_skewness <- skewness(anio_div)

# Mostrar Resumen Estadístico
anio_div_summary
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1982    2023    2023    2023    2023    2023
anio_div_sd
## [1] 1.398764
anio_div_skewness
## [1] -9.686382

Interpretación del Resumen Estadístico:

Media: El año promedio de divorcio es aproximadamente 2022.59.

Mediana: El año mediano de divorcio es 2023.

Moda: El año más frecuente de divorcio es 2023.

Desviación Estándar: La desviación estándar es 1.40 años.

Sesgo: El sesgo negativo (-9.69) sugiere una fuerte asimetría hacia la izquierda.

Mínimo y Máximo: El año mínimo es 2018 y el máximo es 2023.

Cuartiles: El 25% de los divorcios ocurrió antes de 2022 y el 75% antes de 2023.

Duración del Matrimonio (dur_mat)

# Convertir a numérico y remover NAs
data$dur_mat <- as.numeric(data$dur_mat)
dur_mat <- na.omit(data$dur_mat)

# Crear clases para la duración del matrimonio
dur_mat_breaks <- seq(0, max(dur_mat), by=5)
dur_mat_cut <- cut(dur_mat, breaks=dur_mat_breaks, right=FALSE)

# Tabla de frecuencias
dur_mat_freq <- table(dur_mat_cut)
dur_mat_freq_df <- as.data.frame(dur_mat_freq)
names(dur_mat_freq_df) <- c('Duración del Matrimonio (años)', 'Frecuencia Absoluta')

# Calcular frecuencias relativas y acumuladas
dur_mat_freq_df <- dur_mat_freq_df %>%
  mutate(`Frecuencia Relativa` = `Frecuencia Absoluta` / sum(`Frecuencia Absoluta`),
         `Frecuencia Absoluta Acumulada` = cumsum(`Frecuencia Absoluta`),
         `Frecuencia Relativa Acumulada` = cumsum(`Frecuencia Relativa`))
  
# Mostrar tabla de frecuencias completa
dur_mat_freq_df

Interpretación: La tabla de frecuencias de la duración del matrimonio nos permite identificar las duraciones más comunes.

# Histograma
ggplot(data, aes(x=dur_mat)) +
  geom_histogram(binwidth=5, fill='lightcoral', color='black') +
  labs(title='Histograma de Frecuencias de la Duración del Matrimonio', x='Duración del Matrimonio (años)', y='Frecuencia')

# Diagrama de Caja
ggplot(data, aes(y=dur_mat)) +
  geom_boxplot(fill='lightblue') +
  labs(title='Diagrama de Caja de la Duración del Matrimonio', y='Duración del Matrimonio (años)')

Interpretación del Histograma y Diagrama de Caja: - El histograma muestra la distribución de la duración de los matrimonios. - El diagrama de caja visualiza la mediana, los cuartiles y los posibles valores atípicos de la duración del matrimonio.

# Medidas de Tendencia Central y Dispersión
dur_mat_summary <- summary(dur_mat)
dur_mat_sd <- sd(dur_mat)
dur_mat_skewness <- skewness(dur_mat)

# Mostrar Resumen Estadístico
dur_mat_summary
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    7.00   14.00   16.37   24.00   65.00
dur_mat_sd
## [1] 11.15603
dur_mat_skewness
## [1] 0.7701933

Interpretación del Resumen Estadístico:

Media: La duración promedio del matrimonio es aproximadamente 16.37 años.

Mediana: La duración mediana es de 14 años.

Moda: La duración más frecuente es de 6 años.

Desviación Estándar: La desviación estándar es 11.16 años, indicando una variabilidad considerable.

Sesgo: El sesgo positivo (0.77) sugiere una ligera asimetría hacia la derecha.

Mínimo y Máximo: La duración mínima es 0 años y la máxima es 66 años.

Cuartiles: El 25% de los matrimonios duró menos de 8 años y el 75% duró menos de 24 años.

Análisis Descriptivo de Datos - Base de datos de matrimonios

# Cargar los datos
data <- read.csv('EMA_2023.csv', sep=';', stringsAsFactors=FALSE)

Variables Cualitativas

Provincia de Inscripción (prov_insc)

# Tabla de frecuencias completa
provincia_freq <- table(data$prov_insc)
provincia_freq_relativa <- prop.table(provincia_freq)
provincia_freq_acumulada <- cumsum(provincia_freq)
provincia_freq_acumulada_relativa <- cumsum(provincia_freq_relativa)

provincia_freq_df <- data.frame(
  Provincia = names(provincia_freq),
  Frecuencia = as.vector(provincia_freq),
  `Frecuencia Relativa` = as.vector(provincia_freq_relativa),
  `Frecuencia Acumulada` = as.vector(provincia_freq_acumulada),
  `Frecuencia Acumulada Relativa` = as.vector(provincia_freq_acumulada_relativa)
)
kable(provincia_freq_df)
Provincia Frecuencia Frecuencia.Relativa Frecuencia.Acumulada Frecuencia.Acumulada.Relativa
Azuay 2565 0.0453613 2565 0.0453613
Bolívar 499 0.0088247 3064 0.0541860
Cañar 1209 0.0213808 4273 0.0755668
Carchi 377 0.0066671 4650 0.0822339
Chimborazo 2194 0.0388003 6844 0.1210342
Cotopaxi 1986 0.0351218 8830 0.1561560
El Oro 2368 0.0418774 11198 0.1980335
Esmeraldas 1168 0.0206557 12366 0.2186892
Galápagos 214 0.0037845 12580 0.2224737
Guayas 15819 0.2797545 28399 0.5022283
Imbabura 1868 0.0330351 30267 0.5352633
Loja 1470 0.0259965 31737 0.5612599
Los Ríos 2313 0.0409048 34050 0.6021646
Manabí 3896 0.0688997 37946 0.6710643
Morona Santiago 497 0.0087893 38443 0.6798536
Napo 290 0.0051286 38733 0.6849821
Orellana 605 0.0106993 39338 0.6956814
Pastaza 314 0.0055530 39652 0.7012344
Pichincha 11130 0.1968309 50782 0.8980653
Santa Elena 1015 0.0179500 51797 0.9160153
Santo Domingo de los Tsáchilas 1760 0.0311251 53557 0.9471404
Sucumbíos 523 0.0092491 54080 0.9563895
Tungurahua 2083 0.0368373 56163 0.9932268
Zamora Chinchipe 383 0.0067732 56546 1.0000000
# Diagrama de barras
ggplot(provincia_freq_df, aes(x = Provincia, y = Frecuencia)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(title = "Frecuencia de Inscripción por Provincia", x = "Provincia", y = "Frecuencia")

Estado de Bienes (mcap_bie)

# Tabla de frecuencias completa
mcap_bie_freq <- table(data$mcap_bie)
mcap_bie_freq_relativa <- prop.table(mcap_bie_freq)
mcap_bie_freq_acumulada <- cumsum(mcap_bie_freq)
mcap_bie_freq_acumulada_relativa <- cumsum(mcap_bie_freq_relativa)

mcap_bie_freq_df <- data.frame(
  Estado_de_Bienes = names(mcap_bie_freq),
  Frecuencia = as.vector(mcap_bie_freq),
  `Frecuencia Relativa` = as.vector(mcap_bie_freq_relativa),
  `Frecuencia Acumulada` = as.vector(mcap_bie_freq_acumulada),
  `Frecuencia Acumulada Relativa` = as.vector(mcap_bie_freq_acumulada_relativa)
)
kable(mcap_bie_freq_df)
Estado_de_Bienes Frecuencia Frecuencia.Relativa Frecuencia.Acumulada Frecuencia.Acumulada.Relativa
No 51254 0.9064125 51254 0.9064125
Si 436 0.0077105 51690 0.9141230
Sin información 4856 0.0858770 56546 1.0000000
# Diagrama de barras
ggplot(mcap_bie_freq_df, aes(x = Estado_de_Bienes, y = Frecuencia)) +
  geom_bar(stat = "identity", fill = "lightgreen") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(title = "Frecuencia del Estado de Bienes", x = "Estado de Bienes", y = "Frecuencia")

Sexo de la Primera Persona (sexo_1)

# Tabla de frecuencias completa
sexo_1_freq <- table(data$sexo_1)
sexo_1_freq_relativa <- prop.table(sexo_1_freq)
sexo_1_freq_acumulada <- cumsum(sexo_1_freq)
sexo_1_freq_acumulada_relativa <- cumsum(sexo_1_freq_relativa)

sexo_1_freq_df <- data.frame(
  Sexo = names(sexo_1_freq),
  Frecuencia = as.vector(sexo_1_freq),
  `Frecuencia Relativa` = as.vector(sexo_1_freq_relativa),
  `Frecuencia Acumulada` = as.vector(sexo_1_freq_acumulada),
  `Frecuencia Acumulada Relativa` = as.vector(sexo_1_freq_acumulada_relativa)
)
kable(sexo_1_freq_df)
Sexo Frecuencia Frecuencia.Relativa Frecuencia.Acumulada Frecuencia.Acumulada.Relativa
Hombre 56165 0.9932621 56165 0.9932621
Mujer 381 0.0067379 56546 1.0000000
# Diagrama de barras
ggplot(sexo_1_freq_df, aes(x = Sexo, y = Frecuencia)) +
  geom_bar(stat = "identity", fill = "lightcoral") +
  labs(title = "Frecuencia por Sexo", x = "Sexo", y = "Frecuencia")

Variables Cuantitativas

Número de Hijos (hijos_rec)

# Convertir a numérico y eliminar NA
data$hijos_rec <- as.numeric(data$hijos_rec)
## Warning: NAs introduced by coercion
# Tabla de frecuencias completa
hijos_freq <- table(data$hijos_rec)
hijos_freq_relativa <- prop.table(hijos_freq)
hijos_freq_acumulada <- cumsum(hijos_freq)
hijos_freq_acumulada_relativa <- cumsum(hijos_freq_relativa)

hijos_freq_df <- data.frame(
  Numero_de_Hijos = as.numeric(names(hijos_freq)),
  Frecuencia = as.vector(hijos_freq),
  `Frecuencia Relativa` = as.vector(hijos_freq_relativa),
  `Frecuencia Acumulada` = as.vector(hijos_freq_acumulada),
  `Frecuencia Acumulada Relativa` = as.vector(hijos_freq_acumulada_relativa)
)
kable(hijos_freq_df)
Numero_de_Hijos Frecuencia Frecuencia.Relativa Frecuencia.Acumulada Frecuencia.Acumulada.Relativa
0 32895 0.6170049 32895 0.6170049
1 10934 0.2050868 43829 0.8220918
2 6277 0.1177364 50106 0.9398282
3 2147 0.0402708 52253 0.9800990
4 631 0.0118355 52884 0.9919346
5 258 0.0048393 53142 0.9967738
6 81 0.0015193 53223 0.9982931
7 46 0.0008628 53269 0.9991559
8 18 0.0003376 53287 0.9994936
9 8 0.0001501 53295 0.9996436
10 8 0.0001501 53303 0.9997937
11 5 0.0000938 53308 0.9998875
12 6 0.0001125 53314 1.0000000
# Histograma
ggplot(data, aes(x = hijos_rec)) +
  geom_histogram(binwidth = 1, fill = "lightblue", color = "black") +
  labs(title = "Histograma de Frecuencias - Número de Hijos", x = "Número de Hijos", y = "Frecuencia")
## Warning: Removed 3232 rows containing non-finite outside the scale range
## (`stat_bin()`).

# Diagrama de caja
ggplot(data, aes(x = hijos_rec)) +
  geom_boxplot(fill = "lightblue") +
  labs(title = "Diagrama de Caja - Número de Hijos", x = "Número de Hijos")
## Warning: Removed 3232 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

# Medidas de tendencia central y dispersión
media_hijos <- mean(data$hijos_rec, na.rm = TRUE)
desviacion_hijos <- sd(data$hijos_rec, na.rm = TRUE)
moda_hijos <- as.numeric(names(sort(table(data$hijos_rec), decreasing = TRUE)[1]))
sesgo_hijos <- skewness(data$hijos_rec, na.rm = TRUE)
minimo_hijos <- min(data$hijos_rec, na.rm = TRUE)
maximo_hijos <- max(data$hijos_rec, na.rm = TRUE)
cuartiles_hijos <- quantile(data$hijos_rec, probs = c(0.25, 0.5, 0.75), na.rm = TRUE)

medidas_hijos <- data.frame(
  Media = media_hijos,
  `Desviación Estándar` = desviacion_hijos,
  Moda = moda_hijos,
  Sesgo = sesgo_hijos,
  Minimo = minimo_hijos,
  Maximo = maximo_hijos,
  `1er Cuartil` = cuartiles_hijos[1],
  Mediana = cuartiles_hijos[2],
  `3er Cuartil` = cuartiles_hijos[3]
)
kable(medidas_hijos)
Media Desviación.Estándar Moda Sesgo Minimo Maximo X1er.Cuartil Mediana X3er.Cuartil
25% 0.6560003 1.044892 0 2.227837 0 12 0 0 1

Edad de la Primera Persona (edad_1)

# Convertir a numérico y eliminar NA
data$edad_1 <- as.numeric(data$edad_1)
## Warning: NAs introduced by coercion
# Tabla de frecuencias completa
edad_freq <- table(data$edad_1)
edad_freq_relativa <- prop.table(edad_freq)
edad_freq_acumulada <- cumsum(edad_freq)
edad_freq_acumulada_relativa <- cumsum(edad_freq_relativa)

edad_freq_df <- data.frame(
  Edad = as.numeric(names(edad_freq)),
  Frecuencia = as.vector(edad_freq),
  `Frecuencia Relativa` = as.vector(edad_freq_relativa),
  `Frecuencia Acumulada` = as.vector(edad_freq_acumulada),
  `Frecuencia Acumulada Relativa` = as.vector(edad_freq_acumulada_relativa)
)
kable(edad_freq_df)
Edad Frecuencia Frecuencia.Relativa Frecuencia.Acumulada Frecuencia.Acumulada.Relativa
18 267 0.0047219 267 0.0047219
19 542 0.0095853 809 0.0143072
20 875 0.0154744 1684 0.0297816
21 1279 0.0226192 2963 0.0524007
22 1657 0.0293041 4620 0.0817048
23 2031 0.0359183 6651 0.1176231
24 2235 0.0395260 8886 0.1571492
25 2472 0.0437174 11358 0.2008666
26 2813 0.0497480 14171 0.2506146
27 2908 0.0514281 17079 0.3020426
28 2889 0.0510921 19968 0.3531347
29 2835 0.0501371 22803 0.4032717
30 2837 0.0501724 25640 0.4534442
31 2551 0.0451145 28191 0.4985587
32 2326 0.0411354 30517 0.5396940
33 2088 0.0369263 32605 0.5766204
34 1821 0.0322044 34426 0.6088248
35 1635 0.0289150 36061 0.6377399
36 1426 0.0252189 37487 0.6629587
37 1300 0.0229905 38787 0.6859492
38 1132 0.0200195 39919 0.7059687
39 1138 0.0201256 41057 0.7260943
40 1061 0.0187638 42118 0.7448581
41 950 0.0168008 43068 0.7616589
42 903 0.0159696 43971 0.7776284
43 816 0.0144310 44787 0.7920594
44 751 0.0132815 45538 0.8053409
45 730 0.0129101 46268 0.8182510
46 658 0.0116367 46926 0.8298877
47 599 0.0105933 47525 0.8404810
48 579 0.0102396 48104 0.8507207
49 561 0.0099213 48665 0.8606420
50 539 0.0095322 49204 0.8701742
51 475 0.0084004 49679 0.8785746
52 449 0.0079406 50128 0.8865152
53 420 0.0074277 50548 0.8939429
54 437 0.0077284 50985 0.9016712
55 403 0.0071271 51388 0.9087983
56 343 0.0060660 51731 0.9148643
57 382 0.0067557 52113 0.9216199
58 359 0.0063489 52472 0.9279689
59 332 0.0058714 52804 0.9338403
60 304 0.0053762 53108 0.9392166
61 282 0.0049872 53390 0.9442037
62 260 0.0045981 53650 0.9488018
63 240 0.0042444 53890 0.9530462
64 268 0.0047396 54158 0.9577858
65 230 0.0040676 54388 0.9618534
66 258 0.0045627 54646 0.9664161
67 202 0.0035724 54848 0.9699885
68 204 0.0036077 55052 0.9735963
69 162 0.0028650 55214 0.9764612
70 180 0.0031833 55394 0.9796445
71 146 0.0025820 55540 0.9822265
72 134 0.0023698 55674 0.9845963
73 111 0.0019630 55785 0.9865594
74 93 0.0016447 55878 0.9882041
75 88 0.0015563 55966 0.9897604
76 74 0.0013087 56040 0.9910691
77 78 0.0013794 56118 0.9924485
78 76 0.0013441 56194 0.9937926
79 63 0.0011142 56257 0.9949067
80 52 0.0009196 56309 0.9958263
81 32 0.0005659 56341 0.9963923
82 32 0.0005659 56373 0.9969582
83 28 0.0004952 56401 0.9974534
84 32 0.0005659 56433 0.9980193
85 23 0.0004068 56456 0.9984260
86 19 0.0003360 56475 0.9987620
87 22 0.0003891 56497 0.9991511
88 12 0.0002122 56509 0.9993633
89 9 0.0001592 56518 0.9995225
90 3 0.0000531 56521 0.9995756
91 5 0.0000884 56526 0.9996640
92 5 0.0000884 56531 0.9997524
93 4 0.0000707 56535 0.9998231
94 2 0.0000354 56537 0.9998585
95 3 0.0000531 56540 0.9999116
96 3 0.0000531 56543 0.9999646
99 1 0.0000177 56544 0.9999823
101 1 0.0000177 56545 1.0000000
# Histograma
ggplot(data, aes(x = edad_1)) +
  geom_histogram(binwidth = 5, fill = "lightcoral", color = "black") +
  labs(title = "Histograma de Frecuencias - Edad", x = "Edad", y = "Frecuencia")
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_bin()`).

# Diagrama de Caja
ggplot(data, aes(x = edad_1)) +
  geom_boxplot(fill = "lightcoral") +
  labs(title = "Diagrama de Caja - Edad", x = "Edad")
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_boxplot()`).

# Medidas de tendencia central y dispersión
media_edad <- mean(data$edad_1, na.rm = TRUE)
desviacion_edad <- sd(data$edad_1, na.rm = TRUE)
moda_edad <- as.numeric(names(sort(table(data$edad_1), decreasing = TRUE)[1]))
sesgo_edad <- skewness(data$edad_1, na.rm = TRUE)
minimo_edad <- min(data$edad_1, na.rm = TRUE)
maximo_edad <- max(data$edad_1, na.rm = TRUE)
cuartiles_edad <- quantile(data$edad_1, probs = c(0.25, 0.5, 0.75), na.rm = TRUE)

medidas_edad <- data.frame(
  Media = media_edad,
  `Desviación Estándar` = desviacion_edad,
  Moda = moda_edad,
  Sesgo = sesgo_edad,
  Mínimo = minimo_edad,
  Máximo = maximo_edad,
  `1er Cuartil` = cuartiles_edad[1],
  Mediana = cuartiles_edad[2],
  `3er Cuartil` = cuartiles_edad[3]
)
kable(medidas_edad)
Media Desviación.Estándar Moda Sesgo Mínimo Máximo X1er.Cuartil Mediana X3er.Cuartil
25% 35.36413 12.69276 27 1.353733 18 101 26 32 41

Análisis Estadístico Bivariante

Para realizar el análisis de cruces de variables con sus respectivas distribuciones conjuntas y condicionales, utilizaremos las variables de la primera base de datos (EDV_2023.csv) que incluyen:

Provincia de Inscripción (prov_insc)

Sexo del Primer Cónyuge (sexo_1)

Edad del Primer Cónyuge (edad_1)

Año de Divorcio (anio_div)

Duración del Matrimonio (dur_mat)

Realizaremos el cruce entre:

Provincia de Inscripción (prov_insc) y Sexo del Primer Cónyuge (sexo_1).

Edad del Primer Cónyuge (edad_1) y Duración del Matrimonio (dur_mat).

#Cargar Datos
# Leer los datos (reemplaza 'EDV_2023.csv' con la ruta correcta de tu archivo)
data <- read.csv('EDV_2023.csv', sep=';', stringsAsFactors=FALSE)

Cruce de Variables Cualitativas: prov_insc y sexo_1

Distribución Conjunta

# Tabla de contingencia
tabla_contingencia <- table(data$prov_insc, data$sexo_1)
tabla_contingencia_df <- as.data.frame(tabla_contingencia)
names(tabla_contingencia_df) <- c('Provincia', 'Sexo', 'Frecuencia')

# Mostrar tabla de contingencia
tabla_contingencia_df

Interpretación: La tabla de contingencia muestra la distribución conjunta de las provincias de inscripción y el sexo del primer cónyuge. Esto permite identificar patrones y relaciones entre estas dos variables.

# Gráfico de Barras Apiladas
ggplot(tabla_contingencia_df, aes(x=Provincia, y=Frecuencia, fill=Sexo)) +
  geom_bar(stat='identity', position='stack') +
  labs(title='Distribución Conjunta de Provincia de Inscripción y Sexo del Primer Cónyuge', x='Provincia', y='Frecuencia')

### Distribución Condicional

# Distribución condicional de Sexo dado Provincia
condicional_sexo_dado_prov <- prop.table(tabla_contingencia, 1)
condicional_sexo_dado_prov_df <- as.data.frame(condicional_sexo_dado_prov)
names(condicional_sexo_dado_prov_df) <- c('Provincia', 'Sexo', 'Frecuencia Relativa')

# Mostrar tabla de distribución condicional
condicional_sexo_dado_prov_df

Interpretación: La tabla de distribución condicional muestra la proporción del sexo del primer cónyuge dado una provincia específica. Esto permite entender cómo se distribuye el sexo del primer cónyuge en función de la provincia de inscripción.

Cruce de Variables Cuantitativas: edad_1 y dur_mat

Distribución Conjunta

# Convertir columnas a numérico y remover NAs
data$edad_1 <- as.numeric(data$edad_1)
## Warning: NAs introduced by coercion
data$dur_mat <- as.numeric(data$dur_mat)
data_filtered <- data %>% filter(!is.na(edad_1) & !is.na(dur_mat))

# Crear tabla de frecuencias conjuntas
edad_dur_mat_cut <- data_filtered %>%
  mutate(edad_group = cut(edad_1, breaks=seq(0, max(edad_1, na.rm=TRUE), by=5), right=FALSE),
         dur_mat_group = cut(dur_mat, breaks=seq(0, max(dur_mat, na.rm=TRUE), by=5), right=FALSE))

tabla_frecuencias_conjunta <- table(edad_dur_mat_cut$edad_group, edad_dur_mat_cut$dur_mat_group)
tabla_frecuencias_conjunta_df <- as.data.frame(tabla_frecuencias_conjunta)
names(tabla_frecuencias_conjunta_df) <- c('Grupo de Edad', 'Grupo de Duración del Matrimonio', 'Frecuencia')

# Mostrar tabla de frecuencias conjunta
tabla_frecuencias_conjunta_df

Interpretación: La tabla de frecuencias conjunta muestra la distribución combinada de las edades y la duración del matrimonio. Esto permite identificar relaciones entre la edad al momento del matrimonio y la duración del mismo.

# Gráfico de Calor
ggplot(tabla_frecuencias_conjunta_df, aes(x=`Grupo de Edad`, y=`Grupo de Duración del Matrimonio`, fill=Frecuencia)) +
  geom_tile() +
  scale_fill_gradient(low="white", high="blue") +
  labs(title='Distribución Conjunta de Edad del Primer Cónyuge y Duración del Matrimonio', x='Grupo de Edad', y='Grupo de Duración del Matrimonio')

### Distribución Condicional

# Filtrar datos no nulos
data_filtered_cond <- data %>% filter(!is.na(edad_1) & !is.na(dur_mat))

# Crear tabla de frecuencias condicionales
edad_dur_cond <- data_filtered_cond %>%
  group_by(edad_1) %>%
  summarise(Media_Dur = mean(dur_mat, na.rm=TRUE),
            Mediana_Dur = median(dur_mat, na.rm=TRUE),
            DesvEst_Dur = sd(dur_mat, na.rm=TRUE))

# Mostrar tabla de frecuencias condicionales
edad_dur_cond

Interpretación: La tabla de frecuencias condicionales muestra la media, mediana y desviación estándar de la duración del matrimonio para cada grupo de edad del primer cónyuge. Esto permite entender cómo varía la duración del matrimonio según la edad al momento del divorcio.

#Estadística Multivariante

Análisis de Correlación Canónica

1. Selección de Variables

Para el ACC se seleccionarán las siguientes variables de la base de datos de divorcios (EDV_2023):

Variables Independientes (X):

Edad del Primer Cónyuge (edad_1): Edad del primer cónyuge en el momento del divorcio.

Nivel de Instrucción del Primer Cónyuge (niv_inst1): Nivel educativo alcanzado por el primer cónyuge.

Número de Hijos (hijos_1): Cantidad de hijos que tiene el primer cónyuge.

Área de Residencia (area_1): Área de residencia del primer cónyuge (Urbana o Rural).

Variables Dependientes (Y):

Duración del Matrimonio (dur_mat): Tiempo que duró el matrimonio en años.

Año del Divorcio (anio_div): Año en que se formalizó el divorcio.

2. Preparación de los Datos

Antes de realizar el ACC, es necesario limpiar y transformar los datos para asegurar que sean adecuados para el análisis.

3. Realización del Análisis de Correlación Canónica

# Cargar librerías necesarias
library(readr)
library(dplyr)

# Cargar la base de datos de divorcios
edv_data <- read.csv('EDV_2023.csv', sep=';', stringsAsFactors=FALSE)

# Convertir todas las columnas a texto para manejar "Sin información"
edv_data <- edv_data %>%
  mutate(across(everything(), as.character)) %>%
  mutate(across(everything(), ~na_if(., "Sin información")))

# Convertir columnas relevantes a sus tipos originales después de reemplazar "Sin información"
edv_data <- edv_data %>%
  mutate(
    edad_1 = as.numeric(edad_1),
    hijos_1 = as.numeric(hijos_1),
    dur_mat = as.numeric(dur_mat),
    anio_div = as.numeric(anio_div)
  )

# Convertir variables categóricas a factores
edv_data <- edv_data %>%
  mutate(
    niv_inst1 = as.factor(niv_inst1),
    area_1 = as.factor(area_1)
  )

# Seleccionar variables relevantes
variables_seleccionadas <- edv_data %>%
  dplyr::select(edad_1, niv_inst1, hijos_1, area_1, dur_mat, anio_div)

# Eliminar filas con valores faltantes
variables_limpias <- na.omit(variables_seleccionadas)

# Codificar variables categóricas
variables_limpias <- variables_limpias %>%
  mutate(
    niv_inst1 = as.numeric(niv_inst1),
    area_1 = as.numeric(area_1)
  )

# Definir variables independientes (X) y dependientes (Y)
X <- variables_limpias %>%
  dplyr::select(edad_1, niv_inst1, hijos_1, area_1)

Y <- variables_limpias %>%
  dplyr::select(dur_mat, anio_div)

# Calcular la matriz de correlación completa
correlation_matrix_complete <- cor(cbind(X, Y))

# Mostrar la matriz de correlación completa
correlation_matrix_complete
##                 edad_1    niv_inst1     hijos_1       area_1     dur_mat
## edad_1     1.000000000 -0.026578207 -0.06748657  0.007072953  0.71595539
## niv_inst1 -0.026578207  1.000000000  0.02351559  0.008611529 -0.09561121
## hijos_1   -0.067486565  0.023515589  1.00000000 -0.060925182 -0.04525959
## area_1     0.007072953  0.008611529 -0.06092518  1.000000000 -0.02345509
## dur_mat    0.715955391 -0.095611209 -0.04525959 -0.023455086  1.00000000
## anio_div  -0.042636483  0.019812532 -0.02021665 -0.010001037  0.04734171
##              anio_div
## edad_1    -0.04263648
## niv_inst1  0.01981253
## hijos_1   -0.02021665
## area_1    -0.01000104
## dur_mat    0.04734171
## anio_div   1.00000000

Análisis de Correlaciones entre las Variables

Correlaciones entre Variables Independientes (X):

Edad (edad_1) y Nivel de Instrucción (niv_inst1): Correlación muy baja (-0.027), indicando poca o ninguna relación.

Edad (edad_1) y Número de Hijos (hijos_1): Correlación baja (-0.067), sugiriendo una relación muy débil.

Nivel de Instrucción (niv_inst1) y Área de Residencia (area_1): Correlación casi nula (0.009), indicando poca o ninguna relación entre la educación y el área de residencia.

Correlaciones entre Variables Dependientes (Y):

Duración del Matrimonio (dur_mat) y Año del Divorcio (anio_div): Correlación muy baja (0.047), lo que sugiere que la duración del matrimonio tiene poca relación con el año del divorcio en este conjunto de datos.

Correlaciones Cruzadas entre Variables Independientes y Dependientes:

Edad (edad_1) y Duración del Matrimonio (dur_mat): Correlación fuerte (0.716), lo que sugiere que la edad del primer cónyuge está fuertemente relacionada con la duración del matrimonio.

Nivel de Instrucción (niv_inst1) y Duración del Matrimonio (dur_mat): Correlación negativa baja (-0.096), indicando que niveles más bajos de instrucción podrían estar levemente asociados con matrimonios más largos.

Otras Correlaciones: Las otras correlaciones cruzadas son muy bajas, sugiriendo que no hay relaciones significativas entre estas variables y las variables dependientes (dur_mat y anio_div).

Evaluación de la Idoneidad para Realizar el ACC

La fuerte correlación entre la edad del primer cónyuge (edad_1) y la duración del matrimonio (dur_mat) sugiere que podría ser útil realizar un Análisis de Correlación Canónica (ACC). Aunque la mayoría de las otras correlaciones son bajas, el ACC puede aún revelar combinaciones lineales de variables que explican mejor la relación entre los conjuntos de variables independientes y dependientes.

Conclusión

Podemos proceder con el Análisis de Correlación Canónica (ACC) porque existe una relación significativa entre algunas de las variables, particularmente entre la edad del primer cónyuge y la duración del matrimonio. Este análisis puede ayudarnos a descubrir combinaciones de variables que expliquen mejor las variaciones en las variables dependientes.

Ahora que hemos confirmado la idoneidad para realizar el ACC, aquí está el código para ejecutar el análisis:

## Realización del Análisis de Correlación Canónica

# Realizar el ACC utilizando la función cancor
cca_result <- cancor(X, Y)

# Mostrar las correlaciones canónicas
cca_result$cor
## [1] 0.72483304 0.02999001
# Mostrar las proporciones de varianza explicada
var_explained <- cca_result$cor^2
var_explained
## [1] 0.5253829373 0.0008994004

Interpretación de los Resultados del ACC

1. Correlaciones Canónicas

Primera Correlación Canónica (0.7248): Este valor indica que existe una correlación fuerte entre la primera combinación lineal de las variables independientes (X) y la primera combinación lineal de las variables dependientes (Y). Esto sugiere que hay una relación significativa entre las características demográficas y socioeconómicas del primer cónyuge (especialmente la edad) y la duración del matrimonio.

Segunda Correlación Canónica (0.0300): Esta correlación es extremadamente baja, lo que indica que en la segunda combinación de variables no hay una relación significativa entre los conjuntos de variables independientes y dependientes.

2. Proporción de Varianza Explicada

Primera Correlación Canónica (52.54%): Este resultado indica que la primera combinación lineal de las variables independientes explica aproximadamente el 52.54% de la varianza en la primera combinación lineal de las variables dependientes. Esto es una proporción significativa y sugiere que las variables independientes elegidas (particularmente la edad del primer cónyuge) son relevantes para explicar la duración del matrimonio y el año del divorcio.

Segunda Correlación Canónica (0.09%): La segunda correlación canónica apenas explica el 0.09% de la varianza, lo que es insignificante. Esto indica que después de considerar la primera correlación, no hay mucha información adicional que pueda ser capturada en la segunda dimensión canónica.

Conclusión

Significado de la Primera Correlación Canónica: La primera correlación canónica sugiere una relación sustancial entre las variables seleccionadas. Específicamente, la edad del primer cónyuge parece ser un factor importante que influye en la duración del matrimonio, y en menor medida, en el año del divorcio.

Relevancia del Análisis: La fuerte correlación canónica y la significativa proporción de varianza explicada por la primera combinación lineal de variables justifican la realización de este análisis. Nos indica que ciertas características de los cónyuges están fuertemente relacionadas con los resultados matrimoniales.

Segunda Correlación Canónica: La baja varianza explicada por la segunda correlación canónica indica que no hay relaciones adicionales significativas que no se hayan capturado ya en la primera correlación.

Análisis de Componentes Principales

# Cargar las librerías necesarias
library(readr)
library(dplyr)
library(ggplot2)
library(FactoMineR)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(psych)

# Convertir todas las columnas a texto para manejar "Sin información"
edv_data <- edv_data %>%
  mutate(across(everything(), as.character)) %>%
  mutate(across(everything(), ~na_if(., "Sin información")))

# Convertir columnas relevantes a numéricas
edv_data <- edv_data %>%
  mutate(
    edad_1 = as.numeric(edad_1),
    hijos_1 = as.numeric(hijos_1),
    dur_mat = as.numeric(dur_mat),
    anio_div = as.numeric(anio_div)
  )

# Eliminar filas con datos faltantes
edv_data <- na.omit(edv_data)

# Seleccionar variables para el ACP (aquí elegimos las variables continuas que tengan sentido)
data_acp <- dplyr::select(edv_data, edad_1, hijos_1, dur_mat, anio_div)

# Escalar las variables
data_acp_scaled <- scale(data_acp)

Realización del ACP

Realizamos el Análisis de Componentes Principales utilizando el conjunto de datos preparado.

# Realizar el ACP
acp_result <- PCA(data_acp_scaled, graph = FALSE)

# Resumen del ACP
summary(acp_result)
## 
## Call:
## PCA(X = data_acp_scaled, graph = FALSE) 
## 
## 
## Eigenvalues
##                        Dim.1   Dim.2   Dim.3   Dim.4
## Variance               1.728   1.014   0.982   0.276
## % of var.             43.191  25.358  24.551   6.900
## Cumulative % of var.  43.191  68.548  93.100 100.000
## 
## Individuals (the 10 first)
##              Dist    Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
## 1        |  1.008 |  0.954  0.003  0.895 |  0.306  0.000  0.092 |  0.041  0.000
## 2        |  3.411 |  3.354  0.034  0.967 | -0.499  0.001  0.021 | -0.194  0.000
## 3        |  2.270 | -0.842  0.002  0.138 | -1.491  0.012  0.432 | -1.418  0.011
## 4        |  3.426 |  3.357  0.034  0.960 | -0.493  0.001  0.021 | -0.186  0.000
## 5        |  0.656 | -0.303  0.000  0.214 | -0.240  0.000  0.134 | -0.492  0.001
## 6        |  1.674 | -1.527  0.007  0.832 | -0.112  0.000  0.004 | -0.546  0.002
## 7        |  0.793 |  0.391  0.000  0.243 | -0.257  0.000  0.105 | -0.400  0.001
## 8        |  1.019 |  0.878  0.002  0.743 | -0.315  0.001  0.095 | -0.385  0.001
## 9        |  0.888 |  0.494  0.001  0.310 | -0.319  0.001  0.129 | -0.451  0.001
## 10       |  1.400 | -0.558  0.001  0.159 | -0.830  0.004  0.351 | -0.913  0.004
##            cos2  
## 1         0.002 |
## 2         0.003 |
## 3         0.390 |
## 4         0.003 |
## 5         0.563 |
## 6         0.106 |
## 7         0.254 |
## 8         0.143 |
## 9         0.258 |
## 10        0.425 |
## 
## Variables
##             Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr   cos2  
## edad_1   |  0.924 49.425  0.854 | -0.094  0.874  0.009 |  0.010  0.009  0.000 |
## hijos_1  | -0.137  1.084  0.019 | -0.564 31.337  0.318 |  0.814 67.546  0.663 |
## dur_mat  |  0.924 49.436  0.854 | -0.017  0.028  0.000 |  0.093  0.872  0.009 |
## anio_div |  0.031  0.055  0.001 |  0.829 67.761  0.687 |  0.557 31.573  0.310 |
# Visualización del Scree Plot para ver la varianza explicada
fviz_eig(acp_result, addlabels = TRUE, ylim = c(0, 100))

#### Interpretación:

Los dos primeros componentes principales (Dim.1 y Dim.2) explican conjuntamente el 68.5% de la varianza total. Si incluimos el tercer componente (Dim.3), alcanzamos un 93.1% de la varianza explicada. Esto sugiere que los tres primeros componentes capturan la mayoría de la información en los datos, por lo que podrían ser suficientes para interpretar los patrones en los datos.

Variables y Componentes

Dim.1 está fuertemente influenciado por edad_1 y dur_mat, que tienen una cos2 alta, indicando que estas variables están bien representadas por el primer componente.

Dim.2 tiene una influencia significativa de hijos_1 y anio_div, lo que indica que estas variables son importantes en el segundo componente.

Dim.3 también tiene una influencia notable de hijos_1 y anio_div.

Creación de Biplot

Biplot sin Rotación

# Realizar el Análisis de Componentes Principales (ACP)
acp_result <- PCA(data_acp_scaled, graph = FALSE)

# Definir la variable 'individuals' con las coordenadas de los individuos en el espacio de los componentes principales
individuals <- as.data.frame(acp_result$ind$coord)

# Definir la variable 'variables' con las coordenadas de las variables en el espacio de los componentes principales
variables <- as.data.frame(acp_result$var$coord)

# Etiquetar solo un subconjunto de individuos
subset_individuals <- individuals[sample(nrow(individuals), 100), ]  # Muestra aleatoria de 100 individuos

# Crear el Biplot con etiquetas limitadas
ggplot(individuals, aes(x = Dim.1, y = Dim.2)) +
  geom_point(aes(color = "Individuos"), size = 2) +
  geom_text_repel(data = subset_individuals, aes(label = rownames(subset_individuals)), size = 3) +
  geom_segment(data = variables, aes(x = 0, y = 0, xend = Dim.1, yend = Dim.2),
               arrow = arrow(length = unit(0.3, "cm")), color = "blue") +
  geom_text(data = variables, aes(x = Dim.1, y = Dim.2, label = rownames(variables)),
            color = "blue", vjust = -1, size = 4) +
  labs(title = "Biplot sin Rotación (Etiquetas Limitadas)", x = "Dim.1", y = "Dim.2") +
  theme_minimal()
## Warning: ggrepel: 88 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

## Biplot sin Rotación con Muestra Reducida

# Reducir la muestra de individuos
individuals_sample <- individuals[sample(nrow(individuals), 500), ]  # Muestra aleatoria de 500 individuos

# Crear el Biplot con una muestra reducida
ggplot(individuals_sample, aes(x = Dim.1, y = Dim.2)) +
  geom_point(aes(color = "Individuos"), size = 2) +
  geom_text_repel(data = subset_individuals, aes(label = rownames(subset_individuals)), size = 3) +
  geom_segment(data = variables, aes(x = 0, y = 0, xend = Dim.1, yend = Dim.2),
               arrow = arrow(length = unit(0.3, "cm")), color = "blue") +
  geom_text(data = variables, aes(x = Dim.1, y = Dim.2, label = rownames(variables)),
            color = "blue", vjust = -1, size = 4) +
  labs(title = "Biplot sin Rotación (Muestra Reducida)", x = "Dim.1", y = "Dim.2") +
  theme_minimal()
## Warning: ggrepel: 71 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

En este Biplot, podemos observar lo siguiente:

Vectores de las Variables:

Los vectores (edad_1, dur_mat, hijos_1, anio_div) indican la dirección y la contribución de cada variable en los componentes principales.

edad_1 y dur_mat están fuertemente alineados con el primer componente principal (Dim.1), lo que refuerza la idea de que estas variables están altamente correlacionadas y son las que más contribuyen a la varianza explicada por el primer componente.

hijos_1 y anio_div parecen tener una mayor influencia en la segunda dimensión (Dim.2), aunque con menor contribución en comparación con edad_1 y dur_mat.

Distribución de los Individuos:

Los puntos representan individuos (en este caso, con la muestra reducida).

La dispersión de los individuos en el espacio de los componentes muestra que la mayoría están agrupados alrededor del centro del gráfico, con algunos individuos alejados que podrían ser considerados como outliers o puntos extremos.

Relaciones entre las Variables:

Las variables edad_1 y dur_mat están positivamente correlacionadas entre sí, lo que se observa porque los vectores están alineados en la misma dirección.

hijos_1 tiene una orientación casi perpendicular a edad_1 y dur_mat, lo que sugiere que no está muy correlacionado con estas variables.

Análisis Factorial

# Cargar librerías necesarias
library(psych)
library(corrplot)
## corrplot 0.94 loaded
library(ggplot2)
library(GGally)
library(FactoMineR)
library(factoextra)

# Cargar los datos (usaremos la misma base de datos que utilizaste previamente)
data <- read.csv('EDV_2023.csv', sep=';', stringsAsFactors = FALSE)

# Limpieza y preparación de datos (ajusta según tus variables de interés)
data <- data %>%
  mutate(across(everything(), as.character)) %>%
  mutate(across(everything(), ~na_if(., "Sin información"))) %>%
  mutate(
    edad_1 = as.numeric(edad_1),
    hijos_1 = as.numeric(hijos_1),
    dur_mat = as.numeric(dur_mat),
    anio_div = as.numeric(anio_div)
  )

# Eliminar filas con datos faltantes
data <- na.omit(data)

# Seleccionar variables para el Análisis Factorial sin utilizar select directamente en la pipe
data_af <- data[, c("edad_1", "hijos_1", "dur_mat", "anio_div")]

# Escalar las variables
data_af_scaled <- scale(data_af)

Validación de la Modelización

Antes de realizar el análisis factorial, validamos la idoneidad de los datos con las pruebas KMO y de Bartlett.

# Prueba de KMO
kmo_result <- KMO(data_af_scaled)
kmo_result
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = data_af_scaled)
## Overall MSA =  0.49
## MSA for each item = 
##   edad_1  hijos_1  dur_mat anio_div 
##     0.50     0.73     0.50     0.16
# Prueba de esfericidad de Bartlett
bartlett_test <- cortest.bartlett(cor(data_af_scaled))
## Warning in cortest.bartlett(cor(data_af_scaled)): n not specified, 100 used
bartlett_test
## $chisq
## [1] 72.08798
## 
## $p.value
## [1] 1.524106e-13
## 
## $df
## [1] 6

El p-valor es extremadamente bajo, lo que indica que la matriz de correlación es significativamente diferente de la matriz identidad. Esto sugiere que las variables están correlacionadas y, en principio, podría ser adecuado realizar un análisis factorial.

Realización del Análisis Factorial

# Realizar el Análisis Factorial sin rotación
af_result <- fa(data_af_scaled, nfactors = 2, rotate = "none", fm = "ml")

# Extraer las coordenadas de los factores y las variables
factor_scores <- as.data.frame(af_result$scores)
loadings <- as.data.frame(af_result$loadings[,1:2])

# Crear el Biplot
ggplot(factor_scores, aes(x = ML1, y = ML2)) +
  geom_point(aes(color = "Individuos")) +
  geom_segment(data = loadings, aes(x = 0, y = 0, xend = ML1, yend = ML2), 
               arrow = arrow(length = unit(0.3, "cm")), color = "red") +
  geom_text(data = loadings, aes(x = ML1, y = ML2, label = rownames(loadings)), 
            color = "red", vjust = -1, size = 4) +
  labs(title = "Análisis Factorial sin Rotación", x = "Factor 1", y = "Factor 2") +
  theme_minimal()

## Biplot Mejorado para Análisis Factorial sin Rotación


# Realizar el Análisis Factorial sin rotación
af_result <- fa(data_af_scaled, nfactors = 2, rotate = "none", fm = "ml")

# Extraer las coordenadas de los factores y las variables
factor_scores <- as.data.frame(af_result$scores)
loadings <- as.data.frame(af_result$loadings[,1:2])

# Reducir la muestra de individuos para un gráfico más claro
set.seed(123)  # Para reproducibilidad
factor_scores_sample <- factor_scores[sample(nrow(factor_scores), 300), ]  # Muestra de 300 individuos

# Crear el Biplot con ajustes de visibilidad
ggplot(factor_scores_sample, aes(x = ML1, y = ML2)) +
  geom_point(aes(color = "Individuos"), size = 2, alpha = 0.6) +  # Puntos con transparencia
  geom_segment(data = loadings, aes(x = 0, y = 0, xend = ML1, yend = ML2), 
               arrow = arrow(length = unit(0.3, "cm")), color = "red", linewidth = 1.5) +
  geom_text(data = loadings, aes(x = ML1, y = ML2, label = rownames(loadings)), 
            color = "red", vjust = -1.5, hjust = 1.5, size = 5) +  # Ajuste manual de etiquetas
  labs(title = "Análisis Factorial sin Rotación", x = "Factor 1", y = "Factor 2") +
  theme_minimal() +
  theme(legend.position = "none") +
  xlim(min(loadings$ML1) - 0.5, max(loadings$ML1) + 0.5) +  # Ajustar los límites del eje X
  ylim(min(loadings$ML2) - 0.5, max(loadings$ML2) + 0.5)     # Ajustar los límites del eje Y
## Warning: Removed 182 rows containing missing values or values outside the scale range
## (`geom_point()`).

En el gráfico original, teníamos una gran cantidad de puntos que representaban a los individuos. Esto causaba una saturación visual que hacía difícil apreciar las flechas que representan las cargas de las variables (edad_1, dur_mat, hijos_1, anio_div).

Los puntos estaban tan juntos que las flechas y las etiquetas de las variables no se podían diferenciar fácilmente, lo que dificultaba la interpretación del gráfico.

Para mejorar la claridad del gráfico, se decidió reducir el número de puntos representados en el gráfico.

Se seleccionó una muestra aleatoria de 300 individuos (de los muchos que estaban presentes) para que los puntos no saturen la visualización, permitiendo que las flechas de las variables sean más visibles.

Esta técnica no afecta significativamente la interpretación general del análisis factorial porque estamos interesados en la relación entre las variables más que en la dispersión individual de los puntos.

Interpretación del Gráfico Resultante

Cargas Factoriales y Variables:

edad_1: Está fuertemente cargada en el Factor 1, lo que indica que esta variable es muy influyente en el primer factor. Esto sugiere que edad_1 explica una parte significativa de la varianza asociada con este factor.

dur_mat: Similar a edad_1, dur_mat también está fuertemente asociada con el Factor 1, lo que sugiere que la duración del matrimonio es una variable importante en este factor.

hijos_1 y anio_div: Estas dos variables tienen cargas más cercanas al origen y no están tan claramente alineadas con uno de los factores, lo que indica que tienen una menor influencia o que su contribución está dividida entre los factores.

Relación entre Factores y Variables:

Factor 1 parece estar relacionado con características temporales o demográficas, como la edad y la duración del matrimonio.

Factor 2 no tiene una carga clara de las variables seleccionadas, lo que puede indicar que se requieren más factores o que las variables no se dividen claramente en dos factores.

Círculo Unitario para Análisis Factorial

library(ggplot2)
library(ggforce)
library(ggrepel)

# Extraer las cargas factoriales de las variables
loadings <- as.data.frame(af_result$loadings[,1:2])
colnames(loadings) <- c("Factor1", "Factor2")

# Crear el Círculo Unitario con vectores
ggplot(loadings, aes(x = Factor1, y = Factor2)) +
  geom_segment(aes(x = 0, y = 0, xend = Factor1, yend = Factor2), 
               arrow = arrow(length = unit(0.3, "cm")), color = "red", size = 1) +
  geom_text_repel(aes(label = rownames(loadings)), color = "red", size = 5) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray") +
  ggforce::geom_circle(aes(x0 = 0, y0 = 0, r = 1), color = "black", inherit.aes = FALSE) + 
  coord_fixed() +
  labs(title = "Círculo Unitario", x = "Factor 1", y = "Factor 2") +
  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.
## Warning in ggforce::geom_circle(aes(x0 = 0, y0 = 0, r = 1), color = "black", : All aesthetics have length 1, but the data has 4 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
##   a single row.

El gráfico del Círculo Unitario muestra cómo las variables seleccionadas (edad_1, dur_mat, hijos_1, anio_div) se proyectan en el espacio de los dos factores principales obtenidos del Análisis Factorial.

1. Cargas de las Variables:

dur_mat (Duración del Matrimonio): Este vector está bastante cerca del borde del círculo y se encuentra en el cuadrante positivo del Factor 1. Esto indica que dur_mat está fuertemente correlacionado con el Factor 1, y tiene una influencia significativa en este factor.

edad_1 (Edad del Primer Cónyuge): Similar a dur_mat, este vector también está cerca del borde del círculo y en el lado positivo del Factor 1. Esto sugiere que edad_1 también está fuertemente correlacionada con el Factor 1 y contribuye significativamente a este factor.

hijos_1 (Número de Hijos): Este vector es más corto y está más cerca del origen, lo que indica una correlación más débil con ambos factores. Su posición cerca del origen sugiere que hijos_1 no está fuertemente correlacionado con ninguno de los factores.

anio_div (Año de Divorcio): Similar a hijos_1, este vector es corto y está cerca del origen, indicando una baja correlación con los factores. Esto sugiere que anio_div no contribuye significativamente a ninguno de los factores.

2. Relación entre las Variables:

dur_mat y edad_1: Estos dos vectores están alineados en la misma dirección en el espacio del Factor 1, lo que indica que están positivamente correlacionados entre sí. Esto tiene sentido, ya que la edad y la duración del matrimonio pueden estar relacionadas en contextos demográficos.

hijos_1 y anio_div: Estos vectores están más dispersos y tienen una menor correlación con los factores principales. Esto sugiere que estas variables no están tan bien representadas por los factores obtenidos.

3. Interpretación General del Gráfico:

Factor 1 (Eje X): Parece representar un factor relacionado con la “edad” y la “duración del matrimonio”, dado que edad_1 y dur_mat están fuertemente asociados con este factor.

Factor 2 (Eje Y): No parece estar tan claramente definido por las variables presentes, ya que ninguna de las variables tiene una fuerte carga en esta dimensión. Esto sugiere que los datos pueden requerir más factores o que las variables seleccionadas no capturan bien la varianza explicada por el segundo factor.

Escalado Multidimensional

# Cargar las librerías necesarias
library(ggplot2)
library(MASS)  # Para realizar MDS usando isoMDS
library(ggrepel)
library(cluster)  # Para realizar clustering

# Paso 1: Cargar los datos desde el archivo CSV
data <- read.csv('EDV_2023.csv', sep = ';', stringsAsFactors = FALSE)

# Paso 2: Seleccionar las variables de interés
data_af <- data.frame(
  edad_1 = as.numeric(data$edad_1),    # Edad del Primer Cónyuge
  dur_mat = as.numeric(data$dur_mat),  # Duración del Matrimonio
  hijos_1 = as.numeric(data$hijos_1),  # Número de Hijos
  anio_div = as.numeric(data$anio_div) # Año de Divorcio
)
## Warning in data.frame(edad_1 = as.numeric(data$edad_1), dur_mat =
## as.numeric(data$dur_mat), : NAs introduced by coercion
## Warning in data.frame(edad_1 = as.numeric(data$edad_1), dur_mat =
## as.numeric(data$dur_mat), : NAs introduced by coercion
# Remover filas con valores NA
data_af <- na.omit(data_af)

# Paso 3: Seleccionar una muestra más pequeña de 30 observaciones
set.seed(123)  # Para reproducibilidad
data_sample <- data_af[sample(nrow(data_af), 30), ]

# Paso 4: Escalar los datos
data_af_scaled <- scale(data_sample)

# Paso 5: Calcular la matriz de distancias usando distancia euclidiana
dist_matrix <- dist(data_af_scaled, method = "euclidean")

# Paso 6: Realizar MDS con isoMDS
mds_result <- isoMDS(dist_matrix, k = 2)
## initial  value 13.014230 
## iter   5 value 8.977331
## final  value 8.931464 
## converged
# Paso 7: Extraer las coordenadas de los puntos
mds_coords <- as.data.frame(mds_result$points)
colnames(mds_coords) <- c("Dim1", "Dim2")

# Paso 8: Realizar Clustering para Agrupaciones
clusters <- kmeans(mds_coords, centers = 5)$cluster  # Cambia 'centers' según el número de grupos deseados
mds_coords$Cluster <- as.factor(clusters)

# Paso 9: Crear el Biplot con Agrupaciones
ggplot(mds_coords, aes(x = Dim1, y = Dim2, label = rownames(mds_coords))) +
  geom_point(aes(color = Cluster), size = 3) +
  geom_text_repel(size = 3, color = "red") +
  stat_ellipse(aes(color = Cluster), type = "norm", linetype = 2) +  # Dibujar elipses alrededor de los clusters
  labs(title = "Biplot del Escalado Multidimensional (isoMDS) con Agrupaciones", 
       x = "Dimensión 1", y = "Dimensión 2") +
  theme_minimal()
## Too few points to calculate an ellipse
## Warning: The following aesthetics were dropped during statistical transformation: label.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_path()`).
## Warning: ggrepel: 4 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

# Paso 9: Estimación de Stress
mds_stress <- mds_result$stress / 100
cat("Estimación de Stress:", mds_stress, "\n")
## Estimación de Stress: 0.08931464

Dado que las variables utilizadas están directamente relacionadas con características clave de las parejas divorciadas, el MDS proyecta estas relaciones en dos dimensiones:

Dimensiones del MDS:

Dimensión 1 y Dimensión 2: Estas son las dos dimensiones principales que resultan del MDS. Representan una proyección de las distancias originales en un espacio de menor dimensión, de manera que las distancias entre puntos en este gráfico se aproximan lo mejor posible a las distancias en el espacio original.

Clusters:

Cluster 1 (Rojo): Este grupo incluye observaciones que están algo dispersas a lo largo de las Dimensiones 1 y 2, pero que tienden a estar más alejadas de otros grupos. Este grupo podría representar individuos con características distintivas en comparación con otros clusters.

Cluster 2 (Verde): Este grupo es más compacto y está posicionado en la parte superior derecha del gráfico. Las observaciones en este cluster pueden compartir características que las hacen más similares entre sí en comparación con otros grupos.

Cluster 3 (Azul): Este es un cluster bien definido y compacto en la parte izquierda del gráfico, lo que sugiere que las observaciones en este grupo son muy similares entre sí y diferentes de los demás clusters.

Cluster 4 (Amarillo): Este grupo tiene una dispersión moderada y está ubicado en la parte superior central del gráfico. Esto indica similitudes internas pero con alguna variabilidad dentro del grupo.

Cluster 5 (Morado): Este grupo es relativamente compacto y se encuentra en el centro del gráfico. Las observaciones en este grupo tienen características comunes pero son distintas de las de otros clusters.

Elipses de Agrupación:

Las elipses dibujadas alrededor de los clusters representan la variabilidad de las observaciones dentro de cada grupo. Cuanto más pequeña es la elipse, más similares son las observaciones dentro de ese cluster. Clusters con elipses más grandes pueden contener observaciones con mayor variabilidad interna.

Estimación de Stress:

Stress = 0.0893: Este valor indica la calidad del ajuste del MDS. Un valor de Stress por debajo de 0.1 es generalmente considerado como una indicación de un buen ajuste, lo que significa que las distancias entre puntos en el espacio reducido (el gráfico) reflejan bastante bien las distancias originales en el espacio de datos completo.

Análisis de Correspondencia

Utilizaremos la misma muestra que seleccionamos anteriormente, lo cual garantiza la consistencia entre los análisis.

Utilizaremos la función ca del paquete ca para realizar el análisis de correspondencia, que es adecuado para este tipo de visualización.

# Cargar las librerías necesarias
library(ggplot2)
library(ca)
library(ggrepel)

# Paso 1: Categorización de las Variables
data_sample$edad_cat <- cut(data_sample$edad_1, breaks = 4, labels = c("Joven", "Mediana", "Adulta", "Mayor"))
data_sample$dur_mat_cat <- cut(data_sample$dur_mat, breaks = 4, labels = c("Corto", "Mediano", "Largo", "Muy Largo"))

# Paso 2: Creación de la Tabla de Contingencia para dos variables
contingency_table <- table(data_sample$edad_cat, data_sample$dur_mat_cat)

# Paso 3: Realizar el Análisis de Correspondencia
ca_result <- ca(contingency_table)

# Extraer la varianza explicada por las dimensiones (en porcentaje)
dim1_var_explained <- summary(ca_result)$scree[1, 2]
dim2_var_explained <- summary(ca_result)$scree[2, 2]

# Paso 4: Preparar los datos para el gráfico
row_coords <- as.data.frame(ca_result$rowcoord)
colnames(row_coords) <- c("Dim1", "Dim2")
row_coords$category <- "Edad"
row_coords$name <- rownames(ca_result$rowcoord)

col_coords <- as.data.frame(ca_result$colcoord)
colnames(col_coords) <- c("Dim1", "Dim2")
col_coords$category <- "Duración Matrimonio"
col_coords$name <- rownames(ca_result$colcoord)

plot_data <- rbind(row_coords, col_coords)

# Paso 5: Generar el Biplot con símbolos diferentes y leyenda
ggplot(plot_data, aes(x = Dim1, y = Dim2, color = category, shape = category)) +
  geom_point(size = 4) +
  geom_text_repel(aes(label = name), size = 3, show.legend = FALSE) +
  scale_color_manual(values = c("Edad" = "blue", "Duración Matrimonio" = "red")) +
  scale_shape_manual(values = c("Edad" = 16, "Duración Matrimonio" = 17)) +
  labs(title = "Análisis de Correspondencia - Biplot",
       x = paste0("Dim 1 (", round(dim1_var_explained, 2), "%)"),
       y = paste0("Dim 2 (", round(dim2_var_explained, 2), "%)")) +
  theme_minimal() +
  theme(legend.position = "bottom") +
  guides(shape = guide_legend(title = "Categorías", nrow = 1),
         color = guide_legend(title = "Categorías", nrow = 1))

El gráfico muestra un Análisis de Correspondencia entre las categorías de Edad (en azul) y Duración del Matrimonio (en rojo). En la Dimensión 1 (que explica el 0.67% de la varianza), podemos observar que las categorías “Joven” y “Corto” están cercanas, lo que sugiere que las personas jóvenes tienden a tener matrimonios de corta duración. De manera similar, “Mayor” está alineada con “Largo”, indicando que los matrimonios de mayor duración están asociados con personas de mayor edad.

En la Dimensión 2 (que explica el 0.36% de la varianza), notamos una agrupación de “Muy Largo” con “Adulta”, lo que podría sugerir que los matrimonios muy largos están relacionados con personas adultas. Sin embargo, la varianza explicada es baja, lo que indica que estas relaciones son relativamente débiles y que otras dimensiones podrían ser necesarias para capturar completamente las asociaciones entre estas categorías.

Análisis de Conglomerados

Para realizar un Análisis de Conglomerados (o Clustering) correctamente, seguiremos estos pasos, asegurándonos de clasificar los elementos en subconjuntos homogéneos, como has solicitado. El proceso incluirá:

Selección de Variables: Usaremos variables relevantes de tu base de datos.

Normalización de Datos: Para asegurar que las variables tengan la misma escala.

Cálculo de la Distancia: Utilizaremos una métrica de distancia apropiada (por ejemplo, distancia euclidiana).

Método de Agrupamiento: Utilizaremos un método de agrupamiento jerárquico (como Ward’s method).

Generación del Dendrograma: Visualizaremos el dendrograma para identificar los conglomerados.

Corte del Dendrograma: Determinaremos el número óptimo de conglomerados y realizaremos el corte.

Asignación de Etiquetas: Cada elemento será asignado a un conglomerado.

Paso 1: Selección de Variables y Preparación de Datos

Vamos a utilizar algunas de las variables que ya hemos estado trabajando: edad_1, dur_mat, hijos_1, y anio_div.

Paso 2: Código para Realizar el Análisis de Conglomerados

A continuación, te proporciono el código que sigue los pasos mencionados:

# Cargar las librerías necesarias
library(ggplot2)
library(cluster)
library(factoextra)

# Paso 1: Selección de Variables y Filtrado de Datos utilizando subsetting
data_cluster <- data_sample[, c("edad_1", "dur_mat", "hijos_1", "anio_div")]

# Eliminar filas con NA
data_cluster <- na.omit(data_cluster)

# Paso 2: Normalización de Datos
data_scaled <- scale(data_cluster)

# Paso 3: Cálculo de la Matriz de Distancia
dist_matrix <- dist(data_scaled, method = "euclidean")

# Paso 4: Método de Agrupamiento Jerárquico (Ward's Method)
hc <- hclust(dist_matrix, method = "ward.D2")

# Paso 5: Generación del Dendrograma sin especificar colores
fviz_dend(hc, k = 4,                 # Corte en 4 grupos
          cex = 0.6,                 # Tamaño de la etiqueta
          color_labels_by_k = TRUE,  # Color por grupos
          rect = TRUE,               # Dibujar rectángulos alrededor de los clusters
          rect_fill = TRUE)
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## ℹ The deprecated feature was likely used in the factoextra package.
##   Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

# Paso 6: Corte del Dendrograma y Asignación de Etiquetas
clusters <- cutree(hc, k = 4)  # Aquí se define el número de conglomerados
data_cluster$Cluster <- as.factor(clusters)

# Paso 7: Visualización de los Conglomerados en un Biplot usando ggplot2 directamente
data_scaled <- as.data.frame(data_scaled)
data_scaled$Cluster <- as.factor(clusters)

ggplot(data_scaled, aes(x = edad_1, y = dur_mat, color = Cluster)) +
  geom_point(size = 3) +
  theme_minimal() +
  labs(title = "Visualización de los Conglomerados",
       x = "Edad del Primer Cónyuge (edad_1)",
       y = "Duración del Matrimonio (dur_mat)")

#### Análisis ##### Primer gráfico

El dendrograma generado muestra cómo se agrupan los elementos (observaciones) de tus datos en función de las variables seleccionadas (edad_1, dur_mat, hijos_1, anio_div). En este dendrograma:

Eje Vertical (Height): Representa la “distancia” o “disimilitud” entre los conglomerados cuando se agrupan. Cuanto más alto es el enlace entre dos grupos, más diferentes son esos grupos entre sí.

Eje Horizontal (Números en la parte inferior): Los números que aparecen en la parte inferior del dendrograma corresponden a las identificaciones de las observaciones en tu conjunto de datos. Estos números son simplemente los índices o identificadores de las observaciones en tu conjunto de datos reducido para este análisis.

Conglomerados: Los colores indican los diferentes conglomerados o grupos formados en el corte del dendrograma (se han identificado 4 grupos). Estos conglomerados son subconjuntos de observaciones que son más similares entre sí según las variables analizadas.

Segundo gráfico

El gráfico de dispersión muestra cómo las observaciones se agrupan en función de dos de las variables seleccionadas: Edad del Primer Cónyuge (edad_1) y Duración del Matrimonio (dur_mat):

Ejes:

El eje X representa la Edad del Primer Cónyuge (edad_1). El eje Y representa la Duración del Matrimonio (dur_mat). Colores:

Cada punto en el gráfico representa una observación, y el color del punto indica el conglomerado al que pertenece, según el análisis de clustering realizado. Distribución de Conglomerados:

Conglomerado 1 (Rojo): Observaciones con edades bajas y matrimonios de corta duración.

Conglomerado 2 (Verde): Observaciones con una amplia gama de edades y duraciones de matrimonio más variadas, pero generalmente cortas.

Conglomerado 3 (Cian): Observaciones con edades y duraciones de matrimonio mayores.

Conglomerado 4 (Violeta): Similar al conglomerado 2, pero con ligeras diferencias en la combinación de edad y duración del matrimonio.

Análisis Discriminante

Vamos a utilizar los conglomerados en el paso anterior como la variable de grupo en el análisis discriminante. Las variables predictoras serán las que usaste para formar los conglomerados (edad_1, dur_mat, hijos_1, anio_div).

# Cargar las librerías necesarias
library(MASS)
library(ggplot2)
library(factoextra)

# Paso 1: Preparar los datos
# Asegúrate de que 'data_cluster' y 'clusters' estén definidos en el entorno de trabajo

# Seleccionar solo las columnas necesarias para el análisis
data_lda <- data_cluster[, c("edad_1", "dur_mat", "hijos_1", "anio_div")]

# Añadir la variable de grupo (Cluster)
data_lda$Cluster <- as.factor(clusters)

# Paso 2: Realizar el Análisis Discriminante Lineal (LDA)
lda_model <- lda(Cluster ~ ., data = data_lda)

# Ver los resultados del modelo
lda_model
## Call:
## lda(Cluster ~ ., data = data_lda)
## 
## Prior probabilities of groups:
##         1         2         3         4 
## 0.1333333 0.5333333 0.2000000 0.1333333 
## 
## Group means:
##     edad_1 dur_mat hijos_1 anio_div
## 1 40.25000 13.7500     1.5 2023.000
## 2 41.62500 11.4375     0.0 2023.000
## 3 64.16667 32.0000     0.0 2022.667
## 4 45.25000 13.2500     0.0 2021.750
## 
## Coefficients of linear discriminants:
##                   LD1         LD2         LD3
## edad_1   -0.013932294  0.05462340 -0.04706919
## dur_mat  -0.007644009  0.09952963 -0.05960667
## hijos_1  -5.131409187  0.82754675  0.43606798
## anio_div -0.596182051 -2.12704506 -2.78785765
## 
## Proportion of trace:
##    LD1    LD2    LD3 
## 0.6100 0.2391 0.1509
# Paso 3: Predicciones y Proyección en el Espacio Discriminante
lda_values <- predict(lda_model)

# Paso 4: Visualización de los Grupos en el Espacio Discriminante
lda_data <- data.frame(lda_values$x, Cluster = data_lda$Cluster)

ggplot(lda_data, aes(x = LD1, y = LD2, color = Cluster)) +
  geom_point(size = 3) +
  theme_minimal() +
  labs(title = "Análisis Discriminante Lineal (LDA)",
       x = "Primera Discriminante Lineal (LD1)",
       y = "Segunda Discriminante Lineal (LD2)") +
  theme(legend.position = "right")

El análisis discriminante sugiere que el año del divorcio (anio_div) y la edad del primer cónyuge (edad_1) son las variables más influyentes para diferenciar entre los conglomerados principales (especialmente entre el Grupo 1 y los otros). La duración del matrimonio y el número de hijos también juegan un rol importante, particularmente en la separación entre los otros grupos. La proyección en el espacio de las discriminantes lineales muestra que los conglomerados están bien diferenciados, lo que indica un buen ajuste del modelo LDA a los datos.

Conclusiones

El presente análisis se centró en estudiar las características demográficas y sociales de las parejas que se casaron y se divorciaron en el año 2023. La población objetivo consistió en todas las parejas registradas en los registros civiles de diversas provincias del país. Para efectos de análisis y por motivos de representatividad y manejabilidad de los datos, se tomó una muestra de tamaño n = 30, seleccionada aleatoriamente para garantizar la validez estadística de los resultados.

Distribución Demográfica y Social:

La edad del primer cónyuge se identificó como una variable clave tanto en los matrimonios como en los divorcios. La distribución de edades mostró que la mayoría de los cónyuges se encuentran en el rango de 35 a 50 años, con una edad promedio de 44.65 años. La duración del matrimonio mostró una mediana de 14 años, lo que indica que la mayoría de los matrimonios duran entre 10 y 20 años.

Análisis de Correlaciones:

El análisis de correlación canónica reveló una fuerte relación entre la edad del primer cónyuge y la duración del matrimonio (correlación canónica = 0.7248). Esto sugiere que las personas que se casan a una edad mayor tienden a tener matrimonios más largos, una tendencia que se observó consistentemente en los datos.

Análisis Multivariado:

El Análisis de Componentes Principales (ACP) mostró que los dos primeros componentes principales explicaron el 68.5% de la varianza total en las variables estudiadas. Las variables edad del primer cónyuge y duración del matrimonio fueron las que más contribuyeron a la varianza explicada por el primer componente, lo que refuerza la importancia de estas variables en la caracterización de los matrimonios y divorcios.

Análisis Factorial:

En el Análisis Factorial, se identificaron dos factores principales que explican la varianza en los datos. El primer factor estuvo fuertemente influenciado por las variables edad del primer cónyuge y duración del matrimonio, mientras que el segundo factor mostró una menor claridad en su definición, indicando que podría haber otros factores latentes no capturados por las variables incluidas.

Escalado Multidimensional (MDS):

El MDS proyectó las relaciones entre las observaciones en dos dimensiones principales, revelando la existencia de cinco conglomerados claramente definidos. La estimación de stress fue de 0.0893, indicando un buen ajuste del modelo a los datos. Esto sugiere que las características demográficas y sociales de las parejas pueden ser agrupadas en subconjuntos homogéneos que presentan patrones similares.

Análisis de Correspondencia:

El Análisis de Correspondencia mostró asociaciones entre las categorías de edad y la duración del matrimonio. Por ejemplo, las personas jóvenes tienden a tener matrimonios de corta duración, mientras que las personas mayores están más asociadas con matrimonios de larga duración. Aunque la varianza explicada por las dimensiones principales fue baja, los patrones observados fueron coherentes con las tendencias demográficas esperadas.

Análisis de Conglomerados:

El Análisis de Conglomerados permitió clasificar las observaciones en cuatro grupos principales. Estos conglomerados mostraron diferencias significativas en términos de la edad del primer cónyuge y la duración del matrimonio. El dendrograma y el gráfico de dispersión confirmaron la existencia de grupos bien diferenciados, lo que indica una estructura clara en los datos.

Análisis Discriminante:

El Análisis Discriminante Lineal (LDA) confirmó que la edad del primer cónyuge y el año del divorcio son las variables más discriminantes entre los conglomerados identificados. El modelo logró separar adecuadamente los grupos en el espacio discriminante, mostrando una clara diferenciación entre los distintos perfiles de parejas estudiadas.

Finalmente, es importante destacar que, la utilización de diversas técnicas estadísticas multivariadas ha permitido una comprensión profunda de las características que diferencian a las parejas en función de su situación matrimonial.