library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(paqueteMETODOS)
## Loading required package: cubature
## Loading required package: GGally
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## Loading required package: MASS
## Loading required package: summarytools
## Loading required package: psych
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
## Loading required package: tidyverse
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ lubridate 1.9.2 ✔ tibble 3.2.1
## ✔ purrr 1.0.1 ✔ tidyr 1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ psych::%+%() masks ggplot2::%+%()
## ✖ psych::alpha() masks ggplot2::alpha()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::select() masks MASS::select()
## ✖ tibble::view() masks summarytools::view()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(nortest)
Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz para apartamento de estrato 4 con área construida menor a 200 m2 (vivienda4.RDS) la inmobiliaria A&C requiere el apoyo de un cientifico de datos en la construcción de un modelo que lo oriente sobre los precios de inmuebles
Con este propósito el equipo de asesores a diseñado los siguientes pasos para obtener un modelo y así poder a futuro determinar los precios de los inmuebles a negociar
Analisis incial:
La base de datos analizada cuenta con 1706 registros, identificando la Zona de ubicación, estrato socioeconómico, precio descrito por millones, el área de construida por metro cuadrado y el tipo de vivienda.
Podemos evidenciar que la base de datos no cuenta con campos vacion y una adecuada calidad para el analisis de infromacion
data(vivienda4)
pie(table(vivienda$tipo), main="Distribuciones por tipo de vivienda")
El 79.89% de la inforamcion es de tipo vivienda apartamento, y el 100% de las viviendas se encuentran en estrato 4.
barplot(table(vivienda$zona), main="Distribucion de viviendas por zonas" )
summary(vivienda)
## id zona piso estrato
## Min. : 1 Length:8322 Length:8322 Min. :3.000
## 1st Qu.:2080 Class :character Class :character 1st Qu.:4.000
## Median :4160 Mode :character Mode :character Median :5.000
## Mean :4160 Mean :4.634
## 3rd Qu.:6240 3rd Qu.:5.000
## Max. :8319 Max. :6.000
## NA's :3 NA's :3
## preciom areaconst parqueaderos banios
## Min. : 58.0 Min. : 30.0 Min. : 1.000 Min. : 0.000
## 1st Qu.: 220.0 1st Qu.: 80.0 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 330.0 Median : 123.0 Median : 2.000 Median : 3.000
## Mean : 433.9 Mean : 174.9 Mean : 1.835 Mean : 3.111
## 3rd Qu.: 540.0 3rd Qu.: 229.0 3rd Qu.: 2.000 3rd Qu.: 4.000
## Max. :1999.0 Max. :1745.0 Max. :10.000 Max. :10.000
## NA's :2 NA's :3 NA's :1605 NA's :3
## habitaciones tipo barrio longitud
## Min. : 0.000 Length:8322 Length:8322 Min. :-76.59
## 1st Qu.: 3.000 Class :character Class :character 1st Qu.:-76.54
## Median : 3.000 Mode :character Mode :character Median :-76.53
## Mean : 3.605 Mean :-76.53
## 3rd Qu.: 4.000 3rd Qu.:-76.52
## Max. :10.000 Max. :-76.46
## NA's :3 NA's :3
## latitud
## Min. :3.333
## 1st Qu.:3.381
## Median :3.416
## Mean :3.418
## 3rd Qu.:3.452
## Max. :3.498
## NA's :3
El 78.78% de las viviendas se encuentran ubicadas en la zona sur de la ciudad, el restante 21.22% se encuentran distribuidas en la zon a norte con un 16.88% y el otro 4.34% se ditribuyen entre la zona oeste, centro, y oriente de Cali.
El precio promedio de la viviendas es de 210 millones, con una area promedio de 87 metros
Apartamento=subset(vivienda4, vivienda4$tipo=="Apartamento")
Casa=subset(vivienda4, vivienda4$tipo=="Casa")
Apartamento|> summarise(media_preciom = mean(preciom),mediana_preciom = median(preciom),varianza_preciom = var(preciom),desvi_preciom = sd(preciom),Q1 = quantile(preciom, probs=0.25),P90 = quantile(preciom, probs=0.90))
## # A tibble: 1 × 6
## media_preciom mediana_preciom varianza_preciom desvi_preciom Q1 P90
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 202. 185 4263. 65.3 154. 285
Casa|> summarise(media_preciom = mean(preciom),mediana_preciom = median(preciom),varianza_preciom = var(preciom),desvi_preciom = sd(preciom),Q1 = quantile(preciom, probs=0.25),P90 = quantile(preciom, probs=0.90))
## # A tibble: 1 × 6
## media_preciom mediana_preciom varianza_preciom desvi_preciom Q1 P90
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 317. 300 9368. 96.8 255 440
Al analizar la informacion podemos evidenciar que el precio promedio de los apartamentos es de 202 millones y un desviacion estandar de 65 millones, en contraste a las casas con una mediana en el precio de 316 millones con una desviacion estandar de 96 millones, siendo los apartamentos mas economicos por metro cuadrado.
ggplot(vivienda4, aes(x = areaconst, fill = tipo)) + geom_histogram (bins=30) + labs (title = "Distribucion area construida")
ggplot(vivienda4, aes(x = preciom, fill = tipo)) + geom_histogram (bins=30) + labs (title = "Distribucion de precios")
boxplot (vivienda4$preciom~vivienda4$tipo, main="Precio en millones (COP) segun tipo de vivienda")
En la grafica se evidencia que la distribucion de apartamentos en mayor proporcion por area construida se encuentran en el rango de 50 a 100 metros cuadrados y en contraste de las casa que estan distribuidas desde los 50 a 200 metros cuadrados y la distribucion del valor de los apartamentos se corrobora que que el promedio e de 208 millones y las casas con mayor valor se puede analisar valores por enciama del promedio de 600 millones y mas fuera de los rangos promedios.
ggpairs(vivienda4[,3:4], title="correlacion")
cor.test(x = vivienda4$areaconst, y = vivienda4$preciom, method = "pearson", digits = 3)
##
## Pearson's product-moment correlation
##
## data: vivienda4$areaconst and vivienda4$preciom
## t = 48.728, df = 1704, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7424432 0.7821521
## sample estimates:
## cor
## 0.7630166
La correlacion que se visuliza en el diagrama es de 0.763, siendo una correlacion positiva debil
modelocasa=lm(preciom ~ areaconst, data=Casa)
summary(modelocasa)
##
## Call:
## lm(formula = preciom ~ areaconst, data = Casa)
##
## Residuals:
## Min 1Q Median 3Q Max
## -158.71 -52.01 -17.93 40.25 414.54
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 153.2252 15.9174 9.626 <2e-16 ***
## areaconst 1.2015 0.1123 10.701 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 83.87 on 341 degrees of freedom
## Multiple R-squared: 0.2514, Adjusted R-squared: 0.2492
## F-statistic: 114.5 on 1 and 341 DF, p-value: < 2.2e-16
modeloapartamento=lm(preciom ~ areaconst, data=Apartamento)
summary(modeloapartamento)
##
## Call:
## lm(formula = preciom ~ areaconst, data = Apartamento)
##
## Residuals:
## Min 1Q Median 3Q Max
## -225.404 -23.902 -4.754 25.763 209.021
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 39.04679 4.09977 9.524 <2e-16 ***
## areaconst 2.16473 0.05204 41.595 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 43.34 on 1361 degrees of freedom
## Multiple R-squared: 0.5597, Adjusted R-squared: 0.5594
## F-statistic: 1730 on 1 and 1361 DF, p-value: < 2.2e-16
Se aplica el modelo de regresion lineal para las casas y apartmentos, observando que el intercepto en las casas es de 153 millones sin el precio bases para una area de 1 metros cuadrado, y para los apartamentos es de 39 millones de pesos, sin embargo por cada metros construido las casas aumentan en 1.201 millones por metro mientras que los aprtamentos aumentan en 2.16 millones por metro construido
confint(modelocasa, level = 0.95)
## 2.5 % 97.5 %
## (Intercept) 121.916592 184.533755
## areaconst 0.980623 1.422293
confint(modeloapartamento, level = 0.95)
## 2.5 % 97.5 %
## (Intercept) 31.00423 47.089340
## areaconst 2.06264 2.266826
El intervalo de conianza para el Intercept para el modelo de casas esta entre 1 y 1.4 millones por cada metro cuadrado construido, y el intervalo para el modelo de los apartamentos se encuentra entre 2.06 y 2.26 millones por metro cuadrado construido.
En el modelo de las casa el idicador de R2 es de 0.25 por lo cual se interpreta que el area construida influye en el precio en un 25%, y el indicador de R2 para los apartamentos es de 0.55, esto define que el 55% del valor depende del area construida, esto indica que en las casa el valor depende de otros factores en un 75% y en los apafrtmentos en un 45%, evidenciando que el valor de los apartementos depende mas del area que de otros factores.
area110 <- data.frame(areaconst = 110)
predict (modeloapartamento, area110, interval = "confidence", level = 0.95)
## fit lwr upr
## 1 277.1674 272.9573 281.3775
Segun la informacion analisada el precio propuesto es de 277 millones de pesos, con un limite inferior de 272 millones y un limite superior de 281 millones, con un indeice de confianza IC del 95%, por lo cual el cobro de 200 millones es una oferta muy atractiva sin embargo se encuentra por debajo del limite inferiro por mas de 70 millones, y seria necesario evaluar el estado que la promocion no genere perdidas.
lillie.test(modeloapartamento$residuals)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modeloapartamento$residuals
## D = 0.060955, p-value = 6.975e-13
Para la prueba de normalidad se aplica el test de test Lilliefors, en la cual la hipotesis nula se rechaza y se acepta la hipotesis alterna.
plot(modeloapartamento, which = 3)
par(mfrow=c(1,2))
plot(modeloapartamento)
Para la prueba de linealidadde la distribucion de los residuos, se evidencia hay relacion lineal puesto que la prueba Q-Q no se alinea perfectamente
LINEALIDAD
Se evidencia que la distribución de los residuos no siguen una relacion lineal.La grafica Q-Q de los residuos muestra que no se alinean perfectamente alrededor de la linea intercuartílica y que esta situacion se presenta especialmente hacia los extremos. En la distancia Cook, se encuentra que existe gran diferencia entre los estimadores B0 y B1 respecto a cada observación.
bc <- boxcox(lm(Apartamento$preciom ~ Apartamento$areaconst), lambda = -1:1)
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] -0.1313131
nuevo_y = ((Apartamento$preciom ^ lambda) - 1 )/ lambda
modBox=lm(nuevo_y ~ areaconst, data=Apartamento)
summary(modBox)
##
## Call:
## lm(formula = nuevo_y ~ areaconst, data = Apartamento)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.48740 -0.06527 -0.00535 0.07957 0.32740
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.4459708 0.0097192 354.55 <2e-16 ***
## areaconst 0.0046628 0.0001234 37.79 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1027 on 1361 degrees of freedom
## Multiple R-squared: 0.5121, Adjusted R-squared: 0.5117
## F-statistic: 1428 on 1 and 1361 DF, p-value: < 2.2e-16
El valor de lambda es de -0.13,
El valor de lambda de -0.1313 indica que la variable dependiente (precio) debe estar expresada en escala logarítmica. La línea vertical punteada central representa el parámetro estimado λ mientras que las otras dos líneas representan su intervalo de confianza al 95%. Como el gráfico muestra que el 0 está dentro del intervalo de confiaza del λ óptimo y la estimación está realmente cerca del 0, en este caso la mejor opción es aplicar la transformación logarítmica:
Con este modelo transformado ModBox no se aumenta el valor de R cuadrado respecto al modelo inicial, de hecho disminuye a 51% y este resultado obtenido es significativamente estadístico (p valor menor 0.05).