# Cargar las bibliotecas necesarias
# install.packages("ca")
#install.packages("kableExtra")
library(readxl)
library(ggplot2)
library(dplyr)
library(ca)
library(knitr)
library(kableExtra)
# Leer los datos desde el archivo Excel
file_path <- "Base_Material_Vivienda.xlsx"
data <- read_excel(file_path, sheet = "Hoja1")
# Convertir variables categóricas a factores
data$`Tipo de vivienda` <- as.factor(data$`Tipo de vivienda`)
data$`Vivienda en buen estado` <- as.factor(data$`Vivienda en buen estado`)
data$`Material predominante en el techo` <- as.factor(data$`Material predominante en el techo`)
data$`Techo en buen estado` <- as.factor(data$`Techo en buen estado`)
data$`Material predominante en las paredes` <- as.factor(data$`Material predominante en las paredes`)
data$`Paredes en buen estado` <- as.factor(data$`Paredes en buen estado`)
data$`Material predominante en el piso` <- as.factor(data$`Material predominante en el piso`)
data$`Forma de tenencia de la vivienda` <- as.factor(data$`Forma de tenencia de la vivienda`)
data$`Tipo de alumbrado de la vivienda` <- as.factor(data$`Tipo de alumbrado de la vivienda`)
data$`Tiene la vivienda servicio de agua por cañería` <- as.factor(data$`Tiene la vivienda servicio de agua por cañería`)
data$`Tiene servicio sanitario de la vivienda` <- as.factor(data$`Tiene servicio sanitario de la vivienda`)
data$`Tipo de servicio sanitario que utiliza` <- as.factor(data$`Tipo de servicio sanitario que utiliza`)
# Gráficos
# Distribución de tipos de vivienda
ggplot(data, aes(x = `Tipo de vivienda`)) +
geom_bar() +
geom_text(stat = 'count', aes(label = ..count..), vjust = -0.3) +
theme_minimal() +
labs(title = "Distribución de Tipos de Vivienda", x = "Tipo de vivienda", y = "Frecuencia") +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.margin = margin(t = 20, r = 20, b = 20, l = 20))

# Estado de la vivienda en buen estado
ggplot(data, aes(x = `Vivienda en buen estado`)) +
geom_bar(fill = "skyblue") +
geom_text(stat = 'count', aes(label = ..count..), vjust = -0.3) +
theme_minimal() +
labs(title = "Estado de la Vivienda en Buen Estado", x = "Vivienda en buen estado", y = "Frecuencia") +
theme(plot.margin = margin(t = 30, r = 20, b = 20, l = 20))

# Material predominante en el techo y su estado
# Calcular proporciones para cada combinación de 'Material predominante en el techo' y 'Techo en buen estado'
data_prop <- data %>%
group_by(`Material predominante en el techo`, `Techo en buen estado`) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count))
# Crear un gráfico de barras apilado con etiquetas de valor
ggplot(data_prop, aes(x = `Material predominante en el techo`, y = prop, fill = `Techo en buen estado`)) +
geom_bar(stat = "identity", position = "fill") +
geom_text(aes(label = scales::percent(prop, accuracy = 1)),
position = position_fill(vjust = 0.5), size = 3) +
scale_y_continuous(labels = scales::percent) +
theme_minimal() +
labs(title = "Material Predominante en el Techo y su Estado", x = "Material predominante en el techo", y = "Porcentaje") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Material predominante en las paredes y su estado
# Calcular proporciones para cada combinación de 'Material predominante en las paredes' y 'Paredes en buen estado'
data_prop <- data %>%
group_by(`Material predominante en las paredes`, `Paredes en buen estado`) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count))
# Crear un gráfico de barras apilado con etiquetas de valor y escala en porcentajes
ggplot(data_prop, aes(x = `Material predominante en las paredes`, y = prop, fill = `Paredes en buen estado`)) +
geom_bar(stat = "identity", position = "fill") +
geom_text(aes(label = scales::percent(prop, accuracy = 1)),
position = position_fill(vjust = 0.5), size = 3) +
scale_y_continuous(labels = scales::percent) +
theme_minimal() +
labs(title = "Material Predominante en las Paredes y su Estado", x = "Material predominante en las paredes", y = "Porcentaje") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Material predominante en el piso
ggplot(data, aes(x = `Material predominante en el piso`)) +
geom_bar(fill = "lightgreen") +
geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5) +
theme_minimal() +
labs(title = "Material Predominante en el Piso", x = "Material predominante en el piso", y = "Frecuencia") +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.margin = margin(t = 30, r = 20, b = 20, l = 20))

# Forma de tenencia de la vivienda
# Calcular proporciones para cada categoría de 'Forma de tenencia de la vivienda'
data_prop <- data %>%
group_by(`Forma de tenencia de la vivienda`) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count))
# Crear un gráfico de barras con escala en porcentajes (0 a 50%) y etiquetas de valor
ggplot(data_prop, aes(x = `Forma de tenencia de la vivienda`, y = prop)) +
geom_bar(stat = "identity", fill = "lightcoral") +
geom_text(aes(label = scales::percent(prop, accuracy = 1)), vjust = -0.5) +
scale_y_continuous(labels = scales::percent, limits = c(0, 0.6)) +
theme_minimal() +
labs(title = "Forma de Tenencia de la Vivienda", x = "Forma de tenencia", y = "Porcentaje") +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.margin = margin(t = 30, r = 20, b = 20, l = 20))

# Tipo de alumbrado de la vivienda
# Calcular proporciones para cada categoría de 'Tipo de alumbrado de la vivienda'
data_prop <- data %>%
group_by(`Tipo de alumbrado de la vivienda`) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count))
# Crear un gráfico de barras con escala en porcentajes (0 a 100%) y etiquetas de valor con dos decimales
ggplot(data_prop, aes(x = `Tipo de alumbrado de la vivienda`, y = prop)) +
geom_bar(stat = "identity", fill = "lightblue") +
geom_text(aes(label = scales::percent(prop, accuracy = 0.01)), vjust = -0.5) +
scale_y_continuous(labels = scales::percent, limits = c(0, 1)) +
theme_minimal() +
labs(title = "Tipo de Alumbrado de la Vivienda", x = "Tipo de alumbrado", y = "Porcentaje") +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.margin = margin(t = 30, r = 20, b = 20, l = 20))

# Servicio de agua por cañería
# Calcular proporciones para cada categoría de 'Tiene la vivienda servicio de agua por cañería'
data_prop <- data %>%
group_by(`Tiene la vivienda servicio de agua por cañería`) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count))
# Crear un gráfico de barras con escala en porcentajes (0 a 45%) y etiquetas de valor con dos decimales
ggplot(data_prop, aes(x = `Tiene la vivienda servicio de agua por cañería`, y = prop)) +
geom_bar(stat = "identity", fill = "#8333FF") +
geom_text(aes(label = scales::percent(prop, accuracy = 0.01)), vjust = -0.5) +
scale_y_continuous(labels = scales::percent, limits = c(0, 0.45)) +
theme_minimal() +
labs(title = "Servicio de Agua por Cañería", x = "Servicio de agua", y = "Porcentaje") +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.margin = margin(t = 30, r = 20, b = 20, l = 20))

# Servicio sanitario de la vivienda
# Calcular proporciones para cada categoría de 'Tiene servicio sanitario de la vivienda'
data_prop <- data %>%
group_by(`Tiene servicio sanitario de la vivienda`) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count))
# Crear un gráfico de barras con escala en porcentajes (0 a 100%) y etiquetas de valor con dos decimales
ggplot(data_prop, aes(x = `Tiene servicio sanitario de la vivienda`, y = prop)) +
geom_bar(stat = "identity", fill = "lightpink") +
geom_text(aes(label = scales::percent(prop, accuracy = 0.01)), vjust = -0.5) +
scale_y_continuous(labels = scales::percent, limits = c(0, 1)) +
theme_minimal() +
labs(title = "Servicio Sanitario de la Vivienda", x = "Servicio sanitario", y = "Porcentaje") +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.margin = margin(t = 30, r = 20, b = 20, l = 20))

# Tipo de servicio sanitario que utiliza
# Calcular proporciones para cada categoría de 'Tipo de servicio sanitario que utiliza'
data_prop <- data %>%
group_by(`Tipo de servicio sanitario que utiliza`) %>%
summarise(count = n()) %>%
mutate(prop = count / sum(count))
# Crear un gráfico de barras con escala en porcentajes (0 a 45%) y etiquetas de valor con dos decimales
ggplot(data_prop, aes(x = `Tipo de servicio sanitario que utiliza`, y = prop)) +
geom_bar(stat = "identity", fill = "lightgray") +
geom_text(aes(label = scales::percent(prop, accuracy = 0.01)), vjust = -0.5) +
scale_y_continuous(labels = scales::percent, limits = c(0, 0.45)) +
theme_minimal() +
labs(title = "Tipo de Servicio Sanitario que Utiliza", x = "Tipo de servicio sanitario", y = "Porcentaje") +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.margin = margin(t = 30, r = 20, b = 20, l = 20))

# Mapa de calor para 'Tipo de vivienda' y 'Vivienda en buen estado'
library(reshape2)
# Crear la tabla de contingencia
contingency_table <- table(data$`Tipo de vivienda`, data$`Vivienda en buen estado`)
contingency_table_melt <- melt(contingency_table)
# Crear el mapa de calor con etiquetas del eje horizontal ajustadas
ggplot(contingency_table_melt, aes(Var1, Var2, fill = value)) +
geom_tile() +
theme_minimal() +
labs(title = "Mapa de Calor del Estado de la Vivienda por Tipo de Vivienda", x = "Tipo de vivienda", y = "Vivienda en buen estado") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Tabla de contingencia para 'Tipo de vivienda' y 'Vivienda en buen estado'
# Crear la tabla de contingencia
contingency_table <- table(data$`Tipo de vivienda`, data$`Vivienda en buen estado`)
# Convertir la tabla a un dataframe
contingency_df <- as.data.frame.matrix(contingency_table)
# Crear una tabla profesional
contingency_df %>%
kable("html", caption = "Tabla de Contingencia: Tipo de Vivienda vs. Estado de la Vivienda") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = F,
position = "center") %>%
column_spec(1, bold = T, color = "white", background = "black") %>%
row_spec(0, bold = T, color = "white", background = "black")
Tabla de Contingencia: Tipo de Vivienda vs. Estado de la Vivienda
|
|
No
|
Sí
|
|
Apartamento
|
4
|
205
|
|
Casa improvisada
|
0
|
0
|
|
Casa privada o independiente
|
5074
|
52773
|
|
Condominio
|
25
|
193
|
|
Pieza en un mesón
|
47
|
414
|
|
Pieza en una casa
|
132
|
1036
|
|
Rancho
|
14
|
29
|
# Realizar la prueba exacta de Fisher con simulación de Monte Carlo
fisher.test(contingency_table, simulate.p.value = TRUE, B = 1e6)
##
## Fisher's Exact Test for Count Data with simulated p-value (based on
## 1e+06 replicates)
##
## data: contingency_table
## p-value = 1e-06
## alternative hypothesis: two.sided