# Cargar librerias necesarias

library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(RecordLinkage)
library(leaflet)
library(htmltools)
# Cargar datos
library(readxl)
datos <- read_excel("C:/Users/Nessa/OneDrive/Escritorio/UNIVERSIDAD/6 SEMESTRE/Econometría Financiera/CORTE 3/ACTIVIDADES/Datos_Vivienda.xlsx")

id=1:dim(datos)[1]
datos=data.frame(id,datos)

# Filtro

require(RecordLinkage)

pos=which(jarowinkler("el limonar",datos$Barrio)>0.98)
datos_sub=datos[pos,]
head(datos_sub)
id Zona piso Estrato precio_millon Area_contruida parqueaderos Banos Habitaciones Tipo Barrio cordenada_longitud Cordenada_latitud
140 140 Zona Sur 1 5 420 235 1 4 4 Casa el limonar -76.48639 3.46506
284 284 Zona Sur 2 5 600 280 2 4 5 Casa el limonar -76.49177 3.44660
663 663 Zona Sur 2 5 300 108 1 3 4 Apartamento el limonar -76.50059 3.44818
688 688 Zona Sur NA 5 280 130 2 3 3 Apartamento el limonar -76.50100 3.40100
955 955 Zona Sur 6 5 355 104 2 3 4 Apartamento el limonar -76.50654 3.48941
1141 1141 Zona Sur 4 6 240 126 2 2 3 Apartamento el limonar -76.51138 3.46519
names(datos_sub)
##  [1] "id"                 "Zona"               "piso"              
##  [4] "Estrato"            "precio_millon"      "Area_contruida"    
##  [7] "parqueaderos"       "Banos"              "Habitaciones"      
## [10] "Tipo"               "Barrio"             "cordenada_longitud"
## [13] "Cordenada_latitud"
# Regirto de observaciones totales de las viviendas en el barrio El Limonar

length(pos)
## [1] 135

Analisis Exploratorio Inicial

# Mapa 1

leaflet()%>%addCircleMarkers(lng = datos_sub$cordenada_longitud, lat = datos_sub$Cordenada_latitud, radius = 1, "orange", label = paste0('ID: ',datos_sub$ID,', Precio: ', datos_sub$precio_millon, ', Area: ',datos_sub$Area_contruida, ', Barrio: ', datos_sub$Barrio,', Lat: ',datos_sub$Cordenada_latitud,', Long:',datos_sub$cordenada_longitud))%>% addTiles()
# Histograma Interactivo de las concentracion de los precios de las viviendas en Cali
ggplotly(
  ggplot(datos_sub, aes(x=precio_millon)) +
    geom_histogram(binwidth=150, fill="darkred", color="black", alpha=0.6) +
    labs(title="Figura 1. Histograma del Precio de viviendas en El Limonar",
         x="Precio", 
         y="Frecuencia") +
    theme_minimal()
)
# Calcular estadísticas descriptivas básicas

promedio_precio=mean(datos_sub$precio_millon,na.rm = TRUE)
mediana_precio=median(datos_sub$precio_millon,na.rm = TRUE)
minimo_precio=min(datos_sub$precio_millon,na.rm = TRUE)
maximo_precio=max(datos_sub$precio_millon,na.rm = TRUE)
desvest_precio=sd(datos_sub$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
407.1037 370 110 950 187.6795

Analisis Bivariado

##Exploración Bivariada 

g2=ggplot(data=datos_sub,aes(y=precio_millon, x=Area_contruida))+geom_point() +
  geom_smooth()
ggplotly(g2)
cor(datos_sub$precio_millon,datos_sub$Area_contruida)
## [1] 0.7658381

Se puede observar que la correlacion entre las variables precio y area construida se evidenncia una buena relacion, con un coeficiente de correlacion de 0.76, el cual es bueno.

Regresion Lineal Simple

Datos cuantitativos

#Estimamos modelo de regresión simple
mod1=lm(precio_millon~Area_contruida, data=datos_sub)
summary (mod1)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = datos_sub)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -617.61  -68.35  -14.63   53.22  484.72 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    187.58253   19.08248    9.83   <2e-16 ***
## Area_contruida   0.99179    0.07221   13.73   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 121.1 on 133 degrees of freedom
## Multiple R-squared:  0.5865, Adjusted R-squared:  0.5834 
## F-statistic: 188.7 on 1 and 133 DF,  p-value: < 2.2e-16

Interpretacion El precio de las vivienda en chipichape se incrementa casi $1.000.000 por cada mts2 adicional de área construida.

Se estima un modelo 2 con variable dummy

mod2=lm(precio_millon~Area_contruida+Banos, data = datos_sub)
summary (mod2)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida + Banos, data = datos_sub)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -427.81  -59.39  -13.05   38.08  649.99 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    114.33667   22.43038   5.097 1.17e-06 ***
## Area_contruida   0.66310    0.09143   7.253 3.11e-11 ***
## Banos           41.14718    7.91599   5.198 7.47e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 110.8 on 132 degrees of freedom
## Multiple R-squared:  0.6568, Adjusted R-squared:  0.6516 
## F-statistic: 126.3 on 2 and 132 DF,  p-value: < 2.2e-16

Interpretación

Intercepto (114.33): El precio promedio de las viviendas es de 115.000.000 de pesos

Area_construida: Por cada metro cuadrado adicional, aumenta $0.663 millones en el precio de las viviendas.

Baños: Por cada baño, aumenta $41 millones en el precio de las viviendas.

R² = 65.16%

mod3=lm(precio_millon~Habitaciones, data = datos_sub)
summary (mod3)
## 
## Call:
## lm(formula = precio_millon ~ Habitaciones, data = datos_sub)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -207.78  -95.33  -22.78   77.31  852.02 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     97.98      32.13    3.05  0.00277 ** 
## Habitaciones    72.45       6.98   10.38  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 140 on 133 degrees of freedom
## Multiple R-squared:  0.4475, Adjusted R-squared:  0.4434 
## F-statistic: 107.7 on 1 and 133 DF,  p-value: < 2.2e-16

Interpretación

Intercepto (97.98): Cuando una vivienda tiene 0 habitaciones (hipoteticamente), el precio promedio de las viviendas en El limonar serían de 97.98 millones de pesos.

Habitaciones(72.45): Por cada Cada habitacion adicional, el precio de la vivienda aumenta en 72.45 millones de pesos.

R² = 44.3%

Modelo de Regresión Lineal Múltiple

mod4=lm(precio_millon~Tipo:Area_contruida,data = datos_sub)
summary (mod4)
## 
## Call:
## lm(formula = precio_millon ~ Tipo:Area_contruida, data = datos_sub)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -328.91  -71.61   -7.16   52.31  632.04 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    235.25733   21.00131  11.202   <2e-16 ***
## TipoApartamento:Area_contruida   0.29538    0.17387   1.699   0.0917 .  
## TipoCasa:Area_contruida          0.90609    0.07059  12.836   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 113.7 on 132 degrees of freedom
## Multiple R-squared:  0.6383, Adjusted R-squared:  0.6329 
## F-statistic: 116.5 on 2 and 132 DF,  p-value: < 2.2e-16

NOTACada coeficiente representa cuánto aumenta el precio (en millones) por cada m² adicional, dependiendo del tipo de vivienda

Apartamento: Por cada m² adicional de un apartamento, incrementa $0.958 millones en el precio.

Casa: Por cada m² adicional de una casa, incrementa de $1.037 millones en el precio.

Evaluación del modelo

R² = 06329: El modelo explica aproximadamente el 63.29% de la variabilidad en el precio, lo cual es bueno.

p-value < 2.2e-16: El modelo es estadísticamente significativo

Conclusión:Este modelo muestra que el impacto del área construida en el precio varía mucho según el tipo de vivienda. Por ejemplo, ampliar una casa genera mucho más valor que ampliar un apartamento.

Seleccion de Variables

modstep=step(mod4)
## Start:  AIC=1281.07
## precio_millon ~ Tipo:Area_contruida
## 
##                       Df Sum of Sq     RSS    AIC
## <none>                             1707024 1281.1
## - Tipo:Area_contruida  2   3012938 4719963 1414.4
summary(modstep)
## 
## Call:
## lm(formula = precio_millon ~ Tipo:Area_contruida, data = datos_sub)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -328.91  -71.61   -7.16   52.31  632.04 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    235.25733   21.00131  11.202   <2e-16 ***
## TipoApartamento:Area_contruida   0.29538    0.17387   1.699   0.0917 .  
## TipoCasa:Area_contruida          0.90609    0.07059  12.836   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 113.7 on 132 degrees of freedom
## Multiple R-squared:  0.6383, Adjusted R-squared:  0.6329 
## F-statistic: 116.5 on 2 and 132 DF,  p-value: < 2.2e-16

Validación de supuestos

par(mfrow=c(2,2))
plot(modstep)

par(mfrow=c(2,2))
plot(mod4)

1. Residuos vs Ajustados (arriba izquierda) ¿Qué busca?: Ver si los errores (residuos) están distribuidos aleatoriamente.

Aquí observamos un ligero ensanchamiento de los residuos conforme aumenta el valor ajustado (entre ~300 y 800), lo que sugiere algo de heterocedasticidad (la varianza de los errores crece un poco con el precio). No se aprecia una curva demasiado definida, por lo que la relación lineal principal parece ser lógica.

2. Q-Q Plot (arriba derecha) ¿Qué busca?: Ver si los residuos siguen una distribución normal.

Aquí los residuos de la cola superior se desvían hacia arriba, y los de la cola inferior hacia abajo.

Esto indica colas más pesadas que la distribución normal, es decir, existen valores extremos que rompen la normalidad estricta de los errores.

Transformación de modelo

mod5=lm(precio_millon~log(Area_contruida),data = datos_sub)
summary (mod5)
## 
## Call:
## lm(formula = precio_millon ~ log(Area_contruida), data = datos_sub)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -515.53  -55.95  -13.07   45.61  438.82 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          -763.98      69.30  -11.03   <2e-16 ***
## log(Area_contruida)   226.30      13.28   17.05   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 105.6 on 133 degrees of freedom
## Multiple R-squared:  0.686,  Adjusted R-squared:  0.6837 
## F-statistic: 290.6 on 1 and 133 DF,  p-value: < 2.2e-16

Interpretación

log(Área_contruida) (226.30): Por cada 1% de metro cuadrado, el precio aumenta en aproximadamente $2.26 millones

Un aumento del 1% en el área se aproxima a un cambio de log(1.10)≈0.095 y 226.30 × 0.095 = 2.25 millones

¿Por que?

Porque un aumento del 10% en el área construida lleva a un aumento de 2.25 millones en el precio de las viviendas.

Pero:

Si el precio de la vivienda crece de forma proporcional al tamaño: si se duplica el área construida, el precio no se duplica, pero aumenta en 226.30 × log(2) ≈ 0.693 y 226.30 × 0.693 = 156.8 millones más en el precio de las viviendas. Esta transformación suaviza las diferencias extremas entre viviendas grandes y pequeñas, y capta mejor la relación no lineal entre tamaño y precio.

par(mfrow=c(2,2))
plot(mod5)

MOD 5

1. Residuos vs Ajustados (arriba izquierda) ¿Qué busca?: Ver si los errores (residuos) están distribuidos aleatoriamente.

Del grafico mod 5, no se observa una patrón curvo fuerte: la relación entre valores ajustados y residuos parece relativamente lineal, lo que es un buen indicio.

2. Q-Q Plot (arriba derecha) ¿Qué busca?: Ver si los residuos siguen una distribución normal.

La mayoría de los puntos caen cerca de la línea diagonal, lo que indica que los residuos se distribuyen casi normalmente. Tambien, hay algunas desviaciones en la cola superior, lo cual indica presencia de valores atípicos leves, pero no excesivos.

mod6=lm(log(precio_millon)~(Area_contruida),data = datos_sub)
summary (mod6)
## 
## Call:
## lm(formula = log(precio_millon) ~ (Area_contruida), data = datos_sub)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.75220 -0.15944  0.01409  0.19702  0.82909 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    5.3184640  0.0528064  100.72   <2e-16 ***
## Area_contruida 0.0025943  0.0001998   12.98   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3352 on 133 degrees of freedom
## Multiple R-squared:  0.559,  Adjusted R-squared:  0.5556 
## F-statistic: 168.6 on 1 and 133 DF,  p-value: < 2.2e-16

Interpretación

Intercepto (5.31): Cuando una vivienda tiene 0 metros cuadrados (lo cual no tiene logica, pero sirve como base matematica), el precio promedio de las viviendas en El limonar serían de 204.95 millones de pesos si le aplicamos un exponecial al valor del intercepto, lo cual quedaria así:

precio_millon = exp(5.3184640) * exp(0.0025943 Area_construida) = exp(5.3184640) = 204.95

Área_contruida (0.0025943): Por cada metro cuadrado adicional, el precio de la vivienda aumenta en aproximadamente 0.26% en promedio.

Un aumento del 1% en el área se aproxima a un cambio de log(1.10)≈0.095 y 0.0025943 × 0.095 = 2.25 millones

par(mfrow=c(2,2))
plot(mod6)

MOD 6

1. Residuos vs Ajustados (arriba izquierda) ¿Qué busca?: Ver si los errores (residuos) están distribuidos aleatoriamente.

Se observa una ligera inclinación hacia la derecha, lo que podría indicar un leve desvío de la linealidad. También se evidencia una ligera heterocedasticidad: los residuos parecen crecer un poco en dispersión hacia la derecha.

2. Q-Q Plot (arriba derecha) ¿Qué busca?: Ver si los residuos siguen una distribución normal.

La mayoría de los puntos sigue la línea diagonal, lo cual es bueno. Sin embargo, hay algunos valores atípicos en las colas, especialmente en la parte inferior, lo que indica posible leve desviación de la normalidad.

CONCLUSION

El modelo 5 es el más sólido en cuanto a ajuste, validez de supuestos, e interpretación económica. La transformación logarítmica de la variable dependiente fue acertada y contribuyó significativamente a mejorar el comportamiento de los residuos y la estabilidad del modelo. Por tanto, este modelo es el recomendado para realizar inferencias o predicciones sobre el precio de las viviendas en función del área construida.

Pronostico

# Predicción del precio para áreas construidas de 50, 100 y 150 m2
nuevos_datos <- data.frame(Area_contruida = c(100, 150,200))
# Pronóstico con el modelo mod5
predicciones <- predict(mod5, newdata = nuevos_datos, interval = "prediction")

# Ver los resultados
print(predicciones)
##        fit       lwr      upr
## 1 278.1734  68.07721 488.2696
## 2 369.9308 160.32348 579.5380
## 3 435.0336 225.44569 644.6216

🧠 Interpretación del resultado

fit: valor pronosticado del precio (en millones).

lwr: límite inferior del intervalo de predicción.

upr: límite superior del intervalo de predicción.

1: 100 m² 2: 150 m² 3: 200 m²

Intrepretación del Pronostico

100 m²: El modelo predice que una vivienda de 100 m² tiene un precio promedio de 278 millones, pero este podría variar entre 68 y 488 millones.

150 m²: Para una vivienda de 150 m², se estima un valor promedio de 370 millones, con un posible rango de entre 160 y 580 millones.

200 m²: El modelo predice que una vivienda de 200 m² costará en promedio 435 millones, pero este podría variar entre 225 y 645 millones.

plot(datos_sub$Area_contruida, datos_sub$precio_millon,
     xlab = "Área construida", ylab = "Precio (millones)", main = "Pronostico del Precio por Area Construida")
curve(predict(mod5, newdata = data.frame(Area_contruida = x)), add = TRUE, col = "darkred")

Se gun lo observado en la grafica se puede inferir que:

Existen una correlación en aumento entre la superficie edificada y el costo. Esto es lógico: a mayor área, mayor precio.

La curva roja indica que el modelo establece una relación no lineal en los datos iniciales, debido a la implementación de log(Area_contruida) en el modelo. Esto genera una curva suavemente creciente, más realista que una recta completamente lineal.

En este espectro, la mayoría de los puntos se encuentran próximos a la línea, lo que señala un adecuado ajuste en características comunes.

¿Para qué servirá esta estimación?

Predicción de precios: Facilita calcular el costo de una casa en El Limonar de acuerdo a su superficie edificada, beneficioso para consumidores y comerciantes.

Decisiones de inversión: Asiste en la valoración de la rentabilidad de construir, renovar o invertir en propiedades en el área.

Desarrollo urbano: Resulta beneficioso para el gobierno o expertos en el estudio de valorización, desigualdades o impactos de proyectos públicos.

Comparativa entre zonas urbanas: Hace más sencillo contrastar El Limonar con otros sectores de Cali para determinar las áreas más rentables.

¿Cómo monetizar esta información?

Asesoramiento personalizado: Vender análisis de valoración a empresas de bienes raíces, compradores o vendedores, con informes detallados.

Servicios para empresas de bienes raíces: Proporcionar estudios predictivos para optimizar tácticas de precios y ventas.