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