library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(RecordLinkage)
library(leaflet)
library(htmltools)
library(readxl)
datos <- read_excel("C:/Users/portatil/Downloads/Datos_Vivienda.xlsx")
View (datos)
id=1:dim(datos)[1]
datos = data.frame(id,datos)

library(RecordLinkage)

pos = which(jarowinkler("colseguros",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
430 430 Zona Sur 2 4 430 330 1 4 5 Casa colseguros -76.49571 3.41717
840 840 Zona Sur 4 4 138 60 1 1 3 Apartamento colseguros -76.50397 3.42200
863 863 Zona Sur 4 4 128 55 1 1 2 Apartamento colseguros -76.50400 3.40000
2297 2297 Zona Sur 2 5 500 200 1 3 4 Casa colseguros -76.51972 3.44000
2649 2649 Zona Sur 4 4 162 74 1 3 3 Apartamento colseguros -76.52122 3.42730
2833 2833 Zona Sur NA 4 360 200 2 4 8 Casa colseguros -76.52222 3.42056
library(dplyr)
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"
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
311.2045 315 120 800 154.8335
length(pos)
## [1] 44

Regresión Lineal Simple

Datos cuantitativos

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 
## -198.83  -44.65  -20.22   36.74  170.26 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    120.19394   18.59201   6.465 8.51e-08 ***
## Area_contruida   1.04772    0.08304  12.617 7.06e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 71.58 on 42 degrees of freedom
## Multiple R-squared:  0.7912, Adjusted R-squared:  0.7863 
## F-statistic: 159.2 on 1 and 42 DF,  p-value: 7.063e-16

En la regresión simple (mod1), me dice que el precio de la vivienda se incrementa casi $1.000.000 por cada mts2 adicional de área construida.

R-squared: 0.7912, Adjusted R-squared: 0.7863 El modelo 1 explica casi el 80% la variacion en los precios de las viviendas del barrio colseguros, es un buen modelo

mod2=lm(precio_millon~Habitaciones, data=datos_sub)
summary (mod2)
## 
## Call:
## lm(formula = precio_millon ~ Habitaciones, data = datos_sub)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -165.485  -67.295   -8.733   46.267  274.515 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    41.981     34.651   1.212    0.232    
## Habitaciones   60.438      7.086   8.529 1.04e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 94.79 on 42 degrees of freedom
## Multiple R-squared:  0.6339, Adjusted R-squared:  0.6252 
## F-statistic: 72.74 on 1 and 42 DF,  p-value: 1.036e-10

En este caso de regresion simple (mod2) me dice que el precio de la vivienda se incremente en casi 60.000.000 por cada habitación extra

R-squared: 0.6339, Adjusted R-squared: 0.6252 El (mod2) explica el 63% de la variacion en los precios, es un porcentaje aceptable

mod3=lm(precio_millon~Banos, data=datos_sub)
summary (mod3)
## 
## Call:
## lm(formula = precio_millon ~ Banos, data = datos_sub)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -235.70  -55.63  -19.32   43.05  412.30 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   112.94      38.68   2.920  0.00561 ** 
## Banos          68.69      11.92   5.761 8.77e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 117.1 on 42 degrees of freedom
## Multiple R-squared:  0.4414, Adjusted R-squared:  0.4281 
## F-statistic: 33.19 on 1 and 42 DF,  p-value: 8.767e-07

En este caso (mod3) indica que el precio de vivienda se aumenta aproximadamente en 68.690.000 por cada baño adicional que exista en en la vivienda R-squared: 0.4414, Adjusted R-squared: 0.4281 Este modelo (mod3) explica alrededor del 44% de la diferencia entre precios, es una variable aceptable para explicar la diferencia

Variable Dummy o cualitativa

Pero si cambiamos la regresión con una variable cualitativa, como por ejemplo Habitaciones. Aparecen todas las habitaciones? Si hacemos un tabla cuantas habitaciones deberian aparecer?

table(datos_sub$Tipo)
## 
## Apartamento        Casa 
##          22          22

Se estima un modelo 4 con variable dummy

El modelo 4 estima el precio promedio de la vivienda en función del tipo de vivienda

mod4=lm(precio_millon~Tipo, data = datos_sub)
summary (mod4)
## 
## Call:
## lm(formula = precio_millon ~ Tipo, data = datos_sub)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -284.9  -69.5  -27.2   35.0  385.1 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   207.50      24.57   8.446 1.34e-10 ***
## TipoCasa      207.41      34.74   5.970 4.39e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 115.2 on 42 degrees of freedom
## Multiple R-squared:  0.459,  Adjusted R-squared:  0.4462 
## F-statistic: 35.64 on 1 and 42 DF,  p-value: 4.389e-07

Interpretación

Se esta utilizando como base el “tipo apartamento”, lo que se puede interpretar aqui es que las viviendas tipo casa y tipo apartamento tienen valores bastante similares con solo una diferencia de 0.09 millones (Tipo casa es mas barata) R-squared: 0.459, Adjusted R-squared: 0.4462 Esto indica que el modelo explica alrededor del 45% de la diferencia entre los precios, es aceptable.

##Analisis Bivariado

##Exploración Bivariada - (Relaciones entre precio vivienda y area construida)

g1=ggplot(data=datos_sub,mapping = aes(x=precio_millon,y=Area_contruida))+geom_point()+theme_bw()+
  geom_smooth()
ggplotly(g1)
cor(datos_sub$precio_millon,datos_sub$Area_contruida)
## [1] 0.8895118

Se evidencia una alta relacion, ademas de positiva, con un coeficiente de correlacion de 0.88, es una buena relacion entre variables

##Exploración Bivariada - (Relaciones entre precio vivienda y cantidad de habitaciones)

g1=ggplot(data=datos_sub,mapping = aes(x=precio_millon,y=Habitaciones))+geom_point()+theme_bw()+
  geom_smooth()
ggplotly(g1)
cor(datos_sub$precio_millon,datos_sub$Habitaciones)
## [1] 0.796209

En este caso tiene una misma correlacion positiva y un coeficiente de correlacion de 0.79, nuevamente relacion bastante buena entre variables

#Modelación Rmultiple

mod5=lm(precio_millon~Habitaciones+Area_contruida+Banos,data = datos_sub)
summary (mod5)
## 
## Call:
## lm(formula = precio_millon ~ Habitaciones + Area_contruida + 
##     Banos, data = datos_sub)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -157.653  -38.676   -7.312   35.624  181.637 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     52.2611    23.1774   2.255   0.0297 *  
## Habitaciones    17.5289     8.0263   2.184   0.0349 *  
## Area_contruida   0.7615     0.1027   7.414    5e-09 ***
## Banos           14.5596     9.1389   1.593   0.1190    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 61.65 on 40 degrees of freedom
## Multiple R-squared:  0.8525, Adjusted R-squared:  0.8415 
## F-statistic: 77.08 on 3 and 40 DF,  p-value: < 2.2e-16

##Seleccion de variables

modstep=step(mod5)
## Start:  AIC=366.49
## precio_millon ~ Habitaciones + Area_contruida + Banos
## 
##                  Df Sum of Sq    RSS    AIC
## <none>                        152024 366.49
## - Banos           1      9646 161670 367.20
## - Habitaciones    1     18127 170151 369.45
## - Area_contruida  1    208914 360938 402.54
summary(modstep)
## 
## Call:
## lm(formula = precio_millon ~ Habitaciones + Area_contruida + 
##     Banos, data = datos_sub)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -157.653  -38.676   -7.312   35.624  181.637 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     52.2611    23.1774   2.255   0.0297 *  
## Habitaciones    17.5289     8.0263   2.184   0.0349 *  
## Area_contruida   0.7615     0.1027   7.414    5e-09 ***
## Banos           14.5596     9.1389   1.593   0.1190    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 61.65 on 40 degrees of freedom
## Multiple R-squared:  0.8525, Adjusted R-squared:  0.8415 
## F-statistic: 77.08 on 3 and 40 DF,  p-value: < 2.2e-16

##Validación de Supuestos

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

mod6=lm(precio_millon~Habitaciones+Area_contruida,data = datos_sub)
summary (mod5)
## 
## Call:
## lm(formula = precio_millon ~ Habitaciones + Area_contruida + 
##     Banos, data = datos_sub)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -157.653  -38.676   -7.312   35.624  181.637 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     52.2611    23.1774   2.255   0.0297 *  
## Habitaciones    17.5289     8.0263   2.184   0.0349 *  
## Area_contruida   0.7615     0.1027   7.414    5e-09 ***
## Banos           14.5596     9.1389   1.593   0.1190    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 61.65 on 40 degrees of freedom
## Multiple R-squared:  0.8525, Adjusted R-squared:  0.8415 
## F-statistic: 77.08 on 3 and 40 DF,  p-value: < 2.2e-16

#Transformación de datos

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

mod7=lm(precio_millon~(log(Habitaciones+Area_contruida)),data = datos_sub)
summary(mod7)
## 
## Call:
## lm(formula = precio_millon ~ (log(Habitaciones + Area_contruida)), 
##     data = datos_sub)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -137.07  -41.57  -12.65   32.33  220.14 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                         -696.42      69.92   -9.96 1.26e-12 ***
## log(Habitaciones + Area_contruida)   201.80      13.87   14.55  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 63.75 on 42 degrees of freedom
## Multiple R-squared:  0.8344, Adjusted R-squared:  0.8305 
## F-statistic: 211.7 on 1 and 42 DF,  p-value: < 2.2e-16
par(mfrow=c(2,2))
plot(mod7)

mod8=lm(precio_millon~Habitaciones+log(Area_contruida),data = datos_sub)
summary(mod8)
## 
## Call:
## lm(formula = precio_millon ~ Habitaciones + log(Area_contruida), 
##     data = datos_sub)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -121.70  -33.70  -11.40   17.67  208.35 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         -554.914     75.684  -7.332 5.62e-09 ***
## Habitaciones          19.382      6.657   2.912  0.00579 ** 
## log(Area_contruida)  157.135     19.100   8.227 3.24e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 58.92 on 41 degrees of freedom
## Multiple R-squared:  0.8619, Adjusted R-squared:  0.8552 
## F-statistic:   128 on 2 and 41 DF,  p-value: < 2.2e-16
par(mfrow=c(2,2))
plot(mod8)

El modelo mejor adaptado es el Modelo 8, en cuanto al grafico Residuals vs Fitted, muestra un pequeño desvio al final de la linea lo cual indica un poco de heterosticidad, pero en general muestra homocedasticidad. En cuanto al Q-Q Residuals, los puntos siguen en gran parte la linea diagonal, a excepcion de unos cuantos rezagos, pero en general muestra una buena dinamica.

En cuanto a la significancia de las variables, todas las variables son significantes en este modelo.

Multiple R-squared: 0.8619, Adjusted R-squared: 0.8552 Esto quiere decir que el modelo explica alrededor del 85% de la variacion en el precio de la vivienda, es un muy buen porcentaje.

##Pronostico Hipotetico

Transformación de datos

summary(datos_sub$Habitaciones)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   3.000   4.000   4.455   5.000  10.000
summary(datos_sub$Area_contruida)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   55.00   72.25  155.00  182.31  243.25  600.00
# Crear el nuevo dato SIN aplicar log() manualmente
nuevo_dato <- data.frame(
  Habitaciones = 4,
  Area_contruida = 55,155,600
  )
# Hacer el pronóstico usando mod8
predict(mod8, newdata = nuevo_dato)
##        1 
## 152.3063

Esto lo que indica es que una vivienda con 4 habitaciones y 155 metros cuadrados de area construida, aproximadamente tendra un valor de 315.11 millones de pesos.

##¿Esta información o estimación para que serviria? ¿Como monetizaria esta modelación?

Esta información me sirve para estimar el precio si deseo comprar una vivienda en el barrio de colseguros, puedo estimar el precio teniendo en cuenta el area construida y la cantidad de habitaciones que son variables con gran significancia, asi mismo se puede estimar si el precio de la vivienda se encuentra sobreestimado o subestimado.

Realizaria la monetizacion de este modelo tanto para vendedores como para los compradores, en el caso de los vendedores los ayudaria a estimar cual es el valor en el que deberian vender su vivienda, y en el caso de los compradores, se los venderia con la intencion de que realicen la comparacion de las posibles viviendas que deseen.