# Instalación y carga de paquetes
pkg <- c("tidyverse", "ggcorrplot", "patchwork", "kableExtra")
inst <- pkg[!sapply(pkg, requireNamespace, quietly = TRUE)]
if(length(inst) > 0) install.packages(inst)
lapply(pkg, library, character.only = TRUE)
## [[1]]
##  [1] "lubridate" "forcats"   "stringr"   "dplyr"     "purrr"     "readr"    
##  [7] "tidyr"     "tibble"    "ggplot2"   "tidyverse" "stats"     "graphics" 
## [13] "grDevices" "utils"     "datasets"  "methods"   "base"     
## 
## [[2]]
##  [1] "ggcorrplot" "lubridate"  "forcats"    "stringr"    "dplyr"     
##  [6] "purrr"      "readr"      "tidyr"      "tibble"     "ggplot2"   
## [11] "tidyverse"  "stats"      "graphics"   "grDevices"  "utils"     
## [16] "datasets"   "methods"    "base"      
## 
## [[3]]
##  [1] "patchwork"  "ggcorrplot" "lubridate"  "forcats"    "stringr"   
##  [6] "dplyr"      "purrr"      "readr"      "tidyr"      "tibble"    
## [11] "ggplot2"    "tidyverse"  "stats"      "graphics"   "grDevices" 
## [16] "utils"      "datasets"   "methods"    "base"      
## 
## [[4]]
##  [1] "kableExtra" "patchwork"  "ggcorrplot" "lubridate"  "forcats"   
##  [6] "stringr"    "dplyr"      "purrr"      "readr"      "tidyr"     
## [11] "tibble"     "ggplot2"    "tidyverse"  "stats"      "graphics"  
## [16] "grDevices"  "utils"      "datasets"   "methods"    "base"
# Importar archivo CSV
df <- read_csv("das.csv")

# Vista rápida
glimpse(df)
## Rows: 545
## Columns: 13
## $ price            <dbl> 13300000, 12250000, 12250000, 12215000, 11410000, 108…
## $ area             <dbl> 7420, 8960, 9960, 7500, 7420, 7500, 8580, 16200, 8100…
## $ bedrooms         <dbl> 4, 4, 3, 4, 4, 3, 4, 5, 4, 3, 3, 4, 4, 4, 3, 4, 4, 3,…
## $ bathrooms        <dbl> 2, 4, 2, 2, 1, 3, 3, 3, 1, 2, 1, 3, 2, 2, 2, 1, 2, 2,…
## $ stories          <dbl> 3, 4, 2, 2, 2, 1, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 4,…
## $ mainroad         <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes…
## $ guestroom        <chr> "no", "no", "no", "no", "yes", "no", "no", "no", "yes…
## $ basement         <chr> "no", "no", "yes", "yes", "yes", "yes", "no", "no", "…
## $ hotwaterheating  <chr> "no", "no", "no", "no", "no", "no", "no", "no", "no",…
## $ airconditioning  <chr> "yes", "yes", "no", "yes", "yes", "yes", "yes", "no",…
## $ parking          <dbl> 2, 3, 2, 3, 2, 2, 2, 0, 2, 1, 2, 2, 1, 2, 0, 2, 1, 2,…
## $ prefarea         <chr> "yes", "no", "yes", "yes", "no", "yes", "yes", "no", …
## $ furnishingstatus <chr> "furnished", "furnished", "semi-furnished", "furnishe…

Punto 1 - Descripción del conjunto de datos

El conjunto de datos DAS contiene información relacionada con diversas variables cuantitativas y cualitativas.
Su exploración inicial permite identificar los tipos de datos y la presencia de posibles valores faltantes o inconsistencias.

# Resumen general
n_rows <- nrow(df)
n_cols <- ncol(df)
cat("El conjunto de datos contiene", n_rows, "filas y", n_cols, "columnas.\n")
## El conjunto de datos contiene 545 filas y 13 columnas.
# Tipo de variable y valores únicos
resumen <- tibble(
  Variable = names(df),
  Tipo = sapply(df, function(x) class(x)[1]),
  Unicos = sapply(df, function(x) length(unique(na.omit(x))))
)
kable(resumen, caption = "Resumen de las variables del dataset") %>%
  kable_styling(full_width = FALSE)
Resumen de las variables del dataset
Variable Tipo Unicos
price numeric 219
area numeric 284
bedrooms numeric 6
bathrooms numeric 4
stories numeric 4
mainroad character 2
guestroom character 2
basement character 2
hotwaterheating character 2
airconditioning character 2
parking numeric 4
prefarea character 2
furnishingstatus character 3

Interpretación:
El dataset presenta una combinación de variables numéricas y categóricas, lo que permite un análisis mixto. La cantidad de registros es suficiente para explorar relaciones significativas entre las variables. Antes del análisis, se debe verificar la presencia de datos faltantes o erróneos.


Punto 2 - Estadísticas descriptivas

A continuación, se presentan las principales medidas estadísticas de las variables numéricas del conjunto de datos.

num_vars <- df %>% select(where(is.numeric))
stats <- num_vars %>%
  summarise_all(list(
    Media = mean,
    Mediana = median,
    Mínimo = min,
    Máximo = max,
    DesvEst = sd
  ), na.rm = TRUE) %>%
  pivot_longer(everything(), names_to = c("Variable", ".value"), names_sep = "_")

kable(stats, caption = "Estadísticas descriptivas de las variables numéricas") %>%
  kable_styling(full_width = FALSE)
Estadísticas descriptivas de las variables numéricas
Variable Media Mediana Mínimo Máximo DesvEst
price 4.766729e+06 4340000 1750000 13300000 1.870440e+06
area 5.150541e+03 4600 1650 16200 2.170141e+03
bedrooms 2.965138e+00 3 1 6 7.380639e-01
bathrooms 1.286239e+00 1 1 4 5.024696e-01
stories 1.805505e+00 2 1 4 8.674925e-01
parking 6.935780e-01 0 0 3 8.615858e-01

Interpretación:
Los resultados muestran la variabilidad de las variables cuantitativas. Se observan diferencias notables entre los valores mínimos y máximos, indicando posible dispersión. La media y la mediana permiten analizar la tendencia central, mientras que la desviación estándar refleja la dispersión general de los datos.


Punto 3 - Matriz de correlación (ggcorrplot)

Se analizan las relaciones entre las variables numéricas mediante una matriz de correlación visual.

corr <- cor(num_vars, use = "pairwise.complete.obs")
ggcorrplot(corr, lab = TRUE, colors = c("red", "white", "blue"),
           title = "Matriz de Correlación - Dataset DAS",
           ggtheme = theme_minimal())

Interpretación:
Se observan correlaciones positivas y negativas entre algunas variables numéricas. Las correlaciones altas y positivas indican que las variables tienden a crecer conjuntamente, mientras que las negativas señalan relaciones inversas. Esto ayuda a identificar posibles dependencias y redundancias en el dataset.


Punto 4 - Análisis bivariado (dos variables numéricas)

Se analiza la relación entre dos variables numéricas mediante un gráfico de dispersión con línea de regresión lineal.

num_names <- names(num_vars)
xvar <- num_names[1]
yvar <- num_names[2]

ggplot(df, aes_string(x = xvar, y = yvar)) +
  geom_point(color = "steelblue", alpha = 0.6) +
  geom_smooth(method = "lm", color = "red", se = TRUE) +
  labs(title = paste("Relación entre", xvar, "y", yvar),
       x = xvar, y = yvar) +
  theme_minimal()

Interpretación:
El gráfico permite identificar tendencias entre las dos variables seleccionadas. Si la pendiente de la recta es positiva, existe una relación directa; si es negativa, una relación inversa. Esto facilita evaluar la fuerza y dirección de la relación lineal entre ambas.


Punto 5 - Relación entre variable categórica y numérica

Se examina cómo varía una variable numérica en función de una categórica mediante un diagrama de cajas.

cat_vars <- df %>% select(where(is.character))
if(ncol(cat_vars) > 0){
  catvar <- names(cat_vars)[1]
  numvar <- names(num_vars)[1]
  
  ggplot(df, aes_string(x = catvar, y = numvar, fill = catvar)) +
    geom_boxplot() +
    labs(title = paste("Distribución de", numvar, "según", catvar),
         x = catvar, y = numvar) +
    theme_minimal()
}

Interpretación:
El diagrama de cajas muestra las diferencias en la distribución de la variable numérica según cada categoría. Si las medianas o rangos varían mucho entre grupos, puede existir una relación significativa entre ambas variables.


Punto 6 - Relación entre dos variables categóricas

Se analiza la relación entre dos variables categóricas mediante una tabla cruzada y un gráfico de barras apiladas.

if(ncol(cat_vars) >= 2){
  v1 <- names(cat_vars)[1]
  v2 <- names(cat_vars)[2]
  
  ggplot(df, aes_string(x = v1, fill = v2)) +
    geom_bar(position = "fill") +
    scale_y_continuous(labels = scales::percent_format()) +
    labs(title = paste("Relación entre", v1, "y", v2),
         y = "Proporción", x = v1) +
    theme_minimal()
}

Interpretación:
El gráfico permite visualizar cómo se distribuyen las categorías de una variable dentro de otra. Si existen diferencias notorias en las proporciones, puede haber una dependencia entre las dos variables.


Punto 7 - Panel de visualización

Se combinan varios gráficos para ofrecer una visión integral del comportamiento de las variables del dataset.

p1 <- ggplot(df, aes_string(x = xvar, y = yvar)) +
  geom_point(color = "steelblue", alpha = 0.5) + 
  theme_minimal() + 
  labs(title = paste("Dispersión:", xvar, "vs", yvar))

p2 <- ggcorrplot(corr, lab = FALSE) + theme_minimal() + labs(title = "Matriz de Correlación")

if(ncol(cat_vars) > 0){
  p3 <- ggplot(df, aes_string(x = names(cat_vars)[1], y = numvar, fill = names(cat_vars)[1])) +
    geom_boxplot() + theme_minimal() +
    labs(title = paste("Boxplot:", numvar, "por", names(cat_vars)[1]))
} else {
  p3 <- NULL
}

wrap_plots(p1, p2, p3)

Interpretación:
El panel resume de forma visual los resultados del análisis exploratorio, mostrando relaciones entre variables numéricas, correlaciones y diferencias por categorías. Facilita identificar patrones generales y posibles variables clave para análisis posteriores.


Conclusión general

El análisis exploratorio del conjunto DAS permitió identificar relaciones entre variables y detectar patrones relevantes.
Las correlaciones más altas revelan dependencias significativas entre ciertos indicadores, mientras que la variabilidad en las variables categóricas muestra posibles segmentos de interés.
En general, los resultados sugieren que las variables numéricas con alta dispersión y correlación positiva podrían tener influencia en el comportamiento general del fenómeno estudiado.
Este análisis sienta las bases para una fase posterior de modelado o predicción, enfocada en las variables más representativas.