# 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"
## 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…
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)| 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.
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)| 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.
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.
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.
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.
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.
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.
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.