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)

ACTIVIDAD 9

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

Promedio de precios de las viviendas 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.

MODELO DE REGRESIÓN MÚLTIPLE

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.

Selección de Variables

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.

Validación de supuestos

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.

Transformación de modelo

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.

1. Residuals vs Fitted

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.

2. Normal Q-Q Plot

La mayoría de los puntos siguen la línea diagonal. Los residuos son aproximadamente normales, salvo ligeras desviaciones en los extremos.

3. Scale-Location

La línea roja es casi horizontal, con variabilidad más estable.No hay tendencia ascendente fuerte, lo que sugiere homocedasticidad aceptable.

4. Residuals vs Leverage

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.

Conclusiones generales:

  • El modelo parece estar mejor ajustado que antes, ya que se evidencia mayor linealidad, normalidad y varianza constante.

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

¿Para qué sirve este pronóstico y como se monetizaría?

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.