# 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
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