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.
# devtools::install_github('dgonxalex80/paqueteMETODOS')
# devtools::install_github("dgonxalex80/paqueteMETODOS")
# devtools::install_github('dgonxalex80/paqueteMET')
# library(paqueteMETODOS)
library(paqueteMET)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data(vivienda4)
df <- vivienda4
head(df)
## # A tibble: 6 × 5
## zona estrato preciom areaconst tipo
## <fct> <fct> <dbl> <dbl> <fct>
## 1 Zona Norte 4 220 52 Apartamento
## 2 Zona Norte 4 600 160 Casa
## 3 Zona Norte 4 320 108 Apartamento
## 4 Zona Sur 4 290 96 Apartamento
## 5 Zona Norte 4 220 82 Apartamento
## 6 Zona Norte 4 305 117 Casa
La base de datos contiene información de 1.706 viviendas y cinco columnas con información sobre la zona en la que se ubica la vivienda, el estrato, el precio (en millones), el area contruida (en metros cuadrados) y el tipo de vivienda, ya sea apartamento o casa. De acuerdo a las instrucciones, el análisis y posterior modelamiento se hará sobre las vivienda de tipo apartamento, por lo que se filtra la base, obteniendo finalmente 1.363 inmuebles.
## Filtro de apartamentos
table(df$tipo) # Número de aptos y casas
##
## Apartamento Casa
## 1363 343
df <- df[df$tipo == "Apartamento", ]
table(df$tipo) # Número de aptos y casas después de aplicar el filtro
##
## Apartamento Casa
## 1363 0
summary(df)
## zona estrato preciom areaconst
## Zona Centro : 7 3: 0 Min. : 78.0 Min. : 40.00
## Zona Norte : 237 4:1363 1st Qu.:153.5 1st Qu.: 60.00
## Zona Oeste : 52 5: 0 Median :185.0 Median : 70.00
## Zona Oriente: 2 6: 0 Mean :202.4 Mean : 75.48
## Zona Sur :1065 3rd Qu.:240.0 3rd Qu.: 84.00
## Max. :645.0 Max. :200.00
## tipo
## Apartamento:1363
## Casa : 0
##
##
##
##
Del total de viviendas en el estudio, 1.065 (\(78\%\)) están ubicadas en la zona sur de la ciudad y solo 9 en la zona centro u oriente. Todos los apartamentos son de estrato 4 y el precio oscila entre $78.000.000 y $645.000.000, teniendo como promedio $202.400.000. El \(50\%\) de los predios tienen 75.48 metros cuadrados construidos o menos.
par(mfrow=c(1,2))
boxplot(df$preciom, xlab = 'Precio', main = 'Precio de vivienda (Millones de pesos)' )
boxplot(df$areaconst, xlab = 'Área', main = 'Área construida de la vivienda (Metros cuadrados)' )
par(mfrow=c(1,2))
hist(df$preciom, xlim = c(0,800), ylim = c(0, 0.009), main='Distribución del precio', xlab='Precio ($M)', ylab = 'Densidad', freq = F)
lines(density(df$preciom), col='blue')
hist(df$areaconst, xlim = c(0,200), ylim = c(0, 0.03), main='Distribución del área construida', xlab='Área (Metros cuadrados)', ylab = 'Densidad', freq = F)
lines(density(df$areaconst), col='blue')
Gráficamente se puede apreciar que el \(75\%\) de los apartamentos cuestan a lo mucho 240 millones de pesos, además hay algunos predios cuyo precio es considerado atípico de acuerdo al comportamiento regular de los datos. En cuanto al área, el \(50/%\) de los apartamentos tienen entre 60 y 84 metros cuadrados, no obstante, dentro de la data se pueden evidenciar apartamentos de hasta 200 metros cuadrados, siendo este el máximo.
la variable precio tiene mayor concentración de datos alrededor de 200 millones y presenta cola pesada derecha, por lo que a priori se puede concluir que los datos no siguen una distribución normal. la variable area construida presenta un comportamiento similar, concluyendo que tampoco se distribuye normal.
library(GGally)
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
ggpairs(df[,3:4], title="Relación entre el precio y el área construida")
cor(df[,3:4]) %>% # matriz de correlaciones
round(.,3 )
## preciom areaconst
## preciom 1.000 0.748
## areaconst 0.748 1.000
Gráficamente se observa que hay una relación positiva entre el precio y el area construida, de tal modo que a mayor área, mayor será el precio de la vivienda, no obstante, en algunos casos este fenomeno no es tan lineal, apreciando que en algunos apartamentos de pocos metros cuadrados, se tienen precios elevados. El coeficiente de correlación es de 0.748, lo que confirma la relación existente entre el área y el precio. También se evidencia que la mayor concentración de datos se tiene en áreas pequeñas y precios bajos.
model <- lm(formula = preciom ~ areaconst, data = df)
summary(model) # hablar sobre los betas, darle interpretacion a b0 y b1 y hablar sobre significancia
##
## Call:
## lm(formula = preciom ~ areaconst, data = df)
##
## 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
El modelo de regresión ajustado, tiene como coeficientes a \(\beta_0 = 39.047\) y \(\beta_1 = 2.165\), esto indica que el incremento en precio sin tener en cuenta el metro cuadrado es de 39.047 millones de pesos. Con la estimación de \(\beta_1\) se puede inferir que por cada metro cuadrado que tenga la vivienda, el precio incrementa en 2.16 millones de pesos.
El valor-p para los dos coeficientes del modelo es inferior a cualquier nivel de significancia, indicando que estos dos coeficientes son distintos de cero, confirmando que son significativos en el modelo de regresión.
ggplot(data = df, mapping = aes(x = areaconst , y = preciom)) +
geom_point(color = "firebrick", size = 2) +
geom_smooth(method = "lm", se = TRUE, color = "black") +
labs(title = "Modelo", x = "Área (Metros cuadrados)", y = "Precio (Millones)") +
theme_bw() + theme(plot.title = element_text(hjust = 0.5))
## `geom_smooth()` using formula = 'y ~ x'
La representación gráfica del modelo, demuestra que la recta representa el comportamiento general del precio de la vivienda en función del área, sin embargo, no explica el 100% de la varianza.
confint(object = model, parm="areaconst", level = 0.95) # en el intervalo no está el cero, es significativo
## 2.5 % 97.5 %
## areaconst 2.06264 2.266826
summary(model)
##
## Call:
## lm(formula = preciom ~ areaconst, data = df)
##
## 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
El intervalo de confianza (\(95\%\)) estimado para \(\beta_1\) es [2.062, 2.267]. En este intervalo se puede apreciar que no se encuentra el cero, lo que indica que el coeficiente \(\beta_1\) es significativo. Esta conclusión tambien se tiene con la prueba t, cuyo valor p es inferior a cualquier nivel de significancia, con lo que se rechaza la hipotesis nula, confirmando que el coeficiente es distinto de cero y por tanto, significativo.
Lo anterior, permite concluir que el area construida de la vivienda tiene un impacto directamente proporcional en el precio de la misma.
summary(model)
##
## Call:
## lm(formula = preciom ~ areaconst, data = df)
##
## 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
El indicador de bondad de ajuste \(R^2 = 0.5597\) lo que indica que el modelo representa el \(55.97\%\) de la varianza del precio de los apartamentos de estrato 4 y cuya area es inferior a 200 metros cuadrados.
Con el modelo ajustado anteriormente, se estimará el precio promedio de un apartamento de 110 metros cuadrados:
predict(model, data.frame(areaconst=110), interval = "confidence", level = 0.95)
## fit lwr upr
## 1 277.1674 272.9573 281.3775
De acuerdo a los resultados obtenidos, un apartamento de 110 metros cuadrados puede costar entre $272.975.000 y $281.377.000, con un precio promedio de $277.167.000 aproximádamente.
Por otro lado, una oferta de un apartamento de 110 metros cuadrados, en la misma zona, es una oferta bastante atractiva, ya que se encuentra 77 millones de pesos (un 28%) por debajo del precio promedio de la zona, sin embargo se debe tener en cuenta el estado del apartamento, la distribución del mismo, número de habitaciones, baños, parqueaderos, entre otras comodidades que el comprador esté buscando.
En este punto, se llevará a cabo la validación de supuestos sobre los residuales del modelo: normalidad en los errores, homogeneidad de varianza (homocedasticidad), autocorrelación y linealidad, a través de métodos gráficos y pruebas de hipótesis.
### Validación de supuestos de manera gráfica
summary(model$residuals)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -225.404 -23.902 -4.754 0.000 25.763 209.021
hist(model$residuals, freq = F, ylim = c(0,0.013))
lines(density(model$residuals), col='blue')
# normalidad en los errores
par(mfrow=c(2,2))
plot(model)
## Autocorrelación de errores
ggplot(data = df, aes(x = seq_along(model$residuals),
y = model$residuals)) +
geom_point(aes(color = model$residuals)) +
scale_color_gradient2(low = "blue3", mid = "grey", high = "red") +
geom_line(size = 0.3) +
labs(title = "Distribución de los residuos", x = "index", y = "residuo")+
geom_hline(yintercept = 0) +
theme(plot.title = element_text(hjust = 0.5), legend.position = "none")
## Linealidad
plot(df$preciom, df$areaconst, col = 'steelblue',
xlab = 'Precio', ylab = 'Area', main='Linealidad')
points(loess.smooth(df$preciom, df$areaconst), type = 'l', lwd = 2, lty = 2)
Gráficamente se puede concluir qué:
Normalidad: inicialmente, se presenta el gráfico
de densidad de los errores, donde se puede apreciar que aparentemente no
se distibuyen normal debido a que no se tiene un efecto de campana con
los datos distribuidos alrededor de la media, es decir, la distribución
tiene una proporción importante de errores mayores a cero, además, al
lado izquierdo, se tiene una leve concentración en errores menores a
100; adicionalmente el gráfico presenta colas pesadas. Es claro que la
interpretación de la gráfica anterior puede ser un poco subjetiva, sin
embargo, se presentan algunos gráficos más sobre la normalidad de los
errores, en los que se tiene la distribución de los residuales, los
residuales estandarizados y el Q-Q plot.
Al comparar los residuales
vs los residuales ajustados, se observan algunos puntos considerados
atípicos, ya que los errores están muy por encima del promedio (que es
cero) en las observaciones 831 y 664, y muy por debajo en la observación
376; esto quiere decir que la estimación del precio de los apartamentos
para estas observaciones, presenta un error bastante importante. Estos
errores atípicos se observan mas claramente en el gráfico ‘Residuals vs
Leverage’, donde es evidente la presencia de estos al lado derecho del
gráfico y alejados de la concentración de errores.
En el Q-Q plot,
se observa que los residuales no tienen una distribución uniforme, ya
que gráficamente se observa que en las colas de la distribución, se
aleja de los cuantiles teoricos de la distribución normal. Por todo lo
anterior, se puede concluir que no se cumple el supuesto de normalidad
en los errores.
Homogeneidad de la varianza: Para evaluar gráficamente el supuesto de homocedasticidad, podemos observar el gráfico ‘Scale-Location’, que presenta la distribución de la raíz de los errores estandarizados, aquí es evidente que los errores presentan una fuerte dispersión y una tendencia creciente en algunos puntos que pueden ser considerados atípicos, por lo que se puede concluir que no se cumple este supuesto.
Autocorrelación: Gráficamente se puede observar que existe autocorrelación en los errores, es decir, el precio promedio estimado de un apartamento, puede que dependa del precio estimado de la observación anterior.
Linealidad: En el último gráfico presentado, se aprecia que los datos no cumplen con el supuesto de linealidad, ya que algunas relaciones entre el area y el precio de la vivienda no pueden ser explicados dentro de la recta gráficada.
Conclusión: De acuerdo a los gráficos presentados anteriormente, el modelo planteado no cumple ninguno de los supuestos sobre los errores. Para confirmar esta conclusión, a continuación se realizarán las puebas de hipótesis apropiadas para validar cada uno de los supuestos:
### Pruebas de Hipotésis
# normalidad en los errores
shapiro.test(model$residuals)
##
## Shapiro-Wilk normality test
##
## data: model$residuals
## W = 0.96486, p-value < 2.2e-16
# Homocedasticidad (Breush-Pagan)
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest(model)
##
## studentized Breusch-Pagan test
##
## data: model
## BP = 292.99, df = 1, p-value < 2.2e-16
# Autocorrelación de errores - Durbin-Watson
dwtest(model)
##
## Durbin-Watson test
##
## data: model
## DW = 1.443, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
El valor-p de la prueba de hipotesis Shapiro-Wilk está por debajo de cualquier nivel de significancia, lo que concluye que se rechaza la hipotesis nula de la prueba, es decir, los residuales del modelo del precio dado el área de la vivienda no se distribuyen normal. Para evaluar la homocedasticidad, se realiza la prueba Breush-Pagan, cuya hipótesis nula es que los residuos se distribuyen con varianza constante. Los resultados demuestran que el valor-p es aproximadamente cero, lo que permite concluir que los errores no cumplen con el supuesto de homocedasticidad.
Finalmente se lleva a cabo la prueba Durbin-Watson para evaluar la autocorrelación de los errores, en los que el valor-p permite concluir que se rechaza la hipótesis nula, es decir, que la autocorrelación de los errores es distinta de cero y al ser el estadistico BP positivo, quiere decir que la autocorrelación es positiva.
Dado que en el paso anterior se detectaron algunos puntos atípicos, se podría ajustar nuevamente el modelo centrando la variable área, alrededor de la media, sin embargo esto no genera ningun efecto en el modelo ya que solo se tiene esta variable como predictora.
Se plantea entonces una transformación sobre el área construida del apartamento y se evaluan los resultados del modelo:
## Transformación logaritmica
modellog = lm(formula = preciom ~ log(areaconst), data=df)
summary(modellog)
##
## Call:
## lm(formula = preciom ~ log(areaconst), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -196.252 -21.338 -1.579 22.096 261.436
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -635.532 19.092 -33.29 <2e-16 ***
## log(areaconst) 195.419 4.445 43.97 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 41.98 on 1361 degrees of freedom
## Multiple R-squared: 0.5868, Adjusted R-squared: 0.5865
## F-statistic: 1933 on 1 and 1361 DF, p-value: < 2.2e-16
# normalidad en los errores
shapiro.test(modellog$residuals)
##
## Shapiro-Wilk normality test
##
## data: modellog$residuals
## W = 0.95826, p-value < 2.2e-16
# Homocedasticidad (Breush-Pagan)
library(lmtest)
bptest(modellog)
##
## studentized Breusch-Pagan test
##
## data: modellog
## BP = 214.66, df = 1, p-value < 2.2e-16
Con esta transformación se logra un leve incremento en el \(R^2\) frente al modelo original, pasando de 0.5597 a 0.5868, además los coeficientes \(\beta_o\) y \(\beta_1\) siguen siendo significantes para el modelo. No obstante, al evaluar los supuestos sobre los errores de este modelo, se evidencia que no se cumple ni la normalidad ni la homocedasticidad, al igual que con el modelo original.
Se exploran nuevas transformaciones de las variables predictoras y de respuesta, con el fin de evaluar posibles mejoras en las métricas y el cumplimiento de los supuestos. Inicialmente ajustamos un modelo cuya variable de respuesta es el logaritmo del precio del apartamento:
modellog1 = lm(formula = log(preciom) ~ areaconst, data=df)
summary(modellog1)
##
## Call:
## lm(formula = log(preciom) ~ areaconst, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.98857 -0.13188 -0.01249 0.15595 0.66387
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.5512586 0.0194001 234.60 <2e-16 ***
## areaconst 0.0094530 0.0002463 38.38 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2051 on 1361 degrees of freedom
## Multiple R-squared: 0.5198, Adjusted R-squared: 0.5195
## F-statistic: 1473 on 1 and 1361 DF, p-value: < 2.2e-16
# normalidad en los errores
shapiro.test(modellog1$residuals)
##
## Shapiro-Wilk normality test
##
## data: modellog1$residuals
## W = 0.99051, p-value = 1.035e-07
# Homocedasticidad (Breush-Pagan)
library(lmtest)
bptest(modellog1)
##
## studentized Breusch-Pagan test
##
## data: modellog1
## BP = 150.38, df = 1, p-value < 2.2e-16
En este acercamiento, se presenta una disminución en el \(R^2\) frente al modelo original y frente al modelo con el logaritmo del área, además, los supuestos sobre los errores tampoco se cumplen para este modelo.
A continuación, se usa el logaritmo tanto en la variable predictora como en la variable de respuesta:
modellog2 = lm(formula = log(preciom) ~ log(areaconst), data=df)
summary(modellog2)
##
## Call:
## lm(formula = log(preciom) ~ log(areaconst), data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.8890 -0.1119 0.0028 0.1343 0.7538
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.48373 0.08703 17.05 <2e-16 ***
## log(areaconst) 0.88175 0.02026 43.52 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1914 on 1361 degrees of freedom
## Multiple R-squared: 0.5819, Adjusted R-squared: 0.5816
## F-statistic: 1894 on 1 and 1361 DF, p-value: < 2.2e-16
# normalidad en los errores
shapiro.test(modellog2$residuals)
##
## Shapiro-Wilk normality test
##
## data: modellog2$residuals
## W = 0.98958, p-value = 2.857e-08
# Homocedasticidad (Breush-Pagan)
library(lmtest)
bptest(modellog2)
##
## studentized Breusch-Pagan test
##
## data: modellog2
## BP = 92.877, df = 1, p-value < 2.2e-16
Al ajustar el modelo con el logaritmo del precio y del area, se tien un \(R^2\) muy similar al obtenido en el modelo aplicando el logaritmo solo al área, lo que conlleva a que esta métrica sea superior al modelo original, sin embargo, los supuestos de normalidad y homogeneidad de varianza sobre los errores tampoco se cumplen.
Finalmente, se propone la transformación de Box-Cox:
## Con el area centrada
df$areaconstc=df$areaconst-mean(df$areaconst)
## Transformación box-cox
#transformación box-cox
df1 <- data.frame(df)
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
modelbc <- boxcox(lm(preciom ~ areaconstc, data=df1))
# lambda
lambda <- modelbc$x[which.max(modelbc$y)]
lambda
## [1] -0.06060606
nuevo_y = ((df$preciom ^ lambda) - 1 )/ lambda
modelobc=lm(nuevo_y ~ areaconstc, data=df1)
summary(modelobc)
##
## Call:
## lm(formula = nuevo_y ~ areaconstc, data = df1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.71317 -0.09492 -0.00849 0.11447 0.47869
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.505546 0.004037 1116.19 <2e-16 ***
## areaconstc 0.006821 0.000179 38.12 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.149 on 1361 degrees of freedom
## Multiple R-squared: 0.5163, Adjusted R-squared: 0.5159
## F-statistic: 1453 on 1 and 1361 DF, p-value: < 2.2e-16
# normalidad en los errores
shapiro.test(modelobc$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelobc$residuals
## W = 0.99026, p-value = 7.206e-08
# Homocedasticidad (Breush-Pagan)
library(lmtest)
bptest(modelobc)
##
## studentized Breusch-Pagan test
##
## data: modelobc
## BP = 141.1, df = 1, p-value < 2.2e-16
Los resultados del \(R^2\) Y \(R^2\)-ajustado de este modelo son similares al modelo del logaritmo del precio vs el logaritmo del área, además de que los supuestos de normalidad y homogeneidad de varianza de los errores tampoco se cumplen.
Dado que anteriormente se estableció que pueden existir algunas observaciones consideradas atípicas, se realizará un análisis de estos para corroborar si efectivamente se tratan de puntos atípicos, a través de la distancia de cook:
#install.packages('car')
library(carData)
library(car)
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
#summary(influence.measures(model = model))
influencePlot(model = model)
## StudRes Hat CookD
## 118 -3.091065 0.02309291 0.11222521
## 262 -1.214001 0.02309291 0.01741334
## 376 -5.281316 0.01103524 0.15260107
## 664 4.874395 0.01771611 0.21073675
A través de la distancia de Cook, se logra establecer que las observaciones 118, 262, 376 y 664 tienen un comportamiento atípico en la relación existente entre el precio del apartamento y el área construida. Para entender mejor esta detección, veamos las observaciones y comparemosla con la estimación del modelo para cada una:
df[c(118,262,376,664),1:5]
## # A tibble: 4 × 5
## zona estrato preciom areaconst tipo
## <fct> <fct> <dbl> <dbl> <fct>
## 1 Zona Norte 4 340 200 Apartamento
## 2 Zona Sur 4 420 200 Apartamento
## 3 Zona Sur 4 160 160 Apartamento
## 4 Zona Sur 4 645 184 Apartamento
predict(model, data.frame(areaconst=200), interval = "confidence", level = 0.95)
## fit lwr upr
## 1 471.9934 459.0737 484.9131
predict(model, data.frame(areaconst=160), interval = "confidence", level = 0.95)
## fit lwr upr
## 1 385.4041 376.473 394.3351
predict(model, data.frame(areaconst=184), interval = "confidence", level = 0.95)
## fit lwr upr
## 1 437.3576 426.0415 448.6737
En los dos primeros casos, el área de cada apartamento es de 200 metros cuadrados, sin embargo el primero está en el norte de la ciudad y el segundo en el sur, ambos estrato 4. El modelo, predice que el precio promedio para apartamentos con este metraje es aproxímadamente de $472.000.000, encontrando que en ambos casos el precio real está por debajo de esta estimación.
Para la observación 376 el área construida es de 160 metros cuadrados y según el modelo ajustado, el precio promedio para una vivienda de estas características es de aproximadamente 385 millones de pesos, estando muy por encima del valor real de este apartamento en particular.
Finalmente, la observación número 664, tiene como area construida 184 metros y un valor de 645 millones de pesos, lo cual está muy por encima del valor promedio que predice el modelo para una vivienda con estas caracteristicas.
Dado que la finalidad del modelo es determinar a futuro los precios de los inmuebles, se considera que no se deben eliminar estos registros atípicos, ya que el modelo solo está teniendo en cuenta el área construida de la vivienda y hay algunos otros factores externos que pueden influir en el precio final del apartamento, por lo tanto, al mantenerlos dentro del ajuste del modelo, pueden representar casos interesantes en los que el area no necesariamente determinará el valor del inmueble.
Para construir un modelo que permita predecir el precio de un apartamento, es importante tener en cuenta el tamaño (en metros cuadrados) de este, sin embargo, esta variable por si sola no permite predecir con exactitud el precio del inmueble, por lo tanto, es fundamental estudiar y evaluar la participación de otras variables como el número de cuartos y baños, años de construido el apartamento, cercanía a sitios de interés, entre otros aspectos para tener un modelo más robusto y con mejores métricas de predicción.
Se encontraron algunos puntos atípicos en los que el área no representa el valor promedio del apartamento, como lo son las observaciones 118, 262, 376 y 664, sin embargo, no se deben excluir del estudio ya que no parecieran un error de digitación o de la toma de información, sino más bien, de apartamentos que tienen algunas caracteristicas adicionales que influyen en el valor comercial del mismo. En un futuro informe, se podrían explorar algunas otros métodos para acotar estas observaciones.
A pesar de plantear algunas transformaciones a las variables del modelo, no se tuvo un incremento representativo en el \(R^2\) y \(R^2\) ajustado, además en ninguno de los casos se cumplen los supuestos sobre los errores, sin embargo el área del apartamento explica un poco más de un \(50\%\) de la variabilidad de su precio.