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.

Carga de datos

# 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 cinco columnas con información sobre la zona en la que se ubica la vivienda, el estrato, el precio (en millones), el área contruida (en metros cuadrados) y el tipo de vivienda, ya sea apartamento o casa de 1.706 predios de la ubicados en Santiago de Cali. 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

1. Análisis exploratorio del precio y área de la vivienda

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 más 240 millones de pesos, además se tienen 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 área construida presenta un comportamiento similar, concluyendo que tampoco se distribuye normal.

2. Análisis exploratorio bivariado del precio y área de la vivienda

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 fenómeno 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.

3. Estimación del modelo de regresión lineal simple e interpretación de los coeficientes.

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.

4. Construcción del intervalo de confianza para \(\beta_1\)

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 también se tiene con la prueba t, cuyo valor p es inferior a cualquier nivel de significancia, con lo que se rechaza la hipótesis nula, confirmando que el coeficiente es distinto de cero y por tanto, significativo.

Lo anterior, permite concluir que el área construida de la vivienda tiene un impacto directamente proporcional en el precio de la misma.

5. Cálculo e interpretación de \(R^2\)

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 área es inferior a 200 metros cuadrados.

6. Predicción

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.

7. Validación de supuestos

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 más 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 área 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 hipótesis Shapiro-Wilk está por debajo de cualquier nivel de significancia, lo que concluye que se rechaza la hipótesis 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.

8/9. Transformación, validación de supuestos del nuevo modelo y comparación.

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.

10. Ajuste de nuevos modelos con algunas transformaciones.

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.

Influencia de los outliers

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.

Conclusiones

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.