Introduccion

De estos datos nos interesa saber si hay una relacion lineal entre los precios(por millon) de la vivienda construida y y el area total que abarca, por ende aplicaremos un estudio de regresion lineal simple

Estudio inicial

Iniciamos abarcando una exploracion inicial sobre las variables a considerar, en este caso los precios(por millon) y el area construida de las viviendas, esto para determinar si de manera individual presentan variaciones

##Exploración de los precios por millon

promedio = mean(PrecioA, na.rm = TRUE)
Desviacion = sd(PrecioA, na.rm = TRUE)
data.frame(promedio,Desviacion)
##   promedio Desviacion
## 1 433.9044    328.665

NOTA: Para hallar la desviacion estandar se tuvo que incluir en la instruccion ‘na.rm’ que excluye los valores NA de las columnas de ambos vectores sin embargo, al revisar la base de datos, no hay valores NA existentes directos dentro de estos pero R los detecta al momento del procesamiento, por ende fue necesario hacer depuracion de estas ‘inexistencias’ y limitar el numero de lectura en cada variable para que los tamaños concuerden y pueda hacerse el analisis pertinente, esto no afectara de manera significativa los resultados finales ya que la cantidad de datos descartados son infimos.

g1=ggplot(data = Datos_Vivienda,mapping = aes(x=Datos_Vivienda$precio_millon))+geom_histogram(fill="purple")+theme_bw()
ggplotly(g1)
## Warning: Use of `Datos_Vivienda$precio_millon` is discouraged.
## ℹ Use `precio_millon` instead.
## Warning: Removed 2 rows containing non-finite outside the scale range
## (`stat_bin()`).

A partir de aqui podemos observar que el precio promedio (por millon) de las viviendas es de aproximadamente 433. Observando la variacion de los precios en la grafica y una desviacion estandar de aproximadamente 328 podremos concluir que los precios varian de una manera notable, lo que hace que volvamos a la pregunta inicial: ¿Esta variacion esta relacionada frente a alguna relacion lineal con el area que abarcan dichas viviendas?

Para responder tal pregunta continuaremos con un analisis exploratorio bivariado

Exploracion Bivariado

g2=ggplot(data=Datos_Vivienda,mapping = aes(x=Datos_Vivienda$Area_contruida,y=Datos_Vivienda$precio_millon))+geom_point()+theme_bw()+
  geom_smooth()
ggplotly(g2)
## Warning: Use of `Datos_Vivienda$Area_contruida` is discouraged.
## ℹ Use `Area_contruida` instead.
## Warning: Use of `Datos_Vivienda$precio_millon` is discouraged.
## ℹ Use `precio_millon` instead.
## Warning: Use of `Datos_Vivienda$Area_contruida` is discouraged.
## ℹ Use `Area_contruida` instead.
## Warning: Use of `Datos_Vivienda$precio_millon` is discouraged.
## ℹ Use `precio_millon` instead.
## Warning: Removed 3 rows containing non-finite outside the scale range
## (`stat_smooth()`).
cor(AreaA,PrecioA)
## [1] 0.687352

Observando la grafica y estudiando la correlacion se puede observar que hay indicios de una posible relacion lineal positiva donde el precio(por millon) de la vivienda aumenta conforme aumenta el area que abarca, sin embargo, este coeficiente no es un valor significativamente alto (o demasiado cercano a 1), por ende sera necesario hacer observaciones directas al modelo de regresion lineal simple para llegar a una conclusion final

Estimacion del modelo de Regresion Lineal Simple

Para responder tal pregunta continuaremos con un analisis exploratorio bivariado

mod_you=lm(PrecioA~AreaA,data=Datos_Vivienda)
mod_you
## 
## Call:
## lm(formula = PrecioA ~ AreaA, data = Datos_Vivienda)
## 
## Coefficients:
## (Intercept)        AreaA  
##      157.48         1.58

Luego el modelo estimado es Precio = 157.48 + (1.58)*Area. A partir de este modelo podemos interpretar que una vivienda tiene un precio inicial de aproximadamente 157 millones, e ira aumentando cada vez que la construccion de la vivienda abarque aproximadamente 1.858 metros cuadrados adicionales

summary(mod_you)
## 
## Call:
## lm(formula = PrecioA ~ AreaA, data = Datos_Vivienda)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2659.88  -120.78   -47.55    67.27  1330.10 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 157.47636    4.13640   38.07   <2e-16 ***
## AreaA         1.58018    0.01831   86.30   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 238.7 on 8317 degrees of freedom
## Multiple R-squared:  0.4725, Adjusted R-squared:  0.4724 
## F-statistic:  7448 on 1 and 8317 DF,  p-value: < 2.2e-16

A partir de esta tabla podemos hacer la prueba del valor P para determinar si el area de la vivienda es significativa con respecto a la relacion que tiene con el precio(por millon)

En este caso vemos que el valor P <2e-16. Como este valor p es significativamente menor a 0.05, se considera que el area de la vivienda tiene una relacion significativa con el precio(por millon) de la misma, adicionalmente, al aceptar este modelo, podemos explicar la variabilidad en los precios en un aproximado del 48% de los datos registrados(casi la mitad)

##Predecir con el Modelo
#Estimar las ventas para un mes en el cual se invierta en mercadeo en youtube 65 mil dólares.

predict(mod_you,list(AreaA=450),interval="confidence",level=0.95)
##        fit      lwr      upr
## 1 868.5558 857.4298 879.6818

Luego el precio esperado de una vivienda que abarca 450 metros cuadrados seria aproximadamente 868.555 (por millon). El intervalo de confianza para la prediccion de las ventas nos indicaria que el promedio del precio estaria entre 857.42 y 879.68 con un 95% de confianza

A partir de aqui podemos aceptar que existe una posible relacion lineal entre el precio de la vivienda y el area que la abarca, ahora evaluaremos el poder de prediccion de nuestro modelo lineal simple usando una validacion cruzada

id_modelar=sample(1:200,size = 160)
Vivienda_modelar=Datos_Vivienda[id_modelar,]
Vivienda_validar=Datos_Vivienda[-id_modelar,]

##Paso 2 - Estimar el Modelo Set de Modelar
mod_you_modelar=lm(PrecioA~AreaA,data=Vivienda_modelar)

##Paso 3 - Predeccir Set de Validación
Prcios_pred=predict(mod_you_modelar,list(AreaA=Vivienda_validar$Area_contruida))

##Paso 4 - Comparar Ventas del Modelo y Reales
Precio_real=Vivienda_validar$precio_millon
error=Precio_real-Prcios_pred
res=data.frame(Precio_real,Prcios_pred,error)

##Paso 5 - Calcular Indicador de Evaluación de la Predicción
MAE=mean(abs(error),na.rm = TRUE) #Mean Absolut Error (Error Medio Absoluto)
MAE
## [1] 159.3099

Luego el modelo predice los Precios(por millon) de una vivienda, dependiendo de su area, con un error de aproximadamente 159.47

Tomando en cuenta todo lo observado anteriormente, notamos que el error de estimacion es notablemente alto y el alcance de variabilidad de los precios (48%) sigue siendo notablemente bajo (no explica la mayor parte de los datos disponibles) por ende es necesario hacer analisis de otro tipo de modelo, posiblemente tendremos que incluir mas variables

#is.na(Datos_Vivienda) #Para ver la base de datos con NA
colSums(is.na(Datos_Vivienda)) # Para determinar cuantos NA hay en cada columna
##               Zona               piso            Estrato      precio_millon 
##                  3                  3                  3                  2 
##     Area_contruida       parqueaderos              Banos       Habitaciones 
##                  3                  3                  3                  3 
##               Tipo             Barrio cordenada_longitud  Cordenada_latitud 
##                  3                  3                  3                  3
Datos2 <- na.omit(Datos_Vivienda) #Asignamos los datos depurados a otra variable
colSums(is.na(Datos2))
##               Zona               piso            Estrato      precio_millon 
##                  0                  0                  0                  0 
##     Area_contruida       parqueaderos              Banos       Habitaciones 
##                  0                  0                  0                  0 
##               Tipo             Barrio cordenada_longitud  Cordenada_latitud 
##                  0                  0                  0                  0

Regresion Lineal Multiple

Nuestro objectivo ahora es identificar un nuevo modelo que tenga una mejor capacidad de prediccion y menos margen de error a comparacion del modelo lineal simple anterior. Ya hemos identificado que hay relacion entre los precios y el area construida, mas sin embargo, el alcance de variabilidad tomando solo en cuenta esta relacion termina siendo notablemente bajo, por ende, incluiremos mas variables en la relacion y construiremos dos modelos de regresion lineal multiple.

En principio uno podria pensar que el precio de la vivienda aumentaria dependiendo del estrato en que se construya y la cantidad de habitaciones que posea. Para poder probar esta hipotesis evaluaremos la relacion que tienen estas variables con el precio de las viviendas

# Seleccionamos las variables que nos interesan
Habitaciones<- na.omit(Datos_Vivienda$Habitaciones)
Estrato <- na.omit(Datos_NO$Estrato)
plot(Datos_NO[, c(3, 4, 5, 8)])

Analisis inicial

cor(Datos_NO[, c(3, 4, 5, 8)])
##                    Estrato precio_millon Area_contruida Habitaciones
## Estrato         1.00000000     0.6098066      0.2743233  -0.07137615
## precio_millon   0.60980664     1.0000000      0.6873520   0.26409121
## Area_contruida  0.27432332     0.6873520      1.0000000   0.51691292
## Habitaciones   -0.07137615     0.2640912      0.5169129   1.00000000

Aqui se definen 2 conclusiones:

Comprobemos la significancia con una prueba de valor P, para esto definamos nuestro modelo linea 1 (como candidato)

modeloM1 <- lm(PrecioA ~ AreaA + Estrato + Habitaciones, data = Datos_NO)
summary(modeloM1)
## 
## Call:
## lm(formula = PrecioA ~ AreaA + Estrato + Habitaciones, data = Datos_NO)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1948.98  -102.11   -23.74    64.44  1171.90 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -474.23594   11.94401 -39.705   <2e-16 ***
## AreaA           1.28139    0.01832  69.938   <2e-16 ***
## Estrato       146.10115    2.18418  66.891   <2e-16 ***
## Habitaciones    1.94297    1.73022   1.123    0.261    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 190.4 on 8315 degrees of freedom
## Multiple R-squared:  0.6644, Adjusted R-squared:  0.6643 
## F-statistic:  5487 on 3 and 8315 DF,  p-value: < 2.2e-16

H0: La variable NO es significativa H1: La variable es significativa

Podemos ver que en las variables de Area y Estrato, sus correspondientes valores P son menores a 0.05 asi que se rechaza H0 y las variables son significativas. Sin embargo, esto no ocurre con el valor P de Habitaciones, que claramente no rechaza la hipotesis inicial.

Tomando en cuenta las conclusiones de la prueba del valor P y las correlaciones, se decide que esta variable no es significativa ni importante en la variabilidad de los precios, por ende se elimina y nos quedamos con Estrato que se añade como nueva variable en la relacion

modeloM2 <- lm(PrecioA ~ AreaA + Estrato, data = Datos_NO)
modeloM2
## 
## Call:
## lm(formula = PrecioA ~ AreaA + Estrato, data = Datos_NO)
## 
## Coefficients:
## (Intercept)        AreaA      Estrato  
##    -466.301        1.293      145.466

A partir de esto, nuestro primer modelo de regresion lineal multiple nos dice que: - El precio del terreno comienza inicialmente con una devaluacio de aproximadamente 466 millones (probablemente debido al costo de adquisicion)

summary(modeloM2)
## 
## Call:
## lm(formula = PrecioA ~ AreaA + Estrato, data = Datos_NO)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1971.20  -101.63   -23.92    63.63  1177.39 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -466.30084    9.62966  -48.42   <2e-16 ***
## AreaA          1.29290    0.01519   85.12   <2e-16 ***
## Estrato      145.46598    2.10971   68.95   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 190.4 on 8316 degrees of freedom
## Multiple R-squared:  0.6643, Adjusted R-squared:  0.6643 
## F-statistic:  8230 on 2 and 8316 DF,  p-value: < 2.2e-16

Luego el modelo explica la variabilidad en los precios en un aproximado del 66% de los datos registrados, esto es evidentemente una mejoria con respecto al 44% del modelo simple anterior.

Ahora evaluemos el modelo comparandolo con los datos del modelo de regresion lineal simple anterior # Estimar El precio de una vivienda si su area abarcada es de 450 metros cuadrados

predict(modeloM2,list(AreaA=450, Estrato = 3),interval="confidence",level=0.95)
##        fit      lwr     upr
## 1 551.9003 539.2585 564.542

Luego el modelo nos dice que el precio de una vivienda de 450 metros cuadrados construida en un barrio de estrato 3 seria de aproximadamente 551 millones. El intervalo de confianza para la prediccion nos diria que el promedio debatiria entre 539 millones y 564 millones.

Nota: Debido a ciertos problemas con la variable ‘Estrato’ en los datos separados de modelacion que no se pudieron resolver, no fue posible hacer la validacion cruzada.

Ya evaluamos la eficacia del primer modelo de regresion lineal multiple, sin embargo, vamos a ver si podemos mejorar la eficacia de dicho modelo, para esto incluiremos la variable categorica TIPO que especifica el tipo de vivienda a construir (Casa o apartamento)

TIPO <- Datos_NO$Tipo
boxplot(PrecioA~TIPO,col="gray")

modeloM3 <- lm(PrecioA ~ AreaA + Estrato + TIPO, data = Datos_NO)
summary(modeloM3)
## 
## Call:
## lm(formula = PrecioA ~ AreaA + Estrato + TIPO, data = Datos_NO)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1968.44  -101.58   -24.15    63.82  1177.37 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -466.89985   10.23963 -45.597   <2e-16 ***
## AreaA          1.29091    0.01909  67.623   <2e-16 ***
## Estrato      145.59244    2.23406  65.169   <2e-16 ***
## TIPOCasa       0.93366    5.42383   0.172    0.863    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 190.4 on 8315 degrees of freedom
## Multiple R-squared:  0.6643, Adjusted R-squared:  0.6642 
## F-statistic:  5486 on 3 and 8315 DF,  p-value: < 2.2e-16

Luego la prueba del valor P nos dice que la variable TIPO podria no ser significativa como añadido adicional en las relaciones de variabilidad de los precios de las viviendas, y tomando en cuenta el diagrama anterior, hay muchos datos atipicos que se alejan de la tendecia central, explicada en cada tipo de vivienda

Finalmente esta segunda variable no aplica diferencia significativa en su inclusion, por ende no hay necesidad de tomarla en cuenta en nuestro modelo de prediccion final