Maria comenzó como agente de bienes raíces en Cali hace 10 años. Después de laborar dos años para una empresa nacional, se traslado a Bogotá y trabajó para otra agencia de bienes raíces. Sus amigos y familiares la convencieron de que con su experiencia y conocimientos del negocio debía abrir su propia agencia. Terminó por adquirir la licencia de intermediario y al poco tiempo fundó su propia compañía, C&A (Casas y Apartamentos) en Cali. Santiago y Lina, dos vendedores de la empresa anterior aceptaron trabajar en la nueva compaña. En la actualidad ocho agentes de bienes raíces colaboran con ella en C&A.
Actualmente las ventas de bienes raíces en Cali se han visto disminuidas de manera significativa en lo corrido del año. Durante este periodo muchas instituciones bancarias de ahorro y vivienda están prestando grandes sumas de dinero para la industria y la construcción comercial y residencial. Cuando el efecto producto de las tensiones políticas y sociales disminuya, se espera que la actividad económica de este sector se reactive.
Hace dos días, María recibió una carta solicitando asesoría para la compra de dos viviendas por parte de una compañía internacional que desea ubicar a dos de sus empleados con sus familias en la ciudad. Las solicitudes incluyen las siguientes condiciones:
| Caracteristicas | Vivienda 1 | Vivienda 2 |
|---|---|---|
| Tipo | Casa | Apartamento |
| Área Contruida | 200 | 300 |
| parqueaderos | 1 | 3 |
| Baños | 2 | 3 |
| Habitaciones | 4 | 5 |
| Estrato | 4 o 5 | 5 o 6 |
| Zona | Norte | Sur |
| Crédito Prearobado | 350 millones | 850 millones |
viviendaLD=vivienda
colSums(is.na(viviendaLD))
## id zona piso estrato preciom areaconst
## 3 3 2638 3 2 3
## parqueaderos banios habitaciones tipo barrio longitud
## 1605 3 3 3 3 3
## latitud
## 3
Se visualiza que las variables piso y parqueadero son las que más tienen N/A entre las dos suman 3243 por lo cual se decide en ambos casos reemplazar por el promedio.
viviendaLD$piso= as.integer(viviendaLD$piso)
viviendaLD$piso= round(na.aggregate(viviendaLD$piso),digits = 0)
viviendaLD$parqueaderos= round(na.aggregate(viviendaLD$parqueaderos),digits = 0)
colSums(is.na(viviendaLD))
## id zona piso estrato preciom areaconst
## 3 3 0 3 2 3
## parqueaderos banios habitaciones tipo barrio longitud
## 0 3 3 3 3 3
## latitud
## 3
En el caso de las otras variables se eliminarán las filas correspondientes a los N/A, debido a que no es significante el volumen de datos.
viviendaLD=na.omit(viviendaLD)
colSums(is.na(viviendaLD))
## id zona piso estrato preciom areaconst
## 0 0 0 0 0 0
## parqueaderos banios habitaciones tipo barrio longitud
## 0 0 0 0 0 0
## latitud
## 0
Realice un filtro a la base de datos e incluya solo las ofertas de : base1: casas, de la zona norte de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de las bases. Discutir si todos los puntos se ubican en la zona correspondiente o se presentan valores en otras zonas, por que?).
vivienda_Filtrada= viviendaLD[viviendaLD$tipo=="Casa" & viviendaLD$zona=="Zona Norte", ]
head(vivienda_Filtrada,3)
## # A tibble: 3 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1209 Zona N… 2 5 320 150 2 4 6
## 2 1592 Zona N… 2 5 780 380 2 3 3
## 3 4057 Zona N… 2 6 750 445 2 7 6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
unique(vivienda_Filtrada$tipo)
## [1] "Casa"
unique(vivienda_Filtrada$zona)
## [1] "Zona Norte"
oferta <- data.frame(
lat = vivienda_Filtrada$latitud,
long = vivienda_Filtrada$longitud
)
# Crea un mapa
map <- leaflet(oferta) %>%
addTiles() %>%
addCircles(
lng = ~long,
lat = ~lat,
popup = c(~as.character(lat),~as.character(long) ),
color = "red", radius = 2
)
map # Muestra el mapa
A partir del mapa anterior se evidencian puntos que no pertenecen a la zona norte, esto puede deberse a mala gestión del sistema de información al momento de recolección, por ejemplo problemas en el GPS.
ViviendaCasaNorte <- vivienda_Filtrada[vivienda_Filtrada$longitud >= -76.535507,]
ViviendaCasaNorte <- ViviendaCasaNorte[ViviendaCasaNorte$latitud >= 3.44846,]
oferta <- data.frame(
lat = ViviendaCasaNorte$latitud,
long = ViviendaCasaNorte$longitud
)
# Crea un mapa
map <- leaflet(oferta) %>%
addTiles() %>%
addCircles(
lng = ~long,
lat = ~lat,
popup = c(~as.character(lat),~as.character(long) ),
color = "red", radius = 2
)
map
library(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
options(warn = -1)
corre <- round(cor(ViviendaCasaNorte$preciom,ViviendaCasaNorte$areaconst),2)
corre <- as.character(corre)
fig <- plot_ly(
ViviendaCasaNorte, x = ~preciom, y = ~areaconst,type = "scatter",mode = "markers",
color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))
fig
library(plotly)
options(warn = -1)
corre <- round(cor(ViviendaCasaNorte$preciom,ViviendaCasaNorte$habitaciones),2)
corre <- as.character(corre)
fig <- plot_ly(
ViviendaCasaNorte, x = ~preciom, y = ~habitaciones,type = "scatter",mode = "markers",
color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))
fig
library(plotly)
options(warn = -1)
corre <- round(cor(ViviendaCasaNorte$preciom,ViviendaCasaNorte$estrato),2)
corre <- as.character(corre)
fig <- plot_ly(
ViviendaCasaNorte, x = ~preciom, y = ~estrato,type = "scatter",mode = "markers",
color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))
fig
library(plotly)
options(warn = -1)
corre <- round(cor(ViviendaCasaNorte$preciom,ViviendaCasaNorte$banios),2)
corre <- as.character(corre)
fig <- plot_ly(
ViviendaCasaNorte, x = ~preciom, y = ~banios,type = "scatter",mode = "markers",
color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))
fig
En el anaisis de las graficas de coeficiente de correlación se evidencia que ninguna de las variables posee una correlación fuerte con el precio de la vivienda, la mayor correlación que es 0.72 se encuentra entre el precio y el área y la menor correspondiente a 0.39 la tiene el precio con las habitaciones, permitiendo ver que el número de habitaciones no influye directamente en el precio de la vivienda.
ModeloR=lm(preciom ~ areaconst+estrato+parqueaderos+habitaciones+banios,data=ViviendaCasaNorte)
summary(ModeloR)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + parqueaderos + habitaciones +
## banios, data = ViviendaCasaNorte)
##
## Residuals:
## Min 1Q Median 3Q Max
## -865.23 -65.92 -16.34 38.36 1094.39
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -242.87089 34.35550 -7.069 4.65e-12 ***
## areaconst 0.73212 0.05136 14.256 < 2e-16 ***
## estrato 76.57457 8.33892 9.183 < 2e-16 ***
## parqueaderos 21.81034 5.91583 3.687 0.000249 ***
## habitaciones 9.07394 4.84668 1.872 0.061699 .
## banios 20.39358 6.23830 3.269 0.001145 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 152.2 on 561 degrees of freedom
## Multiple R-squared: 0.6334, Adjusted R-squared: 0.6301
## F-statistic: 193.8 on 5 and 561 DF, p-value: < 2.2e-16
cuando todas las variables son cero el valor de intercepto corresponde a -242.87089
el p value debe estar por encima del 0.05, si es mayor acepto la hipotesis nula, en este caso como es menor se acepta la hipotesis alternativa.
options(scipen = 999)
normalidad <- ModeloR$residuals
shapiro.test(normalidad)
##
## Shapiro-Wilk normality test
##
## data: normalidad
## W = 0.77685, p-value < 0.00000000000000022
gqtest(ModeloR)
##
## Goldfeld-Quandt test
##
## data: ModeloR
## GQ = 1.7836, df1 = 278, df2 = 277, p-value = 0.0000008698
## alternative hypothesis: variance increases from segment 1 to 2
este valor sugiere que no hay evidencia de heterocedasticidad.
options(scipen = 999)
dwtest(ModeloR)
##
## Durbin-Watson test
##
## data: ModeloR
## DW = 1.6439, p-value = 0.000008704
## alternative hypothesis: true autocorrelation is greater than 0
No hay evidencias significativas de autocorrelacion en los residuos del modelo
par(mfrow = c(2, 2))
plot(ModeloR)
vif(ModeloR)
## areaconst estrato parqueaderos habitaciones banios
## 1.663922 1.500626 1.126059 1.796337 2.052473
Debido a que los valores no son cercanos a 5 no existe multicolinealidad, por lo cual no es necesario eliminar ninguna variable.
predict(ModeloR,
newdata = data.frame(areaconst = 200,
estrato = c(4, 5),
parqueaderos = 1,
habitaciones = 4,
banios =2
)
,interval = "confidence" )
## fit lwr upr
## 1 308.7444 287.4161 330.0726
## 2 385.3189 355.4448 415.1930
el precio de las viviendas varian entre 308 millones de pesos y 385 millones de pesos en promedio, con un minimo de 287 millones y un maximo de 415 millones, sin embargo solo tendremos en cuenta las casas con las caracteristicas solicitadas por la empresa.
OfertasCasas <- subset(ViviendaCasaNorte,estrato >= 4 & areaconst >= 200 & preciom <=350 & parqueaderos >=1 & banios>=2 & habitaciones >= 4)
OfertasCasas <- as.data.frame(OfertasCasas)
knitr::kable(OfertasCasas, format = "markdown")
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4210 | Zona Norte | 1 | 5 | 350 | 200.0 | 3 | 3 | 4 | Casa | el bosque | -76.53010 | 3.48503 |
| 4267 | Zona Norte | 1 | 5 | 335 | 202.0 | 1 | 4 | 5 | Casa | el bosque | -76.53044 | 3.48399 |
| 4800 | Zona Norte | 1 | 5 | 340 | 250.0 | 2 | 4 | 4 | Casa | el bosque | -76.53300 | 3.46500 |
| 4209 | Zona Norte | 2 | 5 | 350 | 300.0 | 3 | 5 | 6 | Casa | el bosque | -76.53010 | 3.48577 |
| 4422 | Zona Norte | 2 | 5 | 350 | 240.0 | 2 | 3 | 6 | Casa | el bosque | -76.53136 | 3.48635 |
| 4458 | Zona Norte | 2 | 4 | 315 | 270.0 | 2 | 4 | 4 | Casa | el bosque | -76.53176 | 3.48780 |
| 4483 | Zona Norte | 2 | 5 | 342 | 250.0 | 1 | 4 | 6 | Casa | el bosque | -76.53197 | 3.48752 |
| 852 | Zona Norte | 4 | 5 | 340 | 208.0 | 2 | 6 | 4 | Casa | el bosque | -76.50400 | 3.46300 |
| 1009 | Zona Norte | 4 | 5 | 250 | 243.0 | 1 | 4 | 5 | Casa | el bosque | -76.50755 | 3.47838 |
| 1270 | Zona Norte | 4 | 5 | 350 | 203.0 | 2 | 2 | 5 | Casa | el bosque | -76.51448 | 3.48531 |
| 4727 | Zona Norte | 2 | 4 | 296 | 232.0 | 2 | 6 | 4 | Casa | granada | -76.53263 | 3.46090 |
| 3453 | Zona Norte | 4 | 5 | 340 | 240.0 | 2 | 5 | 6 | Casa | la campiña | -76.52640 | 3.48211 |
| 819 | Zona Norte | 2 | 5 | 350 | 264.0 | 2 | 3 | 4 | Casa | la flora | -76.50330 | 3.46412 |
| 1343 | Zona Norte | 2 | 5 | 320 | 200.0 | 2 | 4 | 4 | Casa | la flora | -76.51524 | 3.48893 |
| 3053 | Zona Norte | 2 | 5 | 320 | 230.0 | 2 | 4 | 4 | Casa | la flora | -76.52353 | 3.48352 |
| 937 | Zona Norte | 2 | 4 | 350 | 280.0 | 2 | 3 | 4 | Casa | la merced | -76.50603 | 3.46643 |
| 952 | Zona Norte | 2 | 4 | 330 | 275.0 | 2 | 3 | 5 | Casa | la merced | -76.50647 | 3.47516 |
| 1020 | Zona Norte | 2 | 4 | 230 | 250.0 | 2 | 3 | 5 | Casa | la merced | -76.50799 | 3.47424 |
| 1108 | Zona Norte | 2 | 4 | 330 | 260.0 | 1 | 3 | 4 | Casa | la merced | -76.51060 | 3.48108 |
| 766 | Zona Norte | 4 | 5 | 321 | 249.0 | 1 | 5 | 5 | Casa | la merced | -76.50291 | 3.46757 |
| 1144 | Zona Norte | 4 | 4 | 320 | 200.0 | 2 | 4 | 4 | Casa | la merced | -76.51156 | 3.48029 |
| 1163 | Zona Norte | 4 | 5 | 350 | 216.0 | 2 | 2 | 4 | Casa | la merced | -76.51218 | 3.48181 |
| 3043 | Zona Norte | 4 | 5 | 330 | 275.0 | 2 | 3 | 5 | Casa | la merced | -76.52350 | 3.48329 |
| 4488 | Zona Norte | 1 | 4 | 350 | 265.0 | 2 | 4 | 5 | Casa | prados del norte | -76.53198 | 3.45165 |
| 1849 | Zona Norte | 4 | 5 | 330 | 246.0 | 2 | 4 | 4 | Casa | prados del norte | -76.51800 | 3.47000 |
| 5031 | Zona Norte | 3 | 4 | 350 | 350.0 | 1 | 4 | 5 | Casa | salomia | -76.53464 | 3.44987 |
| 3101 | Zona Norte | 2 | 5 | 340 | 355.0 | 2 | 5 | 8 | Casa | san vicente | -76.52377 | 3.46384 |
| 1151 | Zona Norte | 4 | 5 | 320 | 210.0 | 2 | 3 | 5 | Casa | urbanización la merced | -76.51200 | 3.47600 |
| 1887 | Zona Norte | 1 | 5 | 340 | 203.0 | 2 | 3 | 4 | Casa | vipasa | -76.51803 | 3.48257 |
| 2544 | Zona Norte | 1 | 4 | 340 | 264.5 | 2 | 4 | 4 | Casa | vipasa | -76.52096 | 3.47665 |
| 1842 | Zona Norte | 2 | 5 | 350 | 240.0 | 2 | 3 | 4 | Casa | vipasa | -76.51800 | 3.48100 |
| 1914 | Zona Norte | 2 | 5 | 300 | 205.0 | 2 | 5 | 6 | Casa | vipasa | -76.51832 | 3.48138 |
| 1822 | Zona Norte | 4 | 4 | 340 | 295.0 | 2 | 2 | 4 | Casa | vipasa | -76.51777 | 3.48060 |
| 1943 | Zona Norte | 4 | 5 | 350 | 346.0 | 1 | 2 | 4 | Casa | vipasa | -76.51847 | 3.47503 |
La tabla nos arroja como resultado 34 viviendas que cumplen con los requisitos, sin embargo las casas que tienen más área, en estrato 5 con un costo menor son solo 23.
oferta <- data.frame(
lat = OfertasCasas$latitud,
long = OfertasCasas$longitud
)
# Crea un mapa
map <- leaflet(oferta) %>%
addTiles() %>%
addCircles(
lng = ~long,
lat = ~lat,
popup = c(~as.character(lat),~as.character(long) ),
color = "red", radius = 2
)
map
Mediante la gráfica se evidencia las viviendas geolocalizadas que cumplen con los requisitos solicitados por la empresa, mediante los cuales podemos sugerir debido a la relación área y valor la vivienda 4209 que tiene un área de 300metros cuadrados y un valor de 350 millones de pesos, la vivienda 5031 con un área de 350 metros y un valor de 350 millones de pesos, la vivienda 3101 con un área de 355 metros cuadrados y un valor de 340 millones de pesos y por último la vivienda 1943 con un área en metros cuadrados de 346 y un valor en millones de pesos de 350.
Realice un filtro a la base de datos e incluya solo las ofertas de : base2: Apartamentos, de la zona sur de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de las bases. Discutir si todos los puntos se ubican en la zona correspondiente o se presentan valores en otras zonas, por que?).
vivienda_Filtrada1= viviendaLD[viviendaLD$tipo=="Apartamento" & viviendaLD$zona=="Zona Sur", ]
head(vivienda_Filtrada1,3)
## # A tibble: 3 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5098 Zona S… 5 4 290 96 1 2 3
## 2 698 Zona S… 2 3 78 40 1 1 2
## 3 8199 Zona S… 4 6 875 194 2 5 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
unique(vivienda_Filtrada1$tipo)
## [1] "Apartamento"
unique(vivienda_Filtrada1$zona)
## [1] "Zona Sur"
oferta1 <- data.frame(
lat1 = vivienda_Filtrada1$latitud,
long1 = vivienda_Filtrada1$longitud
)
# Crea un mapa
map <- leaflet(oferta1) %>%
addTiles() %>%
addCircles(
lng = ~long1,
lat = ~lat1,
popup = c(~as.character(lat1),~as.character(long1) ),
color = "red", radius = 2
)
map # Muestra el mapa
A partir del mapa anterior se evidencian puntos que no pertenecen a la zona sur, esto puede deberse a mala gestión del sistema de información al momento de recolección, por ejemplo problemas en el GPS, por lo cual se realizará un filtro donde se eliminara los puntos que no pertenecen a la zona sur.
ViviendaAptoSur <- vivienda_Filtrada1[vivienda_Filtrada1$longitud <= -76.509,]
ViviendaAptoSur <- ViviendaAptoSur[ViviendaAptoSur$longitud >= -76.551,]
ViviendaAptoSur <- ViviendaAptoSur[ViviendaAptoSur$latitud <= 3.41396,]
oferta1 <- data.frame(
lat1 = ViviendaAptoSur$latitud,
long1 = ViviendaAptoSur$longitud
)
# Crea un mapa
map <- leaflet(oferta1) %>%
addTiles() %>%
addCircles(
lng = ~long1,
lat = ~lat1,
popup = c(~as.character(lat1),~as.character(long1) ),
color = "red", radius = 2
)
map
library(plotly)
options(warn = -1)
corre <- round(cor(ViviendaAptoSur$preciom,ViviendaAptoSur$areaconst),2)
corre <- as.character(corre)
fig <- plot_ly(
ViviendaAptoSur, x = ~preciom, y = ~areaconst,type = "scatter",mode = "markers",
color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))
fig
library(plotly)
options(warn = -1)
corre <- round(cor(ViviendaAptoSur$preciom,ViviendaAptoSur$habitaciones),2)
corre <- as.character(corre)
fig <- plot_ly(
ViviendaAptoSur, x = ~preciom, y = ~habitaciones,type = "scatter",mode = "markers",
color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))
fig
library(plotly)
options(warn = -1)
corre <- round(cor(ViviendaAptoSur$preciom,ViviendaAptoSur$estrato),2)
corre <- as.character(corre)
fig <- plot_ly(
ViviendaAptoSur, x = ~preciom, y = ~estrato,type = "scatter",mode = "markers",
color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))
fig
library(plotly)
options(warn = -1)
corre <- round(cor(ViviendaAptoSur$preciom,ViviendaAptoSur$banios),2)
corre <- as.character(corre)
fig <- plot_ly(
ViviendaAptoSur, x = ~preciom, y = ~banios,type = "scatter",mode = "markers",
color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))
fig
En el analisis de correlación se determina que solo la relación entre el precio y el área tiene un indice alto de 0.84, mientras en los otros casos la relacion es mediana o baja, como por ejemplo para la relación precio y número de habitaciones en donde el indice es de tan solo 0,34, en la relacion de precio y estrato tenemos un indice de o,67 y por último la relación de precio y número de baños tiene un indice de 0,74, lo que nos sugiere la importancia del área para valorizar una vivienda que para este caso son apartamentos.
ModeloR=lm(preciom ~ areaconst+estrato+parqueaderos+habitaciones+banios,data=ViviendaAptoSur)
summary(ModeloR)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + parqueaderos + habitaciones +
## banios, data = ViviendaAptoSur)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1143.17 -50.85 -0.30 41.68 927.72
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -333.98650 16.17551 -20.648 < 0.0000000000000002 ***
## areaconst 1.34457 0.05642 23.831 < 0.0000000000000002 ***
## estrato 66.57079 3.19375 20.844 < 0.0000000000000002 ***
## parqueaderos 60.81971 3.82294 15.909 < 0.0000000000000002 ***
## habitaciones -11.99306 4.09771 -2.927 0.00346 **
## banios 55.10969 3.59195 15.343 < 0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 97.76 on 2133 degrees of freedom
## Multiple R-squared: 0.759, Adjusted R-squared: 0.7585
## F-statistic: 1344 on 5 and 2133 DF, p-value: < 0.00000000000000022
cuando todas las variables son cero el valor de intercepto corresponde a -333.98650
el p value debe adr por encima del 0.05, si es mayor acepto la hipotesis nula, como es menor se acepta la hipotesis alternativa.
options(scipen = 999)
normalidad <- ModeloR$residuals
shapiro.test(normalidad)
##
## Shapiro-Wilk normality test
##
## data: normalidad
## W = 0.78169, p-value < 0.00000000000000022
gqtest(ModeloR)
##
## Goldfeld-Quandt test
##
## data: ModeloR
## GQ = 0.82295, df1 = 1064, df2 = 1063, p-value = 0.9992
## alternative hypothesis: variance increases from segment 1 to 2
este valor sugiere que no hay evidencia de heterocedasticidad.
options(scipen = 999)
dwtest(ModeloR)
##
## Durbin-Watson test
##
## data: ModeloR
## DW = 1.5938, p-value < 0.00000000000000022
## alternative hypothesis: true autocorrelation is greater than 0
No hay evidencias significativas de autocorrelacion en los residuos del modelo
par(mfrow = c(2, 2))
plot(ModeloR)
vif(ModeloR)
## areaconst estrato parqueaderos habitaciones banios
## 2.072665 1.575221 1.398856 1.427646 2.562159
Debido a que los valores no son cercanos a 5 no existe multicolinealidad, por lo cual no es necesario eliminar ninguna variable.
predict(ModeloR,
newdata = data.frame(areaconst = 300,
estrato = c(5, 6),
parqueaderos = 3,
habitaciones = 5,
banios =3
)
,interval = "confidence" )
## fit lwr upr
## 1 690.0607 665.7032 714.4181
## 2 756.6315 731.9568 781.3061
el precio de las viviendas varian entre 690 millones de pesos y 756 millones de pesos en promedio, con un minimo de 665 millones y un maximo de 781 millones, sin embargo solo tendremos en cuenta los aptos con las caracteristicas solicitadas por la empresa.
OfertasAptos <- subset(ViviendaAptoSur,estrato >= 5 & areaconst >= 300 & preciom <=850 & parqueaderos >=3 & banios>=3 & habitaciones >= 5)
OfertasAptos <- as.data.frame(OfertasAptos)
knitr::kable(OfertasAptos, format = "markdown")
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7182 | Zona Sur | 4 | 5 | 730 | 573 | 3 | 8 | 5 | Apartamento | guadalupe | -76.548 | 3.408 |
| 7512 | Zona Sur | 4 | 5 | 670 | 300 | 3 | 5 | 6 | Apartamento | seminario | -76.550 | 3.409 |
Solo dos viviendas cumplen con los requisitos solicitados por la empresa, las dos viviendas se encuentran en estrato 5 y en el piso 4 sin embargo la primera vale 730 millones de pesos, tiene 573 metros cuadrados, tiene 3 parqueaderos, ocho baños y 5 habitaciones, la segunda vivienda vale 60 millones de pesos menos, tiene una habitación más, pero el area disminuye en casi la mitad, tiene 3 parqueaderos y 5 baños, en terminos de valor de metro cuadrado es más rentable la primera vivienda.
piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud 4 5 730 573 3 8 5 Apartamento guadalupe -76.548 3.408 4 5 670 300 3 5 6 Apartamento seminario -76.550 3.409
oferta <- data.frame(
lat = OfertasAptos$latitud,
long = OfertasAptos$longitud
)
# Crea un mapa
map <- leaflet(oferta) %>%
addTiles() %>%
addCircles(
lng = ~long,
lat = ~lat,
popup = c(~as.character(lat),~as.character(long) ),
color = "red", radius = 2
)
map