library(readxl)
library(dplyr)
library(ggplot2)
library(knitr)
library(kableExtra)
library(RecordLinkage)
library(leaflet)
library(htmltools)
library(readxl)
datos <- read_excel("C:/Users/luisi/Downloads/Datos_Vivienda.xlsx")
View(datos)
id = 1:dim(datos)[1]
datos= data.frame(id,datos) ## Esre código genera una nueva columna llamada id, con los numeros desde el 1 asta el numero de filas de la tabla de datos, y luego agrega un numero a cada dato.
require(RecordLinkage)
# filtro
#busca coicidencias de nombres similares : ej "villa del prado"
pos = which(jarowinkler("el caney", datos$Barrio)>0.98)
datos_subdatos=datos[pos,]
head(datos_subdatos)
## id Zona piso Estrato precio_millon Area_contruida parqueaderos Banos
## 754 754 Zona Sur 3 4 235 100 1 3
## 1177 1177 Zona Sur 4 4 215 92 1 3
## 1268 1268 Zona Sur 3 4 318 175 2 4
## 1280 1280 Zona Sur 3 4 335 210 1 4
## 1281 1281 Zona Sur 3 4 365 210 1 5
## 1283 1283 Zona Sur 3 4 335 150 1 4
## Habitaciones Tipo Barrio cordenada_longitud Cordenada_latitud
## 754 4 Casa el caney -76.50254 3.42489
## 1177 3 Apartamento el caney -76.51279 3.48038
## 1268 4 Casa el caney -76.51441 3.37949
## 1280 5 Casa el caney -76.51475 3.38196
## 1281 5 Casa el caney -76.51475 3.38196
## 1283 5 Casa el caney -76.51476 3.38159
library(dplyr)
names(datos_subdatos)
## [1] "id" "Zona" "piso"
## [4] "Estrato" "precio_millon" "Area_contruida"
## [7] "parqueaderos" "Banos" "Habitaciones"
## [10] "Tipo" "Barrio" "cordenada_longitud"
## [13] "Cordenada_latitud"
Indicadores de centralidad
## Se calcula el promedio del precio, el area construida, las habitaciones,
## registros totales para el bariro villa del prado
length(pos)
## [1] 208
Se puede observar que hay 208 casas en el barrio El Caney
ANÁLISIS EXPLORATORIO
require(leaflet)
#мара 2
#Etiqueta enriquecida (Tabel) muestra información detallada del punto, incluyendo:
#ID del inmueble.
#precio en millones.
#Área construida.
#Barrio.
#Latitud y longitud.
#Añade un fondo de mapa base → addtiles()
leaflet() %>% addCircleMarkers(lng = datos_subdatos$cordenada_longitud, lat = datos_subdatos$Cordenada_latitud, radius
= 1, color = "purple", label = paste0( 'ID',datos_subdatos$ID, 'Precio:', datos_subdatos$precio_millon,'Area:',
datos_subdatos$Area_contruida, 'Barrio:', datos_subdatos$Barrio,' Lat: ' ,datos_subdatos$Cordenada_latitud, 'Long:',datos_subdatos$cordenada_longitud)) %>% addTiles()
El mapa permite observar el lugar en el que se encuentran las casas del barrio el Caney
## Indicadores de centralidad y variabilidad para la variable "precio"
promedio_precio=mean (datos_subdatos$precio_millon,na.rm = TRUE)
mediana_precio=median(datos_subdatos$precio_millon,na.rm = TRUE)
minimo_precio=min(datos_subdatos$precio_millon,na.rm = TRUE)
maximo_precio= max(datos_subdatos$precio_millon,na.rm = TRUE)
desvest_precio=sd(datos_subdatos$precio_millon, na.rm = TRUE)
indic_precio=data.frame(promedio_precio,mediana_precio, minimo_precio, maximo_precio, desvest_precio)
indic_precio
## promedio_precio mediana_precio minimo_precio maximo_precio desvest_precio
## 1 245.0337 220 110 790 107.0147
Se puede observar que en promedio, las viviendas de este barrio cuestan alrededor de los 245 millones de pesos, con una desviación de 107,01 millones. La casa más barata en el barrio es de 110 millones, y la más cara es de 790 millones
library(plotly)
g1=ggplot(data = datos_subdatos, mapping = aes(x=precio_millon))+ geom_histogram(fill="purple")+theme_bw()
ggplotly(g1)
Se puede observar que una hay una alta concentración de viviendas con precios entre 140 y 164 millones, especialmente alrededor de los 140 millones, es decir, en este caso, la barra más alta.
Esto indica que la mayoría de las propiedades ofertadas en el barrio el Caney están en ese rango de precio.
ANÁLISIS BIVARIADO
library(ggplot2)
library(plotly)
# Crear gráfico interactivo con correlación
ggplotly(
ggplot(datos_subdatos, aes(x = Area_contruida, y = precio_millon)) +
geom_point(color = "purple", alpha = 0.8, size = 2) + # Puntos con color y transparencia
geom_smooth(method = "loess", color = "grey", se = TRUE) + # Línea de tendencia
labs(
title = paste("Figura 5. Relación entre Área Construida y Precio\nCoef. de correlación:",
round(cor(datos_subdatos$precio_millon, datos_subdatos$Area_contruida, use = "complete.obs"), 2)),
x = "Área Construida (m²)",
y = "Precio (Millones)",
caption = "Fuente: Datos de Vivienda"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10)
)
)
La gráfica permite evidenciar la relación entre el precio de la vivienda y el área construida. Se observa un coeficiente de correlación alto, en este caso, de 0.84, es decir, que el área construida puede ser un factor determinante para la determinación del precio de la vivienda en el barrio el Caney.
Se busca definir qué factores influyen con mayor impacto en el precio de la vivienda en el barrio el Caney.
mod2 = lm(precio_millon~Area_contruida + Habitaciones + Banos , data = datos_subdatos)
summary (mod2)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida + Habitaciones +
## Banos, data = datos_subdatos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -144.19 -30.95 -15.73 29.53 213.20
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 53.77530 11.36002 4.734 4.12e-06 ***
## Area_contruida 0.73368 0.06123 11.983 < 2e-16 ***
## Habitaciones 15.64024 4.50194 3.474 0.000626 ***
## Banos 19.80595 5.88612 3.365 0.000915 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 52.68 on 204 degrees of freedom
## Multiple R-squared: 0.7612, Adjusted R-squared: 0.7577
## F-statistic: 216.7 on 3 and 204 DF, p-value: < 2.2e-16
Como se puede observar las variables predictoras área construida, Habitaciones y baños son altamente significativos en el modelo para prededir el precio de la vivienda.
Evaluación del modelo
R² = 0.7612: El modelo explica aproximadamente el 76.12% de la variabilidad en el precio, lo cual es muy aceptable.
p-value < 2.2e-16: El modelo es estadísticamente significativo
Conclusión:Este modelo muestra que el impacto del número de baños, habitaciones y el área construida en el precio es significativo.
mod_multiple2=step(mod2)
## Start: AIC=1653.09
## precio_millon ~ Area_contruida + Habitaciones + Banos
##
## Df Sum of Sq RSS AIC
## <none> 566158 1653.1
## - Banos 1 31422 597580 1662.3
## - Habitaciones 1 33496 599654 1663.0
## - Area_contruida 1 398531 964688 1761.9
summary(mod2)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida + Habitaciones +
## Banos, data = datos_subdatos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -144.19 -30.95 -15.73 29.53 213.20
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 53.77530 11.36002 4.734 4.12e-06 ***
## Area_contruida 0.73368 0.06123 11.983 < 2e-16 ***
## Habitaciones 15.64024 4.50194 3.474 0.000626 ***
## Banos 19.80595 5.88612 3.365 0.000915 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 52.68 on 204 degrees of freedom
## Multiple R-squared: 0.7612, Adjusted R-squared: 0.7577
## F-statistic: 216.7 on 3 and 204 DF, p-value: < 2.2e-16
Se observa que todas las variables seleccionadas influyen de manera fuerte en la determianción del precio dela vivienda, y en este caso, no es necesario eliminar ninguna variable, pues todas son explicativas para la variable dependiente.
par(mfrow=c(2,2))
plot(mod2)
1. Residuos vs Ajustados (arriba izquierda)
Hay una alta curvatura, especialmente con valores altos ajustados, lo que sugiere cierta no linealidad o algún efecto no capturado por el modelo. También hay más dispersión de los residuos para valores ajustados altos → posible heterocedasticidad (varianza no constante).
2. Q-Q Plot (arriba derecha)
Hay algunas desviaciones en las colas (residuos extremos), lo que indica que los residuos no son perfectamente normales. Sin embargo, para la mayoría de los datos, la normalidad es razonable.
3. Scale-Location (abajo izquierda) La línea roja sube al final, lo cual sugiere que la varianza de los errores aumenta con el valor ajustado → otra señal de heterocedasticidad.
4. Residuos vs Leverage (abajo derecha)
Hay pocos puntos con valores altos de leverage (como las observaciones 1925 y 6610, las cuales pueden ser influyentes), pero ninguno parece estar más allá del umbral crítico (cooking distance > 1), por lo que no hay influencia extrema aparente, aunque vale la pena revisar esos puntos.
Conclusión general
*El modelo parece razonable en general, perO Podría beneficiarse de transformar alguna variable (como log del área). Tiene indicios de heterocedasticidad y no normalidad en los residuos extremos. Algunas observaciones tienen alta influencia y deben revisarse más a fondo.
mod3=lm(log(precio_millon)~log(Area_contruida)+Habitaciones+Banos,data = datos_subdatos)
summary (mod3)
##
## Call:
## lm(formula = log(precio_millon) ~ log(Area_contruida) + Habitaciones +
## Banos, data = datos_subdatos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.54660 -0.12200 -0.03284 0.09310 0.59972
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.82920 0.11766 24.045 < 2e-16 ***
## log(Area_contruida) 0.50675 0.03311 15.304 < 2e-16 ***
## Habitaciones 0.04297 0.01619 2.654 0.00858 **
## Banos 0.04590 0.02051 2.238 0.02632 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1851 on 204 degrees of freedom
## Multiple R-squared: 0.8042, Adjusted R-squared: 0.8013
## F-statistic: 279.3 on 3 and 204 DF, p-value: < 2.2e-16
Se puede observar que en el modelo, la variable baños es poco significativa, por lo que se va a eliminar.
##MODELO FINAL
###Transformación del modelo
mod_fin=lm(log(precio_millon)~log(Area_contruida)+Habitaciones,data = datos_subdatos)
summary (mod_fin)
##
## Call:
## lm(formula = log(precio_millon) ~ log(Area_contruida) + Habitaciones,
## data = datos_subdatos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.58861 -0.11282 -0.03128 0.08120 0.70951
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.73923 0.11166 24.533 < 2e-16 ***
## log(Area_contruida) 0.54015 0.02985 18.097 < 2e-16 ***
## Habitaciones 0.06107 0.01416 4.313 2.5e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1869 on 205 degrees of freedom
## Multiple R-squared: 0.7994, Adjusted R-squared: 0.7975
## F-statistic: 408.5 on 2 and 205 DF, p-value: < 2.2e-16
par(mfrow=c(2,2))
plot(mod_fin)
Este nuevo modelo parece estar mejor ajustado.
Los puntos ahora están mucho más centrados alrededor de cero. Además no hay patrones fuertes (ni forma de curva), lo que sugiere una relación más lineal y la dispersión parece más constante, por lo tanto mejora en homocedasticidad.
La mayoría de los puntos siguen la línea diagonal. Los residuos son aproximadamente normales, salvo ligeras desviaciones en los extremos.
La línea roja es casi horizontal, con variabilidad más estable.No hay tendencia ascendente fuerte, lo que sugiere homocedasticidad aceptable.
Hay pocos puntos con valores altos de leverage (como las observaciones 1925 y 6610, las cuales pueden ser influyentes), pero ninguno parece estar más allá del umbral crítico (cooking distance > 1), por lo que no hay influencia extrema aparente, aunque vale la pena revisar esos puntos.
###PRONÓSTICO HIPOTÉTICO
¿Que pasa al predecir con este modelo transformado, por ejemplo cual seria el precio de una vivienda con 100 m2 de area construida y 5 habitaciones?
y_log=predict(mod_fin,list(Area_contruida=100, Habitaciones=5))
exp(y_log)
## 1
## 252.6633
El precio de una vivienda que tenga 100 m2 de área construida y 5 habitaciones es aproximadamente de 252 millones.
Log (precio_millon) = 2.73 +0.54Area_contruida + 0.06Habitaciones Log (precio_millon) = 2.73 +0.54(100) + 0.06(5) Log (precio_millon) = 252.66
x_log=predict(mod_fin,list(Area_contruida=100, Habitaciones=6))
exp(x_log)
## 1
## 268.5745
El precio de una vivienda que tenga 100 m2 de área construida y 6 habitaciones es aproximadamente de 268 millones.
Log (precio_millon) = 2.73 +0.54Area_contruida + 0.06Habitaciones Log (precio_millon) = 2.73 +0.54(100) + 0.06(6) Log (precio_millon) = 268.5
Se puede observar que al aumentar en una unidad el numero de habitaciones, el precio de la vivienda se incrementa en 16 millones.
Este pronóstico nos sirve para identificar que el número de habitaciones es un factor influyente para determinar el precio de la vivienda en el barrio el Caney. En este caso, si una constructora conoce esta información, podría empeñarse en construir casas con mayor número de habitaciones para poder cobrar más por ellas.