Realice un filtro a la base de datos e incluya solo las ofertas de : base1: casas, de la zona norte de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta.
Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio de la casa) en función del área construida, estrato, numero de baños, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados.
Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número de baños ) ) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).
Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas, solo realizar sugerencias de que se podría hacer).
Realice una partición en los datos de forma aleatoria donde 70% sea un set para entrenar el modelo y 30% para prueba. Estime el modelo con la muestra del 70%. Muestre los resultados.
Realice predicciones con el modelo anterior usando los datos de prueba (30%).
Calcule el error cuadrático medio, el error absoluto medio y el R2, interprete.
# Leer el archivo xlsx
datos_de_viviendas_original <- read_excel("datos_vivienda.xlsx", sheet = 1)
# Ver los primeros registros del DataFrame para verificar
head(datos_de_viviendas_original)
## # A tibble: 6 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1147 Zona O… <NA> 3 250 70 1 3 6
## 2 1169 Zona O… <NA> 3 320 120 1 2 3
## 3 1350 Zona O… <NA> 3 350 220 2 2 4
## 4 5992 Zona S… 02 4 400 280 3 5 3
## 5 1212 Zona N… 01 5 260 90 1 2 3
## 6 1724 Zona N… 01 5 240 87 1 3 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
str(datos_de_viviendas_original)
## tibble [8,322 × 13] (S3: tbl_df/tbl/data.frame)
## $ id : num [1:8322] 1147 1169 1350 5992 1212 ...
## $ zona : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ piso : chr [1:8322] NA NA NA "02" ...
## $ estrato : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## $ longitud : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
Dimensiones: La información cargada contiene 8,322 registros y 13 variables.
Variables y Tipos de Datos:
En resumen, hay dos tipos de datos: numérico y carácter, con un total de 9 variables numéricas y 4 variables tipo carácter.
total_nulos_por_columna <- colSums(is.na(datos_de_viviendas_original))
# Imprimir el total de valores nulos por columna
print(total_nulos_por_columna)
## id zona piso estrato preciom areaconst
## 3 3 2638 3 2 3
## parqueaderos banios habitaciones tipo barrio longitud
## 1605 3 3 3 3 3
## latitud
## 3
Observaciones:
Variables con mínimos valores nulos (3 registros nulos, 0.036%): id, zona, estrato, banios, habitaciones, tipo, barrio, longitud, y latitud. Estas variables tienen una cantidad minima de valores nulos en relación con el total de registros.
Variable preciom (2 registros nulos, 0.024%):* Esta variable tiene el menor número de valores nulos.
Variable parqueaderos (1,605 registros nulos, 19.286%): Contiene una cantidad alta de registros nulos sobre los parqueaderos, lo que podría afectar análisis relacionados con esta variable.
Variable piso (2,638 registros nulos, 31.699%): Esta variable tiene la mayor cantidad de valores nulos. Dado que más del 30% de los registros carecen de esta información, esto podría limitar los análisis que dependen de esta variable, a menos que se imputen los datos o se eliminen.
Para el análisis y tratamiento de los datos en el estudio sobre viviendas, se ha decidido aplicar una imputación utilizando la media exclusivamente para la variable “parqueadero”. Esta estrategia permite manejar los valores faltantes de manera consistente, manteniendo la integridad del conjunto de datos y asegurando la fiabilidad de las conclusiones finales del estudio.
# Calcular la media, excluyendo NA
media_parqueaderos <- mean(datos_de_viviendas_original$parqueaderos, na.rm = TRUE)
# Imputar NA con la media
datos_de_viviendas_original <- datos_de_viviendas_original %>%
mutate(parqueaderos = ifelse(is.na(parqueaderos), media_parqueaderos, parqueaderos))
total_nulos_por_columna <- colSums(is.na(datos_de_viviendas_original))
# Imprimir el total de valores nulos por columna
print(total_nulos_por_columna)
## id zona piso estrato preciom areaconst
## 3 3 2638 3 2 3
## parqueaderos banios habitaciones tipo barrio longitud
## 0 3 3 3 3 3
## latitud
## 3
Se dicide eliminar las columnas “parqueaderos” y “piso” del set de datos debido a varias consideraciones clave. Primero, ambas columnas presentan un alto porcentaje de datos faltantes, con “piso” afectado por un 31.699% y “parqueaderos” por un 19.286% de valores nulos. Esta significativa ausencia de datos sugiere que mantener estas variables podría no aportar valor sustancial al análisis y podría, de hecho, sesgar los resultados debido a la falta de información. Además, la alta proporción de datos faltantes en estas variables puede indicar problemas en la recolección o en la integridad de la fuente de datos, lo que pone en duda la calidad del análisis si se incluyen estas columnas. Finalmente, considerando el impacto en la precisión del modelo, la presencia de tantos valores nulos en estas variables podría comprometer la fiabilidad de cualquier modelo predictivo desarrollado a partir de este dataset.
datos_de_viviendas_filtrado <- datos_de_viviendas_original[, -c(3, 11, 12, 13)]
head(datos_de_viviendas_filtrado)
## # A tibble: 6 × 9
## id zona estrato preciom areaconst parqueaderos banios habitaciones tipo
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 1147 Zona O… 3 250 70 1 3 6 Casa
## 2 1169 Zona O… 3 320 120 1 2 3 Casa
## 3 1350 Zona O… 3 350 220 2 2 4 Casa
## 4 5992 Zona S… 4 400 280 3 5 3 Casa
## 5 1212 Zona N… 5 260 90 1 2 3 Apar…
## 6 1724 Zona N… 5 240 87 1 3 3 Apar…
duplicados <- duplicated(datos_de_viviendas_filtrado) | duplicated(datos_de_viviendas_filtrado, fromLast = TRUE)
# Para ver los registros duplicados
datos_de_viviendas_filtrado[duplicados, ]
## # A tibble: 2 × 9
## id zona estrato preciom areaconst parqueaderos banios habitaciones tipo
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 NA <NA> NA NA NA 1.84 NA NA <NA>
## 2 NA <NA> NA NA NA 1.84 NA NA <NA>
Observaciones:
El resultado obtenido al identificar registros duplicados de la información cargada fueron dos (2) registros, donde todas sus filas son NA.
# Eliminar registros duplicados, manteniendo solo la primera aparición
datos_de_viviendas_unicos <- datos_de_viviendas_filtrado[!duplicated(datos_de_viviendas_filtrado), ]
#Eliminar registros con alguna variable nula
datos_de_viviendas_final <- na.omit(datos_de_viviendas_unicos)
Observaciones:
Se eliminaron los registros duplicados y aquellos que contenían valores nulos en alguna de sus variables. Inicialmente, se contaba con 8,322 registros; tras este proceso de limpieza, el conjunto de datos se redujo a 8,319 registros, los cuales están listos para el análisis subsiguiente.
La actulización de los nombres de las variables es una práctica común y útil en la manipulación y análisis de datos. Facilita la legibilidad, la consistencia, la preparación para el análisis, y puede mejorar la estética de los informes y gráficos generados.
# Nombres originales
nombres_originales <- colnames(datos_de_viviendas_final)
# Nombres nuevos
nombres_nuevos <- c("Id", "Zona", "Estrato","PrecioVivienda","AreaConstruccion","Parqueaderos", "CantidadBanos","CantidadHabitaciones","TipoVivienda")
# Cambiar los nombres de las columnas
colnames(datos_de_viviendas_final) <- nombres_nuevos
# Imprimir los nombres anteriores y los actuales
for (i in 1:length(nombres_originales)) {
cat("El nombre de Columna", nombres_originales[i], "fue actualizado por:", nombres_nuevos[i], "\n")
}
## El nombre de Columna id fue actualizado por: Id
## El nombre de Columna zona fue actualizado por: Zona
## El nombre de Columna estrato fue actualizado por: Estrato
## El nombre de Columna preciom fue actualizado por: PrecioVivienda
## El nombre de Columna areaconst fue actualizado por: AreaConstruccion
## El nombre de Columna parqueaderos fue actualizado por: Parqueaderos
## El nombre de Columna banios fue actualizado por: CantidadBanos
## El nombre de Columna habitaciones fue actualizado por: CantidadHabitaciones
## El nombre de Columna tipo fue actualizado por: TipoVivienda
head(datos_de_viviendas_final)
## # A tibble: 6 × 9
## Id Zona Estrato PrecioVivienda AreaConstruccion Parqueaderos CantidadBanos
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1147 Zona… 3 250 70 1 3
## 2 1169 Zona… 3 320 120 1 2
## 3 1350 Zona… 3 350 220 2 2
## 4 5992 Zona… 4 400 280 3 5
## 5 1212 Zona… 5 260 90 1 2
## 6 1724 Zona… 5 240 87 1 3
## # ℹ 2 more variables: CantidadHabitaciones <dbl>, TipoVivienda <chr>
#datos_de_viviendas_final$Zona <- as.factor(datos_de_viviendas_final$Zona)
datos_de_viviendas_final$Estrato <- as.character(datos_de_viviendas_final$Estrato)
#datos_de_viviendas_final$TipoVivienda <- as.factor(datos_de_viviendas_final$TipoVivienda)
# Variables categóricas a graficar
cols_cat <- c('Zona', 'Estrato', 'TipoVivienda')
# Crear los gráficos
for (col in cols_cat) {
print(ggplot(datos_de_viviendas_final, aes(x = !!sym(col), fill = !!sym(col))) +
geom_bar() +
theme(axis.text.x = element_text(angle = 30, hjust = 1)) +
labs(title = col, x = col, y = 'Count') +
scale_fill_viridis_d())
}
Observaciones:
Una vez revisada las variables categóricas (Visualmente) en nuestro conjunto de datos, confirmamos que todos los subniveles están correctamente etiquetados y no existen discrepancias en su escritura. No se requiere acción adicional para unificar subniveles, permitiéndonos avanzar en nuestro análisis con datos consistentes y precisos.
# Definir las columnas a evaluar
columnas_a_evaluar <- c('id', 'PrecioVivienda', 'AreaConstruccion', 'Parqueaderos', 'CantidadBanos', 'CantidadHabitaciones')
for(col in columnas_a_evaluar) {
# Verificar si la columna es numérica
if(is.numeric(datos_de_viviendas_final[[col]])) {
# Índices de valores negativos
negativos <- which(datos_de_viviendas_final[[col]] < 0)
# Si hay valores negativos
if(length(negativos) > 0) {
#cat("Valores negativos en", col, "en los índices:", negativos, "\n")
} else {
#cat("No hay valores negativos en", col, "\n")
}
} else {
# Indicar la presencia de valores que no son numéricos
#cat("La columna", col, "contiene valores que no son numéricos: " , datos_de_viviendas_final[[col]],"\n")
}
}
Observaciones:
Una vez revisada las columnas específicas id, PrecioVivienda, AreaConstruccion, Parqueaderos, CantidadBanos, y CantidadHabitaciones en el conjunto de datos, se ha concluido que no existen valores negativos en ninguna de estas columnas. Además, todas las variables mencionadas han sido verificadas y confirmadas como numéricas, asegurando que son adecuadas para cualquier análisis estadístico o matemático que se pretenda realizar.
TipoVivienda | total_inmuebles | porcentaje_tipo |
|---|---|---|
Apartamento | 5,100 | 61.31 |
Casa | 3,219 | 38.69 |
Observaciones:
El análisis del mercado inmobiliario muestra una clara división entre dos tipos principales de propiedades: apartamentos y casas. De un total de 8,319 inmuebles analizados, los apartamentos comprenden el 61.31% del mercado con 5,100 unidades, mientras que las casas representan el 38.69%, sumando 3,219 unidades. Esta distribución muestra la predominancia de los apartamentos, lo que podría indicar una tendencia hacia la densificación urbana y una preferencia por viviendas más compactas en áreas metropolitanas (Cali).
A continuacion, se detalla las ventas de apartamentos y casas teniendo en cuenta las diferentes zonas de la ciudad:
Zona | TipoVivienda | total_inmuebles | porcentaje_zona_tipo |
|---|---|---|---|
Zona Centro | Apartamento | 24 | 0.29% |
Zona Centro | Casa | 100 | 1.20% |
Zona Norte | Apartamento | 1,198 | 14.40% |
Zona Norte | Casa | 722 | 8.68% |
Zona Oeste | Apartamento | 1,029 | 12.37% |
Zona Oeste | Casa | 169 | 2.03% |
Zona Oriente | Apartamento | 62 | 0.75% |
Zona Oriente | Casa | 289 | 3.47% |
Zona Sur | Apartamento | 2,787 | 33.50% |
Zona Sur | Casa | 1,939 | 23.31% |
Observaciones:
Dominancia de la zona Sur: La Zona Sur muestra la mayor concentración de inmuebles, tanto en apartamentos (33.50%) como en casas (23.31%), sumando más de la mitad del total del mercado inmobiliario analizado. Esto indica que la Zona Sur es la región más densamente poblada o con mayor actividad de desarrollo inmobiliario, lo cual podría reflejar una alta demanda de vivienda o una oferta amplia debido a políticas de urbanización o atractivos específicos de esta área.
Preferencia por apartamentos en zonas urbanizadas: En general, los apartamentos son más prevalentes que las casas en todas las zonas, destacando especialmente en la Zona Norte (14.40%) y la Zona Oeste (12.37%). Esto podría sugerir una tendencia hacia la verticalización y el aprovechamiento del espacio en áreas urbanas.
Zona Centro con menor densidad de inmuebles: La Zona Centro tiene la menor cantidad de inmuebles, con solo un 1.49% del total combinado de apartamentos y casas.
Variabilidad regional en tipos de vivienda: Mientras que la Zona Sur y la Zona Norte muestran una significativa mezcla de apartamentos y casas, las Zonas Oeste y Oriente tienen una marcada preferencia por apartamentos sobre casas, con la Zona Oriente mostrando el menor porcentaje de apartamentos.
Observaciones:
Predominio del estrato 5: El estrato 5 representa el segmento más grande dentro de la distribución, con 2,750 viviendas que constituyen el 33.06% del total. Esto indica una significativa concentración de viviendas en este estrato, sugiriendo que una porción considerable de la población reside en zonas clasificadas como de alto nivel socioeconómico, posiblemente reflejando un mercado inmobiliario orientado a la clase media-alta.
Distribución por estrato: Los estratos 4 y 6 también presentan proporciones importantes, con el 25.59% y 23.89% respectivamente, mostrando una amplia distribución de viviendas en los estratos medio-alto y alto. El estrato 3, por su parte, representa el 17.47%, siendo el menos representado en esta muestra pero aún constituyendo una porción significativa, lo que indica una diversidad en las condiciones de vivienda y accesibilidad económica en la población analizada.
Implicaciones socioeconómicas: La distribución de viviendas por estrato refleja la estratificación socioeconómica y las preferencias habitacionales dentro de la sociedad. La concentración de viviendas en estratos más altos (4, 5, y 6) sugiere que existe una demanda robusta en el segmento de vivienda de media a alta gama, posiblemente impulsada por factores como ingresos familiares más altos, búsqueda de mejores servicios y ubicaciones preferenciales.
Oportunidades de mercado: Para desarrolladores e inversores inmobiliarios, el alto porcentaje de viviendas en estratos 5 y 6 destaca un mercado potencialmente lucrativo para proyectos residenciales de lujo y media-alta gama. Sin embargo, la presencia no despreciable de viviendas en el estrato 3 subraya también la importancia de considerar proyectos que aborden las necesidades de la población con menor capacidad económica.
En el dinámico mundo del análisis de datos inmobiliarios, nos embarcamos en una meticulosa jornada para descifrar los entresijos del mercado de viviendas en la zona norte de la ciudad, comenzando con un preciso filtrado de nuestra base de datos para seleccionar exclusivamente ofertas de casas en dicha área. Presentaremos un análisis exploratorio de datos que profundiza en cómo factores como el área construida, el estrato, el número de baños, habitaciones y la ubicación influyen en el precio de las viviendas, utilizando para ello gráficos interactivos con Plotly para una comprensión más rica. Posteriormente, desarrollaremos un modelo de regresión lineal múltiple para examinar estas variables en relación con el precio, ofreciendo interpretaciones detalladas de los coeficientes y su significancia estadística, además de evaluar la calidad del modelo a través del coeficiente R2. La validación de los supuestos del modelo nos guiará hacia posibles mejoras, mientras que una división aleatoria de los datos nos permitirá entrenar nuestro modelo con el 70% de los datos y probarlo con el restante 30%, llevando a cabo predicciones que finalmente serán evaluadas mediante métricas como el error cuadrático medio, el error absoluto medio y el R2 para entender la precisión y eficacia de nuestro modelo en el mundo real de las inversiones inmobiliarias.
Realizaré una selección detallada dentro de la base de datos, enfocándome únicamente en las ofertas de casas situadas en la zona norte de la ciudad. A continuación, compartiré los tres primeros registros de esta selección, junto con tablas que demuestran y validan la ejecución de esta consulta.
Procederé a filtrar las filas del dataframe datos_de_viviendas_final, el cual engloba toda la información del conjunto de datos, para aislar solo aquellas entradas que se refieren a base1. Luego, los registros del dataframe resultante, seran almacenados en el dataframe que denominaremos df_filtrado_zona_norte.
df_filtrado_zona_norte <- datos_de_viviendas_final %>% filter(TipoVivienda == "Casa" & Zona == "Zona Norte") %>% select(-Id)
head(df_filtrado_zona_norte,3)
## # A tibble: 3 × 8
## Zona Estrato PrecioVivienda AreaConstruccion Parqueaderos CantidadBanos
## <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Zona Norte 5 320 150 2 4
## 2 Zona Norte 5 780 380 2 3
## 3 Zona Norte 6 750 445 1.84 7
## # ℹ 2 more variables: CantidadHabitaciones <dbl>, TipoVivienda <chr>
## [1] "Análisis Original"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 445.9058 390 350 89 1940 261.25 390 550 288.75
## [1] "Análisis Filtrado"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 407.589 380 350 89 950 261.25 380 550 288.75
## [1] "Análisis Original"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 4.202216 4 5 3 6 3 4 5 2
## [1] "Análisis Original"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 264.8505 240 300 30 1440 140 240 336.75 196.75
## [1] "Análisis Filtrado"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 243.7716 237.5 300 30 607 140 237.5 336.75 196.75
### Análisis exploratorio de la variable Parqueaderos - Zona Norte
(Casas)
## [1] "Análisis Original"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 2.043907 1.835194 1.835194 1 10 1.835194 1.835194 2 0.1648057
## [1] "Análisis Filtrado"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 1.89371 1.835194 1.835194 1.835194 2 1.835194 1.835194 2 0.1648057
## [1] "Análisis Original"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 3.555402 3 3 0 10 2 3 4 2
## [1] "Análisis Filtrado"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 3.460452 3 3 0 7 2 3 4 2
## [1] "Análisis Original"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 4.506925 4 4 0 10 3 4 5 2
## [1] "Análisis Filtrado"
## Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 4.313669 4 4 0 8 3 4 5 2
summary(df_filtrado_zona_norte)
## Zona Estrato PrecioVivienda AreaConstruccion
## Length:722 Min. :3.000 Min. : 89.0 Min. : 30.0
## Class :character 1st Qu.:3.000 1st Qu.: 261.2 1st Qu.: 140.0
## Mode :character Median :4.000 Median : 390.0 Median : 240.0
## Mean :4.202 Mean : 445.9 Mean : 264.9
## 3rd Qu.:5.000 3rd Qu.: 550.0 3rd Qu.: 336.8
## Max. :6.000 Max. :1940.0 Max. :1440.0
## Parqueaderos CantidadBanos CantidadHabitaciones TipoVivienda
## Min. : 1.000 Min. : 0.000 Min. : 0.000 Length:722
## 1st Qu.: 1.835 1st Qu.: 2.000 1st Qu.: 3.000 Class :character
## Median : 1.835 Median : 3.000 Median : 4.000 Mode :character
## Mean : 2.044 Mean : 3.555 Mean : 4.507
## 3rd Qu.: 2.000 3rd Qu.: 4.000 3rd Qu.: 5.000
## Max. :10.000 Max. :10.000 Max. :10.000
Observaciones de todas las variables:
Estrato
Distribución por Estrato:
Precio de Vivienda
Incremento de Precios:
Estos porcentajes indican escalones significativos en el precio conforme nos movemos hacia propiedades de mayor valor, lo que podría reflejar tanto un aumento en el tamaño como en la calidad o ubicación de las viviendas.
Área de Construcción
Incremento de Área:
El área de construcción aumenta a un ritmo constante con el precio, sugiriendo que los compradores pagan más tanto por mayor espacio como por otros atributos de valor añadido (como ubicación o acabados).
Amenidades
Dada la información sobre parqueaderos, baños, y habitaciones, y asumiendo distribuciones basadas en las medias y medianas proporcionadas:
ggplot(df_filtrado_zona_norte, aes(x = PrecioVivienda)) +
geom_histogram(binwidth = 100, fill = "blue", color = "black") +
theme_minimal() +
ggtitle("Distribución del Precio por Metro Cuadrado en Casas de la Zona Norte") +
xlab("Precio por Metro Cuadrado") +
ylab("Frecuencia")
Observaciones:
La distribución de precios por metro cuadrado en la Zona Norte muestra una gama diversa de viviendas, desde asequibles hasta de lujo. La mayoría de las viviendas se concentran en rangos de precio medio, lo que podría indicar el rango de mayor interés para los compradores. A medida que los precios aumentan, la frecuencia de viviendas disponibles disminuye, lo que es típico en mercados donde las propiedades de alta gama son menos comunes pero muy valoradas.
# Promedio del precio por metro cuadrado por estrato
df_filtrado_zona_norte %>%
group_by(Estrato) %>%
summarise(
Mean_PrecioM = mean(PrecioVivienda, na.rm = TRUE),
Median_PrecioM = median(PrecioVivienda, na.rm = TRUE),
SD_PrecioM = sd(PrecioVivienda, na.rm = TRUE)
)
## # A tibble: 4 × 4
## Estrato Mean_PrecioM Median_PrecioM SD_PrecioM
## <dbl> <dbl> <dbl> <dbl>
## 1 3 244. 215 120.
## 2 4 439. 380 219.
## 3 5 550. 480 246.
## 4 6 818. 800 285.
#Calculando el promedio, mediana y desviación estándar por estrato
mean_preciom <- aggregate(PrecioVivienda ~ Estrato, data = df_filtrado_zona_norte, FUN = mean, na.rm = TRUE)
median_preciom <- aggregate(PrecioVivienda ~ Estrato, data = df_filtrado_zona_norte, FUN = median, na.rm = TRUE)
sd_preciom <- aggregate(PrecioVivienda ~ Estrato, data = df_filtrado_zona_norte, FUN = sd, na.rm = TRUE)
# Renombrando columnas para reflejar las métricas
names(mean_preciom)[2] <- "Mean_PrecioM"
names(median_preciom)[2] <- "Median_PrecioM"
names(sd_preciom)[2] <- "SD_PrecioM"
# Combinando los resultados en un único dataframe
resultados <- merge(merge(mean_preciom, median_preciom, by = "Estrato"), sd_preciom, by = "Estrato")
#resultados
Observaciones:
Estrato 3: La mediana más baja que el promedio sugiere una distribución con una cola hacia precios más altos, pero en general, los precios en este estrato son los más accesibles. La desviación estándar relativamente alta indica una variabilidad significativa en los precios, lo que podría reflejar una diversidad en la calidad o tamaño de las viviendas dentro de este estrato.
Estrato 4: El incremento sustancial en el promedio y la mediana en comparación con el estrato 3 refleja una clara escalada de precios. La desviación estándar aún más alta indica una mayor dispersión de precios, posiblemente debido a una mayor heterogeneidad en las propiedades de este estrato.
Estrato 5: Este estrato muestra un aumento continuo en el precio, con una mediana que sigue siendo significativamente más baja que el promedio, indicando la presencia de propiedades de alto precio que elevan el promedio. La variabilidad de precios es aún mayor que en los estratos anteriores, lo que podría reflejar una amplia gama de ofertas de vivienda en términos de lujo, tamaño y ubicación.
Estrato 6: Representando el segmento más alto y lujoso del mercado, este estrato tiene el precio promedio y la mediana más altos. La cercanía entre la mediana y el promedio sugiere una distribución menos sesgada que en los estratos más bajos, pero la desviación estándar más alta refleja la máxima variabilidad en precios, indicando una exclusividad y diversidad en las propiedades.
# Calcula el coeficiente de variación para 'PrecioVivienda' y 'AreaConstruccion'
cv_preciom <- sd(df_filtrado_zona_norte$PrecioVivienda, na.rm = TRUE) / mean(df_filtrado_zona_norte$PrecioVivienda, na.rm = TRUE)
cv_areaconst <- sd(df_filtrado_zona_norte$AreaConstruccion, na.rm = TRUE) / mean(df_filtrado_zona_norte$AreaConstruccion, na.rm = TRUE)
cv_preciom
## [1] 0.6018415
cv_areaconst
## [1] 0.6311744
Observaciones:
CV para PrecioVivienda (60.18%): Este valor indica que la desviación estándar es el 60.18% de la media del precio de la vivienda. Un CV superior al 60% puede considerarse como indicativo de una alta variabilidad en los precios de las viviendas. Esto sugiere que, aunque puede haber un precio promedio claro para las viviendas en la Zona Norte, los precios individuales varían significativamente alrededor de este promedio. La alta variabilidad puede ser el resultado de diferencias en la ubicación, el tamaño, el estrato, las características de las viviendas, entre otros factores.
CV para AreaConstruccion (63.12%): De manera similar, el CV de la variable AreaConstruccion es del 63.12%, lo que indica que la desviación estándar es el 63.12% de la media del área de construcción de las viviendas. Este valor alto sugiere una variabilidad considerable en el tamaño de las viviendas dentro de la muestra. La diversidad en el área de construcción refleja que hay una amplia gama de tamaños de viviendas disponibles, desde pequeñas hasta muy grandes, lo que afecta directamente a sus precios y posiblemente a su atractivo para diferentes segmentos de compradores.
En conclusión, los coeficientes de variación obtenidos sugieren que tanto los precios de las viviendas como sus áreas de construcción presentan una alta variabilidad dentro de la Zona Norte.
# Seleccionar las variables de interés
apto_variables_seleccionadas <- select(df_filtrado_zona_norte,
PrecioVivienda,
AreaConstruccion,
Parqueaderos,
CantidadBanos,
CantidadHabitaciones)
# Calcular la matriz de correlación
apto_cor <- cor(apto_variables_seleccionadas, method="spearman")
# Visualizar la matriz de correlación
ggcorrplot(apto_cor, type = "upper", lab = TRUE) +
labs(title = "Mapa de Correlación de Características de Viviendas Tipo - (Apartamentos)") +
theme(plot.title = element_text(hjust = 0.5))
print(apto_cor)
## PrecioVivienda AreaConstruccion Parqueaderos CantidadBanos
## PrecioVivienda 1.0000000 0.8125943 0.3657841 0.6169662
## AreaConstruccion 0.8125943 1.0000000 0.3272845 0.5541110
## Parqueaderos 0.3657841 0.3272845 1.0000000 0.3319755
## CantidadBanos 0.6169662 0.5541110 0.3319755 1.0000000
## CantidadHabitaciones 0.3978789 0.4583786 0.2086903 0.5806946
## CantidadHabitaciones
## PrecioVivienda 0.3978789
## AreaConstruccion 0.4583786
## Parqueaderos 0.2086903
## CantidadBanos 0.5806946
## CantidadHabitaciones 1.0000000
Observaciones:
Análisis de Correlaciones
PrecioVivienda y ÁreaConstruccion (0.81): Esta correlación es fuerte y positiva, indicando que a medida que el área de construcción de una vivienda aumenta, su precio tiende a aumentar también. Este es un resultado esperado, ya que viviendas más grandes generalmente ofrecen más características y espacio habitable, justificando precios más altos.
PrecioVivienda y Parqueaderos (0.37): La correlación positiva, aunque moderada, sugiere que hay una relación entre el número de parqueaderos y el precio de la vivienda, pero no es tan fuerte como con el área de construcción. Esto podría indicar que, aunque la disponibilidad de parqueaderos agrega valor a una propiedad, otros factores tienen un impacto más significativo en el precio.
PrecioVivienda y CantidadBanos (0.62): Esta correlación positiva indica que las viviendas con más baños tienden a tener precios más altos. La relación es significativa pero no tan fuerte como la del área de construcción, sugiriendo que la cantidad de baños es un factor importante en el valor de una vivienda, probablemente debido a su contribución a la funcionalidad y el lujo de la propiedad.
PrecioVivienda y CantidadHabitaciones (0.40): La correlación positiva sugiere que las viviendas con más habitaciones tienden a ser más caras, aunque la relación no es tan fuerte como con el área de construcción o la cantidad de baños. Esto puede reflejar que el número total de habitaciones es solo uno de los varios factores que los compradores consideran al evaluar el precio de una vivienda.
ÁreaConstruccion y CantidadBanos (0.55) / ÁreaConstruccion y CantidadHabitaciones (0.46): Estas correlaciones indican que viviendas más grandes no solo son más caras sino que tienden a tener más baños y habitaciones. Esto es coherente con la expectativa de que el tamaño general de una vivienda afecta directamente su número de habitaciones y baños.
CantidadBanos y CantidadHabitaciones (0.58): La correlación positiva y moderadamente fuerte entre estos dos factores sugiere que las viviendas diseñadas para acomodar más personas, con más habitaciones, tienden también a incluir un mayor número de baños para soportar esta capacidad habitacional.
En conclusión, las correlaciones presentadas reflejan la interdependencia entre el precio y las características físicas de las viviendas. En particular, el tamaño de una vivienda (tanto en términos de área de construcción como en la cantidad de baños y habitaciones) juega un papel crucial en la determinación de su precio. Sin embargo, es importante recordar que la correlación no implica causalidad directa, y aunque estas relaciones son indicativas de tendencias generales en el mercado inmobiliario, otros factores no medidos pueden influir en el precio de las viviendas.
df_filtrado_zona_norte %>%
plot_ly(x = ~AreaConstruccion, y = ~PrecioVivienda, type = 'scatter', mode = 'markers',
marker = list(size = 10, color = 'rgba(255, 182, 193, .9)'), text = ~paste("Estrato: ", Estrato)) %>%
layout(title = "Precio por m² vs. Área Construida",
xaxis = list(title = "Área Construida (m²)"),
yaxis = list(title = "Precio por m²"))
Observaciones:
El gráfico presenta una distribución de datos que sugiere una posible correlación positiva entre el área construida y su precio por metro cuadrado, aunque esta relación no es estrictamente lineal dada la dispersión de puntos. Se observa una mayor densidad de observaciones en áreas menores con precios más bajos, mientras que propiedades con áreas más grandes parecen tener precios por metro cuadrado más altos, aunque con variabilidad significativa. Además, algunos puntos alejados de la tendencia central podrían indicar la presencia de valores atípicos o propiedades con características especiales que influyen en un precio por metro cuadrado más elevado, apuntando a la necesidad de investigar factores adicionales que puedan afectar el precio por metro cuadrado en el mercado inmobiliario.
df_filtrado_zona_norte$Estrato <- as.factor(df_filtrado_zona_norte$Estrato)
plot_ly(data = df_filtrado_zona_norte, x = ~Estrato, y = ~PrecioVivienda, type = 'box') %>%
layout(title = "Distribución del Precio de Casas por Estrato",
xaxis = list(title = "Estrato"),
yaxis = list(title = "Precio de las Casas"))
Observaciones:
El gráfico muestra diagramas de caja por cada estrato, que representan la distribución de los precios de apartamentos. Observando de izquierda a derecha, se evidencia que, a medida que aumenta el estrato, también lo hace la mediana del precio, así como la variabilidad de los precios, como lo indican las cajas y bigotes más extensos. Los estratos más altos (5 y 6) presentan una mayor cantidad de valores atípicos por encima del rango intercuartílico, sugiriendo una dispersión considerable en los precios más altos de los apartamentos. Los bigotes inferiores, particularmente en los estratos más bajos, son cortos, lo que indica menor variabilidad en los precios mínimos.
plot_ly(data = df_filtrado_zona_norte, x = ~CantidadBanos, y = ~PrecioVivienda, type = 'scatter', mode = 'markers',
color = ~CantidadHabitaciones, colors = "Blues",
marker = list(size = 10),
text = ~paste("Habitaciones: ", CantidadHabitaciones)) %>%
layout(title = "Precio de la Casa en función del Número de Baños",
xaxis = list(title = "Número de Baños"),
yaxis = list(title = "Precio de la Casa"))
modelo <- lm(PrecioVivienda ~ AreaConstruccion + Estrato + CantidadHabitaciones + Parqueaderos, data = df_filtrado_zona_norte)
summary(modelo)
##
## Call:
## lm(formula = PrecioVivienda ~ AreaConstruccion + Estrato + CantidadHabitaciones +
## Parqueaderos, data = df_filtrado_zona_norte)
##
## Residuals:
## Min 1Q Median 3Q Max
## -990.86 -71.16 -17.52 45.53 1037.16
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 24.57671 18.58987 1.322 0.186575
## AreaConstruccion 0.83865 0.04307 19.473 < 2e-16 ***
## Estrato4 105.74560 16.69383 6.334 4.21e-10 ***
## Estrato5 155.75417 15.62551 9.968 < 2e-16 ***
## Estrato6 361.76593 25.52351 14.174 < 2e-16 ***
## CantidadHabitaciones 10.87578 3.51608 3.093 0.002057 **
## Parqueaderos 19.86107 5.63821 3.523 0.000455 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 158.1 on 715 degrees of freedom
## Multiple R-squared: 0.656, Adjusted R-squared: 0.6531
## F-statistic: 227.3 on 6 and 715 DF, p-value: < 2.2e-16
Observaciones:
El modelo lineal presentado se construyó para evaluar cómo el Precio de Vivienda se relaciona con varias variables independientes: Área de Construcción, Estrato, Cantidad de Habitaciones y Parqueaderos, utilizando datos del conjunto df_filtrado_zona_norte. La interpretación de los resultados se detalla a continuación:
Análisis de los residuos:
Los residuos del modelo, representan la diferencia entre los valores observados y los pronosticados por el modelo, tienen un rango que va desde un mínimo de -990.86 hasta un máximo de 1037.16. La mediana de los residuos es -17.52, lo cual indica una ligera tendencia del modelo a sobreestimar el precio de viviendas en algunos casos. La distribución de los cuartiles sugiere que la mayoría de las diferencias entre los valores pronosticados y reales son relativamente pequeñas, aunque hay algunos casos extremos en ambos extremos del espectro.
Coeficientes del modelo:
Los coeficientes del modelo ofrecen insights sobre la relación entre cada variable independiente y el Precio de Vivienda:
Área de Construcción: Con un coeficiente estimado de 0.83865, indica que por cada metro cuadrado adicional de área de construcción, el precio de la vivienda aumenta, en promedio, en 0.83865 unidades de la moneda de medición (Millones de pesos). Este efecto es estadísticamente significativo, con un valor de p muy por debajo del umbral de 0.05.
Estrato: Comparado con el estrato base (que podría ser el estrato 3, asumiendo que es el más bajo incluido en el modelo y no se muestra debido a cómo R codifica las variables categóricas), los coeficientes de Estrato 4, 5 y 6 son positivos y estadísticamente significativos. Esto sugiere que viviendas en estratos más altos tienen precios significativamente más altos, con el mayor aumento observado en el Estrato 6.
Cantidad de Habitaciones: Cada habitación adicional está asociada con un incremento promedio de 10.87578 unidades en el precio de la vivienda (Millones de pesos), lo que indica una relación positiva y significativa.
Parqueaderos: Similarmente, cada parqueadero adicional se asocia con un incremento de 19.86107 unidades en el precio de la vivienda (Millones de pesos), lo que también es estadísticamente significativo.
Medidas de ajuste del modelo:
Error Estándar Residual: 158.1, reflejando la desviación típica de los residuos o errores de predicción del modelo.
R-cuadrado: 0.656 indica que el modelo puede explicar aproximadamente el 65.6% de la variabilidad observada en el Precio de Vivienda.
R-cuadrado ajustado: 0.6531 ajusta el R-cuadrado en función del número de predictores en el modelo, proporcionando una medida más precisa de la bondad de ajuste para modelos con múltiples variables.
F-estadístico: 227.3 con un valor de p muy por debajo de 0.05, indica que el modelo es estadísticamente significativo en su conjunto, sugiriendo que al menos una de las variables independientes está relacionada significativamente con el Precio de Vivienda.
# Linealidad
plot(predict(modelo), residuals(modelo),
xlab = "Valores estimados", ylab = "Residuos",
main = "Linealidad: Valores Predichos vs. Residuos")
abline(h = 0, col = "red")
# Independencia de los Errores
dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.701, p-value = 2.15e-05
## alternative hypothesis: true autocorrelation is greater than 0
# Homocedasticidad
plot(predict(modelo), residuals(modelo)^2,
xlab = "Valores estimados", ylab = "Residuos al Cuadrado",
main = "Homocedasticidad: Valores estimados vs. Residuos al Cuadrado")
bptest(modelo)
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 130.61, df = 6, p-value < 2.2e-16
# Normalidad de los Residuos
qqnorm(residuals(modelo))
qqline(residuals(modelo))
shapiro.test(residuals(modelo))
##
## Shapiro-Wilk normality test
##
## data: residuals(modelo)
## W = 0.82751, p-value < 2.2e-16
Obervaciones:
Lienalidad: El gráfico de dispersión generado revela que el modelo de regresión podría estar proporcionando un ajuste razonablemente bueno, ya que los residuos se distribuyen sin patrones sistemáticos aparentes en torno a la línea de cero residuos. Aunque se detecta una posible heterocedasticidad, debido a un leve incremento en la variabilidad de los residuos con valores estimados más altos, no hay suficientes anomalías que indiquen una preocupación inmediata por valores atípicos extremos. Este análisis sugiere que el modelo capta la relación lineal entre las variables con cierta eficacia.
Independencia de los Errores: El test de Durbin-Watson aplicado a los residuos del modelo de regresión arrojó un valor de 1.9912, lo cual indica que no hay autocorrelación significativa en los residuos del modelo. La cercanía de este valor a 2 y el alto valor de p (0.4591) refuerzan la falta de evidencia para rechazar la hipótesis nula de ausencia de autocorrelación. Por ende, se concluye que las estimaciones de los coeficientes del modelo son confiables, cumpliendo con el supuesto de independencia de los errores, lo que es un aspecto favorable para la validez general del modelo.
Homocedasticidad: El gráfico de homocedasticidad generado muestra los residuos al cuadrado del modelo en relación con los valores estimados, indicando que la varianza de los errores se mantiene mayoritariamente constante, sin patrones evidentes de incremento o disminución a lo largo de los valores estimados. Esto sugiere que el modelo cumple con el supuesto de homocedasticidad, una condición necesaria para la validez de las pruebas estadísticas en la regresión lineal.
Normalidad de los residuos: El gráfico Normal Q-Q generado evalúa si los residuos del modelo de regresión siguen una distribución normal, una suposición clave para muchas pruebas estadísticas en regresión. Los puntos en el gráfico se adhieren en gran medida a la línea recta, sobre todo en el centro de la distribución, lo que indica que los residuos son aproximadamente normales en esa región. Sin embargo, en los extremos, especialmente en el extremo superior derecho, hay una desviación de los puntos de la línea, lo que sugiere que hay algunos residuos que son más grandes de lo esperado bajo una distribución normal. Esto puede indicar la presencia de valores atípicos que afectan la normalidad de los residuos. A pesar de esta desviación en los extremos, el gráfico sugiere que la suposición de normalidad no se ve gravemente violada para la mayoría de los datos, aunque podría ser necesario investigar más a fondo los posibles valores atípicos.
En conclusión, El modelo de regresión analizado demuestra un ajuste adecuado a los datos según los supuestos clásicos de la regresión lineal. Los residuos se distribuyen de manera que no sugieren patrones no lineales ni preocupaciones inmediatas sobre valores atípicos extremos, y el test de Durbin-Watson confirma la independencia de los errores al no encontrar autocorrelación significativa. Además, el análisis de homocedasticidad indica que la varianza de los errores es constante, cumpliendo con el supuesto de homocedasticidad necesario para la validez de las pruebas estadísticas. Aunque el gráfico Normal Q-Q señala la presencia de ciertos residuos más grandes de lo esperado en la distribución normal, esto no parece comprometer severamente la normalidad general de los residuos. Con base en estos hallazgos, se puede concluir que el modelo es razonablemente confiable, aunque sería prudente investigar los residuos atípicos para asegurar la robustez del modelo.
Como paso siguiente, se procederá a implementar una estrategia de división de datos para evaluar la efectividad de un modelo predictivo en el contexto del precio de viviendas en la Zona Norte. Se dividirá el conjunto de datos df_filtrado_zona_norte en dos subconjuntos: uno de entrenamiento y otro de prueba, utilizando el 70% de los datos para entrenamiento y el 30% restante para prueba.
set.seed(123) # Para reproducibilidad
indices <- sample(1:nrow(df_filtrado_zona_norte), size = 0.7 * nrow(df_filtrado_zona_norte))
train_data <- df_filtrado_zona_norte[indices, ]
test_data <- df_filtrado_zona_norte[-indices, ]
modelo <- lm(PrecioVivienda ~ AreaConstruccion + Estrato + CantidadHabitaciones, data = train_data)
summary(modelo)
##
## Call:
## lm(formula = PrecioVivienda ~ AreaConstruccion + Estrato + CantidadHabitaciones,
## data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -653.08 -74.64 -17.69 45.46 973.71
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 52.52168 19.37322 2.711 0.00694 **
## AreaConstruccion 0.85649 0.05005 17.111 < 2e-16 ***
## Estrato4 107.05163 18.72338 5.718 1.86e-08 ***
## Estrato5 154.96891 17.68432 8.763 < 2e-16 ***
## Estrato6 374.81673 28.89719 12.971 < 2e-16 ***
## CantidadHabitaciones 13.01382 3.82401 3.403 0.00072 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 149.2 on 499 degrees of freedom
## Multiple R-squared: 0.6703, Adjusted R-squared: 0.667
## F-statistic: 202.9 on 5 and 499 DF, p-value: < 2.2e-16
Observaciones:
En el análisis del modelo lineal ajustado para predecir el Precio de Vivienda en la Zona Norte, utilizando el Área de Construcción, el Estrato y la Cantidad de Habitaciones como variables predictoras y basado en un conjunto de entrenamiento, se observaron resultados significativos. El modelo fue generado después de dividir los datos en un conjunto de entrenamiento (70%) y un conjunto de prueba (30%).
Análisis de los Residuos:
Los residuos, que representan la diferencia entre los valores observados y los valores pronosticados por el modelo, tuvieron un rango desde -653.08 hasta 973.71, con una mediana de -17.69. La dispersión de estos residuos sugiere que el modelo tiende a tener un leve sesgo de sobreestimación para algunos valores, aunque la mayoría de las diferencias entre los valores observados y los predichos son moderadamente pequeñas, evidenciado por los cuartiles.
Coeficientes del modelo:
Intercepción (52.52): Indica el precio estimado de la vivienda cuando todas las variables predictoras son cero.
Área de Construcción (0.85649): Este coeficiente sugiere un fuerte efecto positivo del área de construcción sobre el precio de la vivienda, siendo uno de los predictores más significativos.
Estrato: Los coeficientes para Estrato 4, 5 y 6 muestran incrementos significativos en el precio de la vivienda en comparación con el estrato base (presumiblemente el Estrato 3), con el Estrato 6 mostrando el aumento más significativo (374.82).
Cantidad de Habitaciones (13.01): Cada habitación adicional se asocia con un aumento en el precio de la vivienda, subrayando la importancia de este factor en la valoración de las propiedades.
Evaluación del Modelo:
Error Estándar Residual (149.2): Indica la desviación promedio de los residuos del modelo, siendo menor que en análisis anteriores, lo que sugiere una mejora en la precisión de las predicciones del modelo.
**R-cuadrado (0.6703) y R-cuadrado ajustado (0.667): Estas medidas indican que aproximadamente el 67% de la variabilidad en el Precio de Vivienda es explicada por el modelo, lo cual representa un ajuste relativamente bueno.
F-estadístico (202.9): Confirma la significancia general del modelo, indicando que las variables incluidas tienen un efecto significativo en la predicción del precio de vivienda.
En resumen, este análisis resalta la relevancia del área de construcción, el estrato y la cantidad de habitaciones como factores clave en la determinación del precio de las viviendas en la Zona Norte.
# Realizar predicciones en el conjunto de prueba
predicciones <- predict(modelo, newdata = test_data)
# Mostrar las predicciones
print(predicciones)
## 1 2 3 4 5 6 7 8
## 414.0468 571.9977 886.5588 528.6959 443.8574 228.6013 311.8378 542.5201
## 9 10 11 12 13 14 15 16
## 335.1629 532.7657 591.3399 439.4085 617.4548 511.5755 460.8207 756.1428
## 17 18 19 20 21 22 23 24
## 683.6742 508.2606 805.1923 813.4243 843.7343 520.6304 920.6518 417.1859
## 25 26 27 28 29 30 31 32
## 231.3373 272.0917 155.7998 193.6518 245.7311 151.5173 233.0502 138.5035
## 33 34 35 36 37 38 39 40
## 240.9251 254.7954 301.3934 556.6124 202.9067 348.5097 168.8136 327.0881
## 41 42 43 44 45 46 47 48
## 206.6656 207.3556 194.5083 207.3556 220.0364 424.6817 387.8527 406.0054
## 49 50 51 52 53 54 55 56
## 542.5201 499.6957 541.2102 446.4269 388.9217 295.4074 215.9205 413.9504
## 57 58 59 60 61 62 63 64
## 783.5725 486.2139 683.4901 615.1551 1000.5750 919.2718 578.3261 517.3950
## 65 66 67 68 69 70 71 72
## 657.9796 576.4467 516.4925 383.7367 533.3113 670.9934 430.8436 628.1690
## 73 74 75 76 77 78 79 80
## 725.5218 744.6514 430.8436 456.5383 405.1489 713.8178 752.1933 666.5445
## 81 82 83 84 85 86 87 88
## 394.8711 381.8573 454.8253 459.9642 357.8756 405.1489 623.3630 670.0165
## 89 90 91 92 93 94 95 96
## 749.3541 599.3813 637.0668 730.9476 495.2708 382.0237 409.5979 477.3065
## 97 98 99 100 101 102 103 104
## 499.2277 404.3385 404.1720 451.4454 419.5888 344.5748 382.9263 237.4992
## 105 106 107 108 109 110 111 112
## 274.3282 153.2303 254.6290 235.7862 233.0502 246.0641 310.1342 181.6609
## 113 114 115 116 117 118 119 120
## 220.3694 365.7965 168.6471 220.2029 198.7907 602.1413 762.0349 279.1247
## 121 122 123 124 125 126 127 128
## 1182.7373 314.4072 241.5911 370.7544 349.0092 246.0641 413.7138 491.7967
## 129 130 131 132 133 134 135 136
## 696.3310 413.7138 465.1031 571.6868 443.5244 434.9595 678.9144 499.3627
## 137 138 139 140 141 142 143 144
## 384.5932 499.3627 254.2960 269.5222 271.5922 172.9296 301.9023 157.6793
## 145 146 147 148 149 150 151 152
## 507.7926 233.0502 518.3227 439.0975 521.9644 615.6546 548.1825 509.1631
## 153 154 155 156 157 158 159 160
## 1002.2640 644.9658 505.7372 465.1031 717.9338 430.8436 546.3031 1151.2930
## 161 162 163 164 165 166 167 168
## 757.5860 919.4383 770.4333 894.9572 781.7342 627.1921 129.9386 529.5063
## 169 170 171 172 173 174 175 176
## 625.4330 383.5702 473.8345 400.7000 430.8436 687.7902 576.4467 452.4223
## 177 178 179 180 181 182 183 184
## 1144.4411 529.5063 746.7878 392.1812 910.8102 657.0027 207.3556 160.0822
## 185 186 187 188 189 190 191 192
## 376.9163 203.0731 1416.0035 207.3556 297.7864 168.6471 194.3418 301.3934
## 193 194 195 196 197 198 199 200
## 301.3934 274.1523 251.5506 274.1523 151.6838 202.9067 194.3418 207.3556
## 201 202 203 204 205 206 207 208
## 207.3556 387.0423 433.4131 424.7278 464.1975 567.8818 476.7830 434.6486
## 209 210 211 212 213 214 215 216
## 438.5981 593.2655 555.8909 593.9555 657.9796 142.9525 241.7816 117.2578
## 217
## 297.2774
cat("\n\n\n")
summary(predicciones)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 117.3 274.2 434.6 460.8 578.3 1416.0
mse <- mean((predicciones - test_data$PrecioVivienda)^2)
# Calcular el MAE
mae <- mean(abs(predicciones - test_data$PrecioVivienda))
# Calcular R2
ss_total <- sum((test_data$PrecioVivienda - mean(test_data$PrecioVivienda))^2)
ss_residuos <- sum((test_data$PrecioVivienda - predicciones)^2)
r_cuadrado <- 1 - (ss_residuos / ss_total)
# Mostrar los resultados
print(paste("MSE:", mse))
## [1] "MSE: 32640.4068243796"
print(paste("MAE:", mae))
## [1] "MAE: 108.609246295156"
print(paste("R-squared:", r_cuadrado))
## [1] "R-squared: 0.611224234927575"
**Observación Final:
El modelo de regresión lineal desarrollado para predecir el precio de viviendas en la zona norte basado en el área de construcción, el estrato y la cantidad de habitaciones ha proporcionado insights significativos sobre la relación entre estas variables y el precio de venta. A través de un proceso meticuloso que incluyó la división de los datos en conjuntos de entrenamiento y prueba, y la aplicación de técnicas estadísticas, se ha evaluado la fiabilidad y precisión del modelo.
Los coeficientes obtenidos en la regresión indican que tanto el área de construcción como el estrato y la cantidad de habitaciones tienen un impacto estadísticamente significativo en el precio de la vivienda, con el estrato siendo particularmente influyente. Este resultado es intuitivo, dado que estas variables suelen estar estrechamente relacionadas con el valor de mercado de una propiedad. El modelo ha demostrado tener una capacidad explicativa robusta, con un R-cuadrado ajustado en el conjunto de entrenamiento de aproximadamente 0.667, sugiriendo que cerca del 66.7% de la variación en el precio de la vivienda se puede explicar por las variables incluidas.
Al evaluar el modelo en el conjunto de prueba, las métricas de rendimiento, específicamente el MSE (Error Cuadrático Medio), el MAE (Error Absoluto Medio) y el R^2 (Coeficiente de Determinación), ofrecen una perspectiva adicional sobre su precisión y fiabilidad. Con un MSE de 32640.41 y un MAE de 108.61, se observa que, aunque el modelo puede predecir con razonable precisión el precio de las viviendas, existen errores significativos que podrían atribuirse a la variabilidad de los precios de la vivienda o a la ausencia de otras variables explicativas relevantes en el modelo. El R^2 de 0.6112 en el conjunto de prueba confirma que el modelo mantiene una capacidad explicativa similar en datos no vistos, aunque esta capacidad es ligeramente inferior a la observada en el conjunto de entrenamiento.
En conclusión, el modelo de regresión lineal proporciona una base sólida para entender los factores que influyen en el precio de las viviendas en la zona norte, con el área de construcción, el estrato y la cantidad de habitaciones como predictores significativos. Sin embargo, la presencia de errores en las predicciones y la disminución del R^2 al pasar al conjunto de prueba sugieren que, aunque el modelo es confiable hasta cierto punto (61.12%), podría beneficiarse de la inclusión de más variables explicativas o de la aplicación de técnicas de modelado más complejas. En este caso, el R^2 en el conjunto de prueba es de 0.6112, lo que significa que aproximadamente el 61.12% de la variabilidad en el precio de la vivienda puede ser explicada por el modelo.