library(dplyr)
library(readxl)
Datos_Vivienda <- read_excel("C:/Users/pocho/Desktop/R/Datos_Viviend.xlsx",
col_types = c("text", "text", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "text", "text",
"numeric", "numeric"), na = "0")
Datos_Viviend <- mutate_all(Datos_Vivienda, ~replace(., is.na(.), 0))
Se presenta la manera paso a paso para poder filtrar y la manera con el uso del ampersand
## Manera paso a paso
pos=which(Datos_Viviend$Tipo == "Apartamento")
filtrov=Datos_Viviend[pos,]
pos2=which(filtrov$Zona == "Zona Norte")
filtrov2=filtrov[pos2,]
pos3=which(filtrov2$precio_millon < 500)
filtrov3=filtrov2[pos3,]
pos4=which(filtrov3$Area_contruida < 300)
filtrov4=filtrov3[pos4,]
### Manera &
posj= which(Datos_Viviend$Tipo == "Apartamento" & Datos_Viviend$Zona == "Zona Norte" & Datos_Viviend$precio_millon < 500 & Datos_Viviend$Area_contruida < 300)
datos_fil=Datos_Viviend[posj,]
## Tres primeros registros
head(datos_fil,3)
| 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 |
## Tablas evidencia (las tablas precio y area se limitan a 8 registros por masividad de los datos en la presentacióm)
par(mfrow=c(2,2))
data.frame(table(datos_fil$Zona))
| Var1 | Freq |
|---|---|
| Zona Norte | 1077 |
data.frame(b=table(datos_fil$Tipo))
| b.Var1 | b.Freq |
|---|---|
| Apartamento | 1077 |
head(data.frame(table(datos_fil$precio_millon)),8)
| Var1 | Freq |
|---|---|
| 65 | 1 |
| 69 | 1 |
| 70 | 4 |
| 72 | 2 |
| 73 | 1 |
| 75 | 6 |
| 76 | 1 |
| 77 | 1 |
head(data.frame(table(datos_fil$Area_contruida)),8)
| Var1 | Freq |
|---|---|
| 35 | 1 |
| 42 | 1 |
| 43 | 1 |
| 44 | 3 |
| 45 | 2 |
| 46 | 4 |
| 47 | 2 |
| 48 | 5 |
require(leaflet)
## Loading required package: leaflet
leaflet() %>% addCircleMarkers(lng = datos_fil$cordenada_longitud, lat = datos_fil$Cordenada_latitud,radius = 0.3, color = "red", label = datos_fil$Barrio) %>% addTiles()
Pese que en el mapa se muestra gran cantidad de puntos en el norte se evidencia también que hay personas que diligenciaron mas lo datos de referenciacion y por ello es que hay errores en la geolocalizacion
Se establece primero la base de datos con la variable respuesta (precio del apartamento) en función del área construida, estrato y si tiene parqueadero.
datos_ana=data.frame(datos_fil$precio_millon,datos_fil$Area_contruida,datos_fil$Estrato,datos_fil$parqueaderos)
names(datos_ana)=c("Precio_mill","Area_constr","Estrat","Parquead")
##datos_ana$Estrat=factor(datos_ana$Estrat,levels = c(3,4,5,6))
##datos_ana$Parquead=factor(datos_ana$Parquead,levels = c(1,2,3,NA))
as.numeric(datos_ana$Parquead)
## [1] 1 2 2 1 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 2 2 0 1 0 1 1 0 0 1 1 1 1
## [38] 2 0 0 2 1 1 0 0 0 1 1 1 0 0 0 1 1 0 1 1 0 0 0 1 0 1 0 0 1 0 0 0 1 1 0 0 0
## [75] 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 2 1 1 2 0 1 0 0 1 0 1
## [112] 1 1 1 1 1 1 0 1 1 1 0 0 1 1 1 2 1 0 0 1 0 2 0 0 1 1 0 0 0 1 0 0 0 2 0 0 0
## [149] 0 0 0 1 1 0 1 0 1 2 1 0 1 0 1 1 0 0 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0 1 0 0 0
## [186] 1 1 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 1 1 1 1 1 0 0 2 1 2 1 0 1 1 0 0 0 0
## [223] 1 0 1 0 0 0 0 0 1 0 1 0 0 1 0 1 1 1 0 0 1 1 0 0 0 2 1 1 1 1 1 1 1 0 1 1 2
## [260] 1 1 1 1 0 1 0 0 0 1 0 0 1 0 1 1 1 0 0 1 0 0 0 1 1 1 0 0 1 2 0 0 1 0 1 0 0
## [297] 1 0 0 1 0 2 0 1 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0 1 0 0
## [334] 0 0 0 0 0 1 0 1 0 1 0 1 1 0 1 1 1 1 2 1 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1
## [371] 1 1 1 1 0 1 2 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 2 0 1 1 0 1 1
## [408] 1 1 1 2 1 1 0 1 1 1 1 1 2 1 1 1 1 2 1 1 0 1 0 2 1 1 1 1 1 0 1 1 1 1 2 2 1
## [445] 1 0 2 1 1 1 2 2 1 0 1 1 2 1 1 2 0 0 0 1 1 1 0 1 1 1 2 1 0 0 1 2 1 0 0 1 1
## [482] 1 1 0 1 1 0 0 1 0 2 0 0 1 1 1 0 1 2 1 2 1 1 2 2 2 0 1 1 1 1 0 0 2 2 0 1 1
## [519] 0 0 0 0 1 2 1 1 0 2 1 1 1 0 1 1 0 1 1 1 1 1 1 1 2 2 1 1 2 1 2 1 2 2 0 0 1
## [556] 1 0 2 1 1 1 1 1 1 2 0 1 1 2 2 1 0 0 2 2 2 1 1 1 2 1 2 1 1 0 1 1 1 2 2 1 2
## [593] 2 2 0 1 0 1 1 2 1 2 2 1 1 2 0 1 1 1 2 2 1 2 1 1 2 1 0 1 1 1 2 2 1 1 1 1 1
## [630] 1 1 1 2 0 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 0 1 2 0 1 2 2 1
## [667] 1 0 1 1 1 1 0 2 0 0 2 1 2 2 2 1 1 1 0 0 2 1 1 1 1 1 2 2 2 2 1 2 2 1 1 0 1
## [704] 2 2 1 2 0 2 2 1 0 2 1 2 2 1 1 1 1 1 0 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 2 1 0
## [741] 1 2 1 2 1 1 1 1 0 2 0 0 1 2 2 2 2 1 2 1 1 1 1 1 1 1 0 2 1 1 0 2 1 1 0 1 2
## [778] 1 1 1 2 0 1 1 1 1 0 2 0 2 2 1 1 1 1 1 1 1 1 1 1 0 2 0 0 0 1 2 0 0 0 1 0 1
## [815] 2 1 1 1 0 1 1 1 1 1 2 1 1 1 1 1 1 0 0 0 2 1 0 1 1 1 2 0 2 1 2 0 1 1 2 0 1
## [852] 2 1 0 1 2 2 1 1 1 2 3 2 1 0 1 1 1 0 0 2 2 2 1 0 0 2 1 2 1 1 2 1 2 0 1 2 2
## [889] 1 1 2 1 1 1 1 0 1 2 0 1 4 1 1 1 1 1 1 0 1 0 0 2 0 2 2 1 0 1 2 2 2 1 0 1 1
## [926] 2 2 0 0 1 2 1 1 2 0 2 1 1 2 2 3 2 1 1 1 2 1 1 0 0 1 1 1 1 2 2 1 0 1 2 1 1
## [963] 1 1 1 2 1 2 2 1 1 1 2 1 1 1 1 2 0 1 0 2 2 1 1 1 0 2 1 0 1 0 1 0 1 1 1 1 0
## [1000] 1 0 0 0 1 0 1 0 2 1 2 2 2 2 1 2 0 2 0 2 2 1 2 2 0 2 0 1 1 2 1 0 1 0 3 0 2
## [1037] 2 2 1 1 2 0 1 0 0 0 0 0 2 0 1 0 1 2 1 3 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0
## [1074] 1 0 0 1
head(datos_ana,7)
| Precio_mill | Area_constr | Estrat | Parquead |
|---|---|---|---|
| 135 | 56 | 3 | 1 |
| 78 | 54 | 3 | 2 |
| 340 | 106 | 5 | 2 |
| 135 | 103 | 3 | 1 |
| 75 | 54 | 3 | 1 |
| 175 | 77 | 4 | 1 |
| 99 | 58 | 3 | 0 |
Luego se analiza cada variable independiente con la variable respuesta (precio del apartamento) con graficos de correlación y plotly
require(GGally)
## Loading required package: GGally
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(GGally)
dat_ana1=data.frame(datos_ana$Precio_mill,datos_ana$Area_constr)
GGally::ggpairs(dat_ana1)
require(ggplot2)
library(ggplot2)
require(plotly)
## Loading required package: plotly
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(plotly)
g3=ggplot(data = datos_ana, mapping = aes(x=Area_constr,y=Precio_mill))+geom_point()+theme_bw()+geom_smooth(method = "lm")
ggplotly(g3)
## `geom_smooth()` using formula 'y ~ x'
En esta corelacioón se puede encontrar un 69,4%
dat_ana2=data.frame(datos_ana$Precio_mill,datos_ana$Estrat)
GGally::ggpairs(dat_ana2)
g4=ggplot(data = datos_ana, mapping = aes(x=Estrat,y=Precio_mill))+geom_point()+theme_bw()+geom_smooth(method = "lm")
ggplotly(g4)
## `geom_smooth()` using formula 'y ~ x'
En esta corelacioón se puede encontrar un 82,3%
Como esta variable cuenta con NA se debe de hacer depuración de los NA a 0
dat_ana3=data.frame(datos_ana$Precio_mill,datos_ana$Parquead)
GGally::ggpairs(dat_ana3)
dat_ana3=data.frame(datos_ana$Precio_mill,datos_ana$Parquead)
GGally::ggpairs(dat_ana3)
g4=ggplot(data = datos_ana, mapping = aes(x=Estrat,y=Precio_mill))+geom_point()+theme_bw()+geom_smooth(method = "lm")
ggplotly(g4)
## `geom_smooth()` using formula 'y ~ x'
En esta corelacioón se puede encontrar un 54,7%
En definitiva con todas las variables tiene una mejor correlación entre el precio de la vivienda es el estrato con un 82%
library(corrplot)
## corrplot 0.92 loaded
data=cbind(datos_ana[1],datos_ana[2],datos_ana[3],datos_ana[4])
mcor=cor(data)
mcor
## Precio_mill Area_constr Estrat Parquead
## Precio_mill 1.0000000 0.6937608 0.8230851 0.5472535
## Area_constr 0.6937608 1.0000000 0.5807031 0.4276430
## Estrat 0.8230851 0.5807031 1.0000000 0.4764230
## Parquead 0.5472535 0.4276430 0.4764230 1.0000000
corrplot::corrplot(mcor,method = "number")
modelo1=lm(Precio_mill~.,data = datos_ana)
modelo1
##
## Call:
## lm(formula = Precio_mill ~ ., data = datos_ana)
##
## Coefficients:
## (Intercept) Area_constr Estrat Parquead
## -157.3822 0.9494 68.9944 22.6491
La ecuación de regresión es \[y=-157.3822 + (0.9494x) + (68.9944x) + (22.6491x)\] ESto quiere decir que el valor de una viviendia sin estimar variables como el area, estrato y parqueadero en la zona norte de Cali es de -157.3822 pesos y:
Por cada metro cuadrado crece el valor de la vivienda 0.9494 pesos
Por subir una categoria de estrato crece el valor de la vivienda 68.9944 pesos
Por tener parqueadero crece el valor de la vivienda 68.9944 pesos
Ahora, para poder determinar que tanto el precio de la vivienda es explicado por las variables se encontrara el r\(^2\) y determinar la significancia de los de los supuestos
summary(modelo1)
##
## Call:
## lm(formula = Precio_mill ~ ., data = datos_ana)
##
## Residuals:
## Min 1Q Median 3Q Max
## -216.571 -31.564 -1.213 27.889 224.053
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -157.38220 7.71190 -20.408 < 2e-16 ***
## Area_constr 0.94938 0.06054 15.682 < 2e-16 ***
## Estrat 68.99436 2.26623 30.445 < 2e-16 ***
## Parquead 22.64906 2.73064 8.294 3.24e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 53.75 on 1073 degrees of freedom
## Multiple R-squared: 0.7629, Adjusted R-squared: 0.7623
## F-statistic: 1151 on 3 and 1073 DF, p-value: < 2.2e-16
Con lo anterior se puede apreciar que todas las variables son significativas para el modelo y le aportan altamente ***, adicional el p-value: < 2.2e-16 con un r\(^2\) de 76%
modelo2=step(modelo1)
## Start: AIC=8586.39
## Precio_mill ~ Area_constr + Estrat + Parquead
##
## Df Sum of Sq RSS AIC
## <none> 3100324 8586.4
## - Parquead 1 198783 3299107 8651.3
## - Area_constr 1 710544 3810868 8806.6
## - Estrat 1 2678106 5778430 9255.0
Hipotesis:
¿Cuál sera el valor de un apartamento en la zona norte de Cali con un área de 92 mtr\(^2\), estrato 4 y 1 parqueadero?
R// El precio sera de 228.5872 y se moverá entre un rango entre 225.0252 y 232.1492
phm1=predict(modelo1,list(Area_constr=92,Estrat=4,Parquead=1),interval = "confidence",level = 0.95)
phm1
## fit lwr upr
## 1 228.5872 225.0252 232.1492
Hipotesis:
¿Cuál sera el valor correcto de un apartamento en la zona norte de Cali con un área de 100 mtr\(^2\), estrato 4 y 1 parqueadero?
R// El precio sera de 236.1822 millones y se moverá entre un rango entre 232.2449 y 240.1195, por lo cual el valor estaría por encima de lo que se arroja el modelo.
phm1=predict(modelo1,list(Area_constr=100,Estrat=4,Parquead=1),interval = "confidence",level = 0.95)
phm1
## fit lwr upr
## 1 236.1822 232.2449 240.1195
Tambien se puede comprobar con los datos que tenemos para corroborar la proyección
posm= which(datos_ana$Area_constr == 100 & datos_ana$Estrat == 4 & datos_ana$Parquead == 1)
datos_ana_fil=datos_ana[posm,]
datos_ana_fil
| Precio_mill | Area_constr | Estrat | Parquead | |
|---|---|---|---|---|
| 412 | 270 | 100 | 4 | 1 |
| 952 | 240 | 100 | 4 | 1 |