Con la base de datos de precios de vivienda, realizar un informa que contenga los siguientes puntos
library(readxl)
datos_vivienda <- read_excel("E:/Data Science/Estadistica/Mod 1/Nueva carpeta/Datos_Vivienda.xlsx")
attach(datos_vivienda)
head(datos_vivienda)
| Zona | piso | Estrato | precio_millon | Area_contruida | parqueaderos | Banos | Habitaciones | Tipo | Barrio | cordenada_longitud | Cordenada_latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Zona Sur | 2 | 6 | 880 | 237 | 2 | 5 | 4 | Casa | pance | -76.46300 | 3.43000 |
| Zona Oeste | 2 | 4 | 1200 | 800 | 3 | 6 | 7 | Casa | miraflores | -76.46400 | 3.42800 |
| Zona Sur | 3 | 5 | 250 | 86 | NA | 2 | 3 | Apartamento | multicentro | -76.46400 | 3.42900 |
| Zona Sur | NA | 6 | 1280 | 346 | 4 | 6 | 5 | Apartamento | ciudad jardv<U+2260>n | -76.46400 | 3.43300 |
| Zona Sur | 2 | 6 | 1300 | 600 | 4 | 7 | 5 | Casa | pance | -76.46438 | 3.43463 |
| Zona Sur | 3 | 6 | 513 | 160 | 2 | 4 | 4 | Casa | pance | -76.46438 | 3.43463 |
A. Realice un filtro a la base de datos e incluya solo las ofertas de apartamentos, de la zona norte de la ciudad con precios inferiores a los 500 millones de pesos y areas menores a 300 m2, presente los primeros 3 registros de la base y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de la base, discutir si todos los puntos se encuentran en la zona norte o se presentan valores en otras zonas, por que?
| Zona | piso | Estrato | precio_millon | Area_contruida | parqueaderos | Banos | Habitaciones | Tipo | Barrio | cordenada_longitud | Cordenada_latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Zona Norte | 2 | 3 | 135 | 56 | 1 | 1 | 3 | Apartamento | torres de comfandi | -76.46745 | 3.40763 |
| Zona Norte | NA | 3 | 78 | 54 | 2 | 1 | 3 | Apartamento | chiminangos | -76.47820 | 3.44898 |
| Zona Norte | NA | 5 | 340 | 106 | 2 | 2 | 3 | Apartamento | la flora | -76.48200 | 3.43500 |
## [1] "Zona" "piso" "Estrato"
## [4] "precio_millon" "Area_contruida" "parqueaderos"
## [7] "Banos" "Habitaciones" "Tipo"
## [10] "Barrio" "cordenada_longitud" "Cordenada_latitud"
| Zona | precio_millon | Area_contruida | Tipo |
|---|---|---|---|
| Zona Norte | 135 | 56 | Apartamento |
| Zona Norte | 78 | 54 | Apartamento |
| Zona Norte | 340 | 106 | Apartamento |
| Zona Norte | 135 | 103 | Apartamento |
| Zona Norte | 75 | 54 | Apartamento |
Al visualizar en el mapa la ubicación de los datos de acuerdo a sus coordenadas de latitud y longitud se observan varios puntos que no se encuentran como tal en el norte de la ciudad. Considerando que la variable zona al ser categorica puede tener sesgos entonces se adicionan filtros en las coordenadas para obtener unos datos mas coherentes con lo esperado. adicionalmente para considerar la variable parqueaderos en el modelo se realiza la tranformación de los datos existentes con valor NA en 0, de esta forma se convierte esa columna en valores numericos.
pos=which(datos_vivienda$Tipo=="Apartamento" &datos_vivienda$Zona=="Zona Norte" &datos_vivienda$precio_millon<500 &datos_vivienda$Area_contruida<300 &datos_vivienda$Cordenada_latitud>3.4630 &datos_vivienda$cordenada_longitud<76.4750)
Datos_sub=datos_vivienda[pos,]
pos1=which(Datos_sub$parqueaderos=="NA")
Datos_sub$parqueaderos[pos1]=0
Datos_sub$parqueaderos=as.numeric(Datos_sub$parqueaderos)
leaflet() %>% addCircleMarkers(lng = Datos_sub$cordenada_longitud,lat =Datos_sub$Cordenada_latitud, radius = 0.3,color = "Purple",label = Datos_sub$ID) %>% addTiles()
B. Realice un analisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apartamento) en función del area construida, estrato y si tiene parqueadero. use graficos interactivos con plotly e interprete los resultados.
require(ggplot2)
require(plotly)
Grafico1=ggplot(data=Datos_sub,aes(y=precio_millon,x=Area_contruida))+geom_point()+geom_smooth()
ggplotly(Grafico1)
Grafico1=ggplot(data=Datos_sub,aes(y=precio_millon,x=Estrato))+geom_point()+geom_smooth()
ggplotly(Grafico1)
Grafico1=ggplot(data=Datos_sub,aes(y=precio_millon,x=parqueaderos))+geom_point()+geom_smooth()
ggplotly(Grafico1)
correlacionArea = cor(Datos_sub$Area_contruida,Datos_sub$precio_millon, use= "complete.obs")
correlacionEstrato = cor(Datos_sub$Estrato,Datos_sub$precio_millon, use= "complete.obs")
correlacionParqueaderos = cor(Datos_sub$parqueaderos,Datos_sub$precio_millon, use= "complete.obs")
data.frame(correlacionArea,correlacionEstrato,correlacionParqueaderos)
| correlacionArea | correlacionEstrato | correlacionParqueaderos |
|---|---|---|
| 0.7214502 | 0.8368432 | 0.6392084 |
Se aprecia segun los graficos y datos de la tabla anterior, que existe correlación positiva entre el precio de los apartamentos y el área construida, es decir que a mayor area el precio tiende a aumentar. de igual manera se observa correlación positiva entre los estratos y precio. acerca de los parqueaderos tambien se tiene la tendencia en que a mayor numero de parqueaderos se incrementa el precio pero su correlación es mucho menor.
C. Estime un modelo de regresion lineal multiple con las variables del punto anterior e interprete los coeficientes si son estadisticamente significativos. las interpretaciones deben estar contextualizadas y discutir si los resultados son logicos. adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicadiones. ¿Que podria hacer para mejorarlo?
modelo=lm(precio_millon~Area_contruida+Estrato+parqueaderos,data=Datos_sub)
summary(modelo)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida + Estrato + parqueaderos,
## data = Datos_sub)
##
## Residuals:
## Min 1Q Median 3Q Max
## -196.921 -30.312 -1.393 24.665 220.503
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -160.89145 9.01491 -17.847 < 2e-16 ***
## Area_contruida 1.01191 0.08495 11.911 < 2e-16 ***
## Estrato 68.50375 2.83259 24.184 < 2e-16 ***
## parqueaderos 25.86468 3.56233 7.261 9.27e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 52.47 on 787 degrees of freedom
## Multiple R-squared: 0.7749, Adjusted R-squared: 0.774
## F-statistic: 902.9 on 3 and 787 DF, p-value: < 2.2e-16
Beta0=modelo$coefficients[1]
Beta1=modelo$coefficients[2]
Beta2=modelo$coefficients[3]
Beta3=modelo$coefficients[4]
data.frame(Beta0,Beta1,Beta2,Beta3)
| Beta0 | Beta1 | Beta2 | Beta3 | |
|---|---|---|---|---|
| (Intercept) | -160.8914 | 1.011912 | 68.50375 | 25.86468 |
Modelo:
\(precioMillon = -160,89 + 1,01*AreaConstruida + 68,50*Estrato + 25,86*Parqueaderos\)
En el modelo encontrado el intercepto no puede interpretarse puesto que significaria que ante una area de cero metros y un estrato cero el precio del apartamento seria negativo
el coeficiente \(Beta_1=1,01\) indica que por cada metro de area construida el precio del apartamento aumenta en 1,01 millones
El coeficiente \(Beta_2=68,50\) indica que por cada aumento de Estrato el precio del inmueble se incrementa 68,50 millones
El coeficiente \(Beta_3=25,86\) indica que por cada aumento de numero de parqueaderos el precio del inmueble se incrementa 25,86 millones
los coeficientes \(Beta1\) y \(Beta2\) muestran una alta significancia el tener un \(valor-p:2e-16 ***\)
el coeficiente \(Beta3\) aun cuando tiene un mayor valor p, es bastante pequeño para considerar su significancia en el modelo
El coeficiente de determinación \(R^2=0,774\) nos indica que el modelo propuesto explica el 77,4% de la variación en el precio de la vivienda
Como ajuste al modelo se puede realizar la transformación mediante logaritmo con lo cual obtenemos un coeficiente de determinación de \(R^2=0,8233\)
modelo2=lm(log(precio_millon)~log (Area_contruida)+log(Estrato)+parqueaderos,data=Datos_sub)
summary(modelo2)
##
## Call:
## lm(formula = log(precio_millon) ~ log(Area_contruida) + log(Estrato) +
## parqueaderos, data = Datos_sub)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.73085 -0.13764 0.02095 0.14955 0.95399
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.40211 0.12682 11.056 < 2e-16 ***
## log(Area_contruida) 0.46283 0.03660 12.644 < 2e-16 ***
## log(Estrato) 1.29185 0.04921 26.251 < 2e-16 ***
## parqueaderos 0.10073 0.01465 6.876 1.26e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2141 on 787 degrees of freedom
## Multiple R-squared: 0.8239, Adjusted R-squared: 0.8233
## F-statistic: 1228 on 3 and 787 DF, p-value: < 2.2e-16
D.Realice la validación de supuestos del modelo e interprete los resultados
par(mfrow=c(2,2))
plot(modelo)
par(mfrow=c(2,2))
plot(modelo2)
Validacion de los supuestos del modelo
Con el modelo identificado predecir el precio de un apartamento con 100m2, de estrato 4 con parqueadero. ¿si este apartamento lo estan ofreciendo en 450 millones, cual seria su opinion con base en el resultado del modelo? ¿Considera que es buena oferta?
exp(predict(modelo2,list(Area_contruida=100,Estrato=4,parqueaderos=1),interval = "confidence",level = 0.95))
## fit lwr upr
## 1 227.0373 221.9578 232.233
Los resultados del modelo indican que con un intervalo de confianza de 0,95 el valor del apartamento con las caracteristicas mencionadas estaria entre 222 y 232 millones, por lo tanto la oferta de 450 millones se encuentra muy por encima de este rango, estaria al doble del precio que nos entrega el modelo
F. Con las predicciones del modelo, sugiera potenciales ofertas para una persona interesada en un apartamento en la zona norte con mas de 100m2 de area, de estrato 4, que tenga parqueadero. tenga en cuenta que la persona tiene un credito preaprobado de maximo 400 millones de pesos. realice un analisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir
pos3=which(Datos_sub$precio_millon<400 &Datos_sub$Area_contruida>100 &Datos_sub$Estrato=="4" &Datos_sub$parqueaderos!=0)
Datos_sub3=Datos_sub[pos3,]
Datos_sub3
| Zona | piso | Estrato | precio_millon | Area_contruida | parqueaderos | Banos | Habitaciones | Tipo | Barrio | cordenada_longitud | Cordenada_latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Zona Norte | 4 | 4 | 380 | 123.00 | 1 | 3 | 3 | Apartamento | la flora | -76.51437 | 3.48618 |
| Zona Norte | NA | 4 | 350 | 130.00 | 1 | 2 | 3 | Apartamento | la flora | -76.52100 | 3.49000 |
| Zona Norte | 1 | 4 | 290 | 108.00 | 1 | 2 | 3 | Apartamento | la flora | -76.52115 | 3.48930 |
| Zona Norte | 4 | 4 | 185 | 104.00 | 1 | 3 | 3 | Apartamento | san vicente | -76.52300 | 3.46400 |
| Zona Norte | NA | 4 | 265 | 125.00 | 2 | 3 | 4 | Apartamento | la flora | -76.52353 | 3.48157 |
| Zona Norte | 2 | 4 | 380 | 126.00 | 2 | 3 | 4 | Apartamento | la flora | -76.52432 | 3.48254 |
| Zona Norte | 6 | 4 | 270 | 152.00 | 1 | 3 | 4 | Apartamento | versalles | -76.52515 | 3.46334 |
| Zona Norte | NA | 4 | 340 | 121.00 | 2 | 3 | 3 | Apartamento | menga | -76.52566 | 3.49078 |
| Zona Norte | 3 | 4 | 300 | 287.00 | 1 | 3 | 4 | Apartamento | la campiv±a | -76.52673 | 3.47907 |
| Zona Norte | 2 | 4 | 240 | 103.00 | 1 | 2 | 3 | Apartamento | versalles | -76.52700 | 3.46500 |
| Zona Norte | 8 | 4 | 397 | 160.48 | 1 | 4 | 4 | Apartamento | la campiv±a | -76.52741 | 3.48002 |
| Zona Norte | 2 | 4 | 300 | 163.00 | 1 | 3 | 3 | Apartamento | san vicente | -76.52785 | 3.46701 |
| Zona Norte | 4 | 4 | 250 | 118.00 | 1 | 2 | 3 | Apartamento | versalles | -76.52793 | 3.46699 |
| Zona Norte | 7 | 4 | 250 | 106.00 | 1 | 2 | 3 | Apartamento | versalles | -76.52812 | 3.46362 |
| Zona Norte | 2 | 4 | 300 | 136.00 | 2 | 3 | 3 | Apartamento | el bosque | -76.52872 | 3.48474 |
| Zona Norte | 2 | 4 | 300 | 136.00 | 2 | 2 | 3 | Apartamento | el bosque | -76.52902 | 3.48509 |
| Zona Norte | 6 | 4 | 310 | 147.00 | 1 | 2 | 2 | Apartamento | santa monica | -76.53098 | 3.46780 |
| Zona Norte | NA | 4 | 280 | 173.00 | 2 | 3 | 3 | Apartamento | santa monica | -76.53362 | 3.46337 |
leaflet() %>% addCircleMarkers(lng = Datos_sub3$cordenada_longitud,lat =Datos_sub3$Cordenada_latitud, radius = 0.3,color = "Purple",label = Datos_sub3$ID) %>% addTiles()