SITUACIÓN

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 ha diseñado los siguientes pasos para obtener un modelo y así poder a futuro determinar los precios de los inmuebles a negociar

library(devtools)
devtools::install_github("dgonxalex80/paqueteMETODOS")
library(paqueteMETODOS)
data(vivienda4)

1. Análisis Exploratorio Univariado

Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados) - incluir gráficos e indicadores apropiados interpretados.

table (vivienda4$tipo)
## 
## Apartamento        Casa 
##        1363         343
aptos <- subset(vivienda4, vivienda4$tipo == "Apartamento")
summary(aptos)
##            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  
##                    
##                    
##                    
## 
  • El precio mínimo de una vivienda tipo apartamento es de 78 millones, el máximo 645 millones, la media es de 202 millones y la mediana de 185 millones. El 50% de los apartamentos cuestan entre 153 y 240 millones de pesos.El 25% cuesta menos de 153 millones y el 25% cuesta más de 240 millones.

  • El apartamento con menor área construida tiene 40 m2, el mayor tiene 200m2, la media es de 75,48 m2 y la mediana de 70 m2. El 50% de los apartamentos tiene un área construída entre 60 y 84 m2. El 25% de los apartamentos tienen un área construída de menos de 60 metros cuadrados y el 25% de más de 84 m2.

Estos datos los podemos ver gráficamente mediante un boxplot y verificamos si existen valores atípicos en cada variable:

par(mfrow = c(1, 2))
boxplot(aptos$preciom, main = "Precio de apartamentos", col = "#13B3C1")
boxplot(aptos$areaconst, main = "Área construida de apartamentos", col ="#FE3F75")

Con los gráficos de cajas podemos observar:

  • En los rectángulos los valores contenidos entre el cuartil 1 y 3 como se describió con los datos generados en la tabla anterior,

  • Las líneas dentro de las cajas nos dan indicios que los datos no son simétricos, pues no están en el centro de la caja sino desviadas hacia abajo,

  • Tanto la variable precio como el área construída tienen puntos de datos que sobresalen de los bigotes, por lo tanto vemos que ambas contienen datos outlier.

Ahora, podemos visualizar la distribución de los datos mediante histogramas:

par(mfrow = c(1, 2))
hist(aptos$preciom, main = "Histograma de precio", xlab = "Precio", col = "#13B3C1")
hist(aptos$areaconst, main = "Histograma de área construida", xlab = "Área construida", col ="#FE3F75")

Con los histogramas de precio y área construída, observamos que los datos no se distribuyen de forma normal, los datos para ambas variables están sesgados a la derecha.

Esta apreciación sobre la normalidad de los datos la podemos confirmar con la prueba estadística de Shapiro-Wilk:

library(stats)
shapiro.test(aptos$preciom)
## 
##  Shapiro-Wilk normality test
## 
## data:  aptos$preciom
## W = 0.89881, p-value < 2.2e-16
shapiro.test(aptos$areaconst)
## 
##  Shapiro-Wilk normality test
## 
## data:  aptos$areaconst
## W = 0.82347, p-value < 2.2e-16

Con los datos de la prueba de Shapiro para ambas variables, con valores p-value < 2.2e-16, no rechazamos la hipótesis nula y confirmamos que ninguna de las dos variables tienen una distribución normal.

2. Ánálisis exploratorio bivariado

Realice un análisis exploratorio bivariado de datos, enfocado en la relación entre la variable respuesta (precio) en función de la variable predictora (area construida) - incluir gráficos e indicadores apropiados interpretados.

Para explorar la relación entre precio y area construida, puedo utilizar métodos gráficos con un diagrama de dispersión:

plot(aptos$areaconst, aptos$preciom, main = "Diagrama de dispersión Precio - Área construida", xlab = "área construida", ylab = "precio", col="gray", pch=16)

El gráfico sugiere una relación lineal entre ambas variables, a medida que aumenta el área construida, aumenta el precio de los apartamentos.

Podemos confirmarlo con una prueba estadística de correlación, al no contar con una distribución normal, no utilizaría una prueba paremétrica como pearson, sino que aplico Spearman, puedo comparar la diferencia de los resultados de las dos pruebas:


cor.test(aptos$areaconst, aptos$preciom)
## 
##  Pearson's product-moment correlation
## 
## data:  aptos$areaconst and aptos$preciom
## t = 41.595, df = 1361, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.7237938 0.7706237
## sample estimates:
##       cor 
## 0.7481389
cor.test(aptos$areaconst, aptos$preciom, method = "spearman")
## Warning in cor.test.default(aptos$areaconst, aptos$preciom, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  aptos$areaconst and aptos$preciom
## S = 93987139, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.7772938

El resultado de Pearson nos arroja una prueba de 0.74, significa que hay una correlación positiva, de igual manera con la prueba no paramétrica de Spearman, encontramos el coeficiente de 0.77, lo que nos da una correlacón positiva considerable con un p-value < 2.2e-16, siendo estadísticamente significativa.

En conclusión, los cambios en el precio en lo apartamentos se relacionan con los cambios en área construida, a medida que aumenta el área construída, aumenta el precio y esta relación es bastante fuerte. El valor P es muy bajo, por lo cual decimos que esta correlación es significativa y no se debe al azar.

3. Modelo de regresión lineal.

Estime el modelo de regresión lineal simple entre precio=f(area)+ε. Interprete los coeficientes del modelo β0, β1 en caso de ser correcto.

Como ya sabemos que hay una relación lineal entre el área construída y el precio de las viviendas, procedemos con el modelo de regresión lineal.


modelo1<- lm(aptos$preciom~aptos$areaconst)
resultado_prueba <- summary(modelo1)
resultado_prueba
## 
## Call:
## lm(formula = aptos$preciom ~ aptos$areaconst)
## 
## 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 ***
## aptos$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 coeficiente β1 es 2,16, nos indica cuánto incrementa el precio de las viviendas por cada aumento de un metro de área construída. Es decir que por cada aumento en un metro cuadrado de los apartamentos, el precio incrementa 2,16 millones. El valor P <2e-16 nos indica que es significativo.

El coeficiente β0 es 39, su interpretación sería que con 0 metros cuadrados, el precio promedio de las viviendas sería de 39 milloes, sin embargo, no es coherente, pues una vivienda de 0 metros no existe. Para poderlo interpretar, requeriríamos centrar la variable.

EL coeficiente R2 de 0.55 nos dice que este modelo explica el 55% de la variación en precio teniendo en cuenta el área de las viviendas.

Ahora centramos la variable área construída para interpretar mejor el resultado:

areac <- aptos$areaconst - mean(aptos$areaconst)
modelo1c<- lm(preciom~areac, data=aptos)
summary(modelo1c)
## 
## Call:
## lm(formula = preciom ~ areac, data = aptos)
## 
## 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) 202.43727    1.17390  172.45   <2e-16 ***
## areac         2.16473    0.05204   41.59   <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 promedio del área construída es de 75,48 metros cuadrados. Con el modelo centrado tenemos los mismos resultados de β1 y del coeficiente R2, lo que ahora cambia es que podemos interpretar mejor el β0. Cuando el área de los apartamentos es el valor promedio, es decir 75,48 metros cuadrados, el precio promedio de es de 202 millones.

4. Intervalos de confianza

Construir un intervalo de confianza (95%) para el coeficiente β1, interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipótesis t

intervalo_confianza <-confint(modelo1c, level = 0.95)
intervalo_confianza
##                 2.5 %     97.5 %
## (Intercept) 200.13443 204.740115
## areac         2.06264   2.266826

Con una confianza del 95%, podemos concluir que por cada metro cuadrado que incremente el apartamento, el precio puede incrementar entre 2,06 y 2,26 millones de pesos.

Para contrastar este resultado con una prueba de hipótesis, utilizamos la prueba t para β1 para determinar si el coeficiente es igual a cero. Hipótesis nula: β1=0. Esto implicaría que no hay una linealidad entre el precio y el área construida.


valor_p <- resultado_prueba$coefficients["aptos$areaconst", "Pr(>|t|)"]
valor_p
## [1] 1.056327e-244

Teniendo en cuenta que el valor p de 1.056327e-244 es menor que el nivel de significancia, rechazamos la hipótesis nula y concluimos que hay evidencia para considerar la relación lineal significativa entre los metros cuadrados de los apartamentos y el precio.

5. Indicador de Bondad de ajuste

Calcule e interprete el indicador de bondad R2.

r_cuadrado <- summary(modelo1c)$r.squared
r_cuadrado
## [1] 0.5597117

El coeficiente de determinación R2 o de bondad de ajuste es una medida importante en modelos de regresión que indica cuánta variación en la variable dependiente Y ( precio) es explicada por las variables independientes X (área construída) en el modelo. El R 2 varía de 0 a 1, donde 1 indica que el modelo explica toda la variación en la variable dependiente.

Como se explicó en el punto 3, eL coeficiente R2 de 0.55 nos dice que este modelo explica el 55% de la variación en el precio de las viviendas teniendo en cuenta la variación en el área de las viviendas. No es despereciable teniendo en cuenta que se trata de una sola variable.

Por otro lado, el 45% de la variación en los precios de las viviendas No pueden ser explicadas por el área construída y puede estar relacionada con otros valores que no estamos incluyendo en este modelo.

6. Predicción de precio de apartamentos

¿Cuál sería el precio promedio estimado para un apartamento de 110 metros cuadrados? Considera entonces con este resultado que un apartamento en la misma zona con 110 metros cuadrados en un precio de 200 millones sería una atractiva esta oferta? ¿Qué consideraciones adicionales se deben tener?.



nuevos_datos <- data.frame(areac=110)

predict (modelo1c, nuevos_datos, interval = "confidence", level = 0.95)
##        fit     lwr      upr
## 1 440.5579 429.094 452.0218

Según los cálculos de predicción teniendo en cuenta el modelo centrado, con una confianza del 95%, cuando se tenga un apartamento con un área construída de 110 metros, el precio del mismo sería 440 millones y puede variar entre 429 y 452 millones de pesos.

Una oferta de 200 millones para un apartamento con un área construída de 110 metros cuadrados sería muy atractiva, puesto que corresponde a menos de la mitad del precio calculado en la predicción, si el inmueble se adquiere para la venta, la ganancia estaría entre 229 y 252 millones de pesos. Si se adquiere para renta, estaría recuperando el valor del inmueble en menor tiempo al comprarlo por un precio más bajo de lo esperado.

Si la inmobiliaria ofrece el inmueble en 200 millones, estaría dejando de recibir una posible ganancia entre 229 y 252 millones según el valor estimado.Adicionalmente estaría desvalorizando los apartamentos ofertados en esa zona con la misma área construída.

Nota: Profe, me llama la atención que en clase hablamos que podríamos utilizar para todo el ejercicio el modelo centrado, sin embargo, los resultados son muy diferentes si hago una estimación con el modelo original, en el modelo centrado las estimaciones son mucho más altas, como se muestra acá:

ND2 <- data.frame(areaconst=110) predict (modelo1, ND2, interval = “confidence”, level = 0.95)

fit lwr upr 1 277.1674 272.9573 281.3775

Teniendo en cuenta el modelo original, un apartamento de 110 metros cuadrados costaría en promedio 277 millones y podría variar entre 272 y 281 millones. Una oferta por 200 millones sería una buena dado que estaría entre 77 y 81 millones por debajo del valor estimado

Para validar que la predicción no está sesgada, debemos realizar la validación de supuestos del modelo.

7. Validación de supuestos

Realice la validación de los supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos. Utilice las pruebas de hipótesis para la validación de supuestos y compare los resultados con lo observado en los gráficos asociados.

Podemos validar supuestos mediante las siguientes gráficas:

par (mfrow=c(2,2))
plot(modelo1c)

Analizando cada una de las gráficas generadas, encontramos:

7.1. Gráfico de Linealidad

La gráfica de Residuals vs Fitted nos permite identificar si los residuales (errores) del modelo tienen una relación sistemática con los valores ajustados (predichos) por el modelo.

Los residuales no parecen con una dispersión completamente aleatoria. No se cumple con el supuesto de linealidad. La variabilidad de los errores No se mantiene constante, por lo que no se cumple el supuesto de homocedasticidad. los errores están mas concentrados a la izquierda.

7.2. Gráfico de Normalidad

Observando el gráfico Q-Q, se observa los puntos al inicio y al final no se ajustan a la línea recta diagonal, por lo que concluimos que los residuales del modelo no se ajustan a una distribución normal.

Como estos residuales no se ajustan a una distribución normal, las inferencias que realicemos sobre las hipótesis del modelo pueden ser sesgadas, no obstantes, en algunas ocasiones, los modelos aún pueden proporcionar buenas predicciones.

Podemos confirmarlo con la prueba de shapiro:

residuos <- residuals(modelo1c) # Primero debo obtener los residuales del modelo
resultado_shapiro <- shapiro.test(residuos)
resultado_shapiro
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.96486, p-value < 2.2e-16

COn el resultado de la prueba de Shapiro, confirmamos que los residuales no siguen una distribución normal en el modelo

7.3. Gráfico Homocedasticidad

Con este gráfico evaluamos si la variabilidad de los residuales es constante a lo largo de los valores ajustados. Si tuviéramos un patrón horizontal y uniforme, nos indicaría que hay homocedasticidad, sin embargo, lo que observamos en la gráfica generada es que el patrón se ensancha a medida que los datos ajustados aumentan y hay mayor concentración a la izquierda, por lo cual decimos que la variabilidad no es constante.

Podemos confirmarlo aplicando una prueba estadística:

lmtest::bptest(modelo1c)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo1c
## BP = 292.99, df = 1, p-value < 2.2e-16

Aplicando la prueba de Breusch Pagan, al interpretar el valor P, tan bajo, concluímos que hay heterocedasticidad en los residuos.

7.4. Gráfico de Outliers

Con este gráfico podemos identificar observaciones atípicas (outlier). Las observaciones con valores inusualmente extremos en las variables predictoras pueden tener un alto impacto en las estimaciones de los coeficientes del modelo.

En el eje X vemos el leverage (medida de cuánto se aleja el valor de una observación del valor promedio de las variables predictoras) y en el eje Y se representan los residuales estandarizados. Las observaciones que están lejos del resto de los puntos en el eje y pueden ser consideradas atípicas.

Con el gráfico generado, encontramos que sí hay valores extremos, aunque no es un supuesto formal, No se esperaría que hayan datos atípicos que generen sesgos en los estimadores de los coeficientes.

7.5. No autocorrelación

lmtest::dwtest(modelo1c)
## 
##  Durbin-Watson test
## 
## data:  modelo1c
## DW = 1.443, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

Los errores que corresponden a diferentes individuos o diferentes tiempo deben ser independintes unos de otros (Cov[εi,εj]=0).

Utilizando el test de Durbin-Watson, debemos tener en cuenta que tiene un rango de valores entre 0 y 4. Un valor cercano a 2 indica ausencia de autocorrelación positiva y negativa en los residuos. Un valor significativamente menor que 2 sugiere autocorrelación positiva.

La autocorrelación positiva de 1,44 que arrojó la prueba para este modelo implica que los errores están correlacionados positivamente entre sí, lo que podría sesgar las estimaciones y las inferencias realizadas a partir del modelo.

En conclusión, para este modelo propuesto no se cumple ninguno de los supuestos de la regresión lineal. Para mejorar esto, podemos probar realizando transformaciones que ayuden a mejorar el cumplimiento de los supuestos sobre los errores

8. Transformación.

De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.

A continuación se realizarán las transformaciones con sus gráficas de supuestos, las cuales serán descritas en más detalle en el numeral 9. Lo que esperamos con estas transformaciones es mejorar el cumplimiento de los supuestos sobre los errores del modelo original

8.1. Transformación Lin-Log

Se realiza una transformación de logaritmo de X, realizando un primer ejercicio con el área centrada, me di cuenta que contenía valores negativos a los que no les podía aplicar la transformación, por lo tanto utilizo la variable original de apartamentos.

modeloLilo=lm(preciom ~ log(areaconst), data=aptos)      
summary(modeloLilo)
## 
## Call:
## lm(formula = preciom ~ log(areaconst), data = aptos)
## 
## 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
par (mfrow=c(2,2))
plot(modeloLilo)

Observando las gráficas de validación de supuestos, con la transformación Lin-Log no se logra el cumplimiento de los mismos.

8.2.Transformación Log-Lin

En este caso aplico la transformación logaritmo a Y:

modeloLoli=lm(log(preciom) ~ areaconst, data=aptos)      
summary(modeloLoli)
## 
## Call:
## lm(formula = log(preciom) ~ areaconst, data = aptos)
## 
## 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
par (mfrow=c(2,2))
plot(modeloLoli)

Observando las gráficas de validación de supuestos, con la transformación Log-Lin no se logra el cumplimiento de los mismos.

8.3. Transformación Log-Log

Acá aplicamos la transformación de logaritmo tanto a X como a Y:

modeloLolo=lm(log(preciom) ~ log(areaconst), data=aptos) 
summary(modeloLolo)
## 
## Call:
## lm(formula = log(preciom) ~ log(areaconst), data = aptos)
## 
## 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
par (mfrow=c(2,2))
plot(modeloLolo)

Observando las gráficas de validación de supuestos, con la transformación Log-Log no se logra el cumplimiento de los mismos. Parece que hubiera algo mejor heterocedasticidad, esto se describirá más adelante.

lmtest::bptest(modeloLolo)
## 
##  studentized Breusch-Pagan test
## 
## data:  modeloLolo
## BP = 92.877, df = 1, p-value < 2.2e-16

Aunque la gráfica pareciera mostrar mejor heterocedasticidad, aplicando la prueba de Breusch Pagan, al interpretar el valor P < 2.2e-16, concluímos que hay heterocedasticidad en los residuos, por o tanto este supuesto no se cumple.

8.5. Transformación Box-Cox

Se realiza sobre la variable Y y usualmente se utiliza para dar solución a problemas tanto de validación de suspuesto como también de mejoras en el nivel de ajuste del modelo.

modelo1=lm(preciom ~ areaconst, data=aptos)
summary(modelo1)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = aptos)
## 
## 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
par(mfrow = c(1,2))
boxcox(lm(aptos$preciom ~ aptos$areaconst, data=aptos), lambda = -3:3)
#Se repite el proceso pero esta vez entrechando el rango de valores de lambda 
bc<-boxcox(lm(aptos$preciom ~ aptos$areaconst, data=aptos), lambda = -1:1)

(lambda <- bc$x[which.max(bc$y)])
## [1] -0.1313131

Obtenemos un lambda de - 0.13, en ambas gráficas vemos que en el intervalo de confianza pasan por 0, El resultado (λ=0) indica que la variable dependiente debe estar en escala logarítmica, por lo tanto se realizará esta transformación en escala logarítmica.

Y_Ajustado <- ((aptos$preciom ^ lambda) -1)/ lambda
modeloBox <- lm(Y_Ajustado~areaconst, data=aptos)
summary(modeloBox)
## 
## Call:
## lm(formula = Y_Ajustado ~ areaconst, data = aptos)
## 
## 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
par (mfrow=c(2,2))
plot(modeloBox)

9. Comparación de modelos.

De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.

9.1. Coeficientes de determinación:


r_cuadrado_Lilo <- summary(modeloLilo)$r.squared
r_cuadrado_Loli <- summary(modeloLoli)$r.squared
r_cuadrado_Lolo <- summary(modeloLolo)$r.squared
r_cuadrado_Box <- summary(modeloBox)$r.squared


# Comparar R^2^ de los modelos
print(paste("Coeficiente de determinación Modelo Lilo: ", r_cuadrado_Lilo))
## [1] "Coeficiente de determinación Modelo Lilo:  0.586849512477968"
print(paste("Coeficiente de determinación Modelo Loli: ", r_cuadrado_Loli))
## [1] "Coeficiente de determinación Modelo Loli:  0.519831964007251"
print(paste("Coeficiente de determinación Modelo Lolo: ", r_cuadrado_Lolo))
## [1] "Coeficiente de determinación Modelo Lolo:  0.581911040350381"
print(paste("Coeficiente de determinación Modelo Box: ", r_cuadrado_Box))
## [1] "Coeficiente de determinación Modelo Box:  0.512070045173637"

Observando los resultados del coeficiente de determinación o bondad de ajuste, encontramos que en el modelo original, exlica el 55% de la variación en el precio de las viviendas teniendo en cuenta la variación en el área de las viviendas.

Los modelos ajustados no brindan una explicación más fuerte del 58,7% en el caso de la transformación Lin-Log, la transformación Log-Log explica el 58,2%, el modelo Log-ling e 52% y el Box es el que menor bondad de ajuste tiene con el 51,2%. Esto sería esperable teniendo en cuenta que nuestro modelo solo tiene una variable explicativa.

9.2. Supuestos

Normalidad:

par (mfrow=c(2,3))
qqnorm(modelo1c$residuals, main = "Q-Q Modelo original", col = "blue")
qqline(modelo1c$residuals)
qqnorm(modeloLilo$residuals, main = "Q-Q Modelo Lin-Log", col = "gray")
qqline(modeloLilo$residuals)
qqnorm(modeloLoli$residuals, main = "Q-Q Modelo Log-Lin", col = "red")
qqline(modeloLoli$residuals)
qqnorm(modeloLolo$residuals, main = "Q-Q Modelo Log-Log", col = "green")
qqline(modeloLolo$residuals)
qqnorm(modeloBox$residuals, main = "Q-Q Modelo Box", col = "orange")
qqline(modeloBox$residuals)

Podemos observar en los gráficos Q-Q que ni el modelo original ni los modelos transformados cumplen con un ajuste de los residuales a la normalidad. No se distribuyen de manera normal, las diferentes transformaciones no fueron efectivas para mejorar la normalidad.

Homocedasticidad:

Podemos comparar los gráficos de residuos vs valores ajustados:

par (mfrow=c(2,3))
plot(modelo1c$fitted.values, modelo1c$residuals, xlab = "Valores Ajustados", ylab = "Residuos", main = "Modelo original", col = "blue")
plot(modeloLilo$fitted.values, modeloLilo$residuals, xlab = "Valores Ajustados", ylab = "Residuos", main = "Modelo Lin-Log",  col = "gray")
plot(modeloLoli$fitted.values, modeloLoli$residuals, xlab = "Valores Ajustados", ylab = "Residuos", main = "Modelo Log-Lin", col = "red")
plot(modeloLolo$fitted.values, modeloLolo$residuals, xlab = "Valores Ajustados", ylab = "Residuos", main = "Modelo Log-Log", col = "green")
plot(modeloBox$fitted.values, modeloBox$residuals, xlab = "Valores Ajustados", ylab = "Residuos", main = "Modelo Box", col = "orange")

Como se explicó en los supuestos del modelo original, Si tuviéramos un patrón horizontal y uniforme, nos indicaría que hay homocedasticidad, sin embargo, lo que observamos en la gráfica generada es que el patrón se ensancha a medida que los datos ajustados aumentan y hay mayor concentración a la izquierda, por lo cual decimos que la variabilidad no es constante.

Observando las gráficas de las diferentes transformaciones, no identificamos en ninguna de ellas un patrón constante y uniforme, aquella que presentaría una variación un poco más constante sería la Log-Log.

Esto lo podemos confirmar con prueba estadística:

Homoc1c <- lmtest::bptest(modelo1c)
ValorP1c <- Homoc1c$p.value
HomocLilo <- lmtest::bptest(modeloLilo)
ValorPLilo <- HomocLilo$p.value
HomocLoli <- lmtest::bptest(modeloLoli)
ValorPLoli <- HomocLoli$p.value
HomocLolo <- lmtest::bptest(modeloLolo)
ValorPLolo <- HomocLolo$p.value
HomocBox <- lmtest::bptest(modeloBox)
ValorPBox <- HomocBox$p.value

print(paste("Homocedasticidad modelo original: ", ValorP1c))
## [1] "Homocedasticidad modelo original:  1.10753530922972e-65"
print(paste("Homocedasticidad modelo Lin-Log: ", ValorPLilo))
## [1] "Homocedasticidad modelo Lin-Log:  1.32198201830285e-48"
print(paste("Homocedasticidad modelo Log-Lin: ", ValorPLoli))
## [1] "Homocedasticidad modelo Log-Lin:  1.43512939391975e-34"
print(paste("Homocedasticidad modelo Log-Log: ", ValorPLolo))
## [1] "Homocedasticidad modelo Log-Log:  5.56383728754267e-22"
print(paste("Homocedasticidad modelo Box: ", ValorPBox))
## [1] "Homocedasticidad modelo Box:  3.22279478018095e-30"

Aplicando la prueba de Breusch Pagan, al interpretar el valor P, para todos los modelos, el original y los transformados, el resultado es significativamente menor que el nivel de significancia (0.05), por lo que rechazamos la hipótesis nula de homocedasticidad y concluímos que hay heterocedasticidad en los residuos.

Ninguna de las transformaciones logró mejorar este supuesto.

Con la gráfica creía que podía haber mejorado la homocedasticidad con el modelo Log-Log, sin embargo con la prueba estadística descartamos esa posibilidad.

No autocorrelación

autocor1c<- lmtest::dwtest(modelo1c)
autocorLilo<- lmtest::dwtest(modeloLilo)
autocorLoli<- lmtest::dwtest(modeloLoli)
autocorLolo<- lmtest::dwtest(modeloLolo)
autocorBox<- lmtest::dwtest(modeloBox)

print(paste("Autocorrelación modelo original: ", autocor1c))
## [1] "Autocorrelación modelo original:  c(DW = 1.44295347106122)"              
## [2] "Autocorrelación modelo original:  Durbin-Watson test"                    
## [3] "Autocorrelación modelo original:  true autocorrelation is greater than 0"
## [4] "Autocorrelación modelo original:  3.48358996711212e-25"                  
## [5] "Autocorrelación modelo original:  modelo1c"
print(paste("Autocorrelación modelo Lin-Log: ", autocorLilo))
## [1] "Autocorrelación modelo Lin-Log:  c(DW = 1.47749964034206)"              
## [2] "Autocorrelación modelo Lin-Log:  Durbin-Watson test"                    
## [3] "Autocorrelación modelo Lin-Log:  true autocorrelation is greater than 0"
## [4] "Autocorrelación modelo Lin-Log:  2.15303937518626e-22"                  
## [5] "Autocorrelación modelo Lin-Log:  modeloLilo"
print(paste("Autocorrelación modelo Log-lin: ", autocorLoli))
## [1] "Autocorrelación modelo Log-lin:  c(DW = 1.31870667666386)"              
## [2] "Autocorrelación modelo Log-lin:  Durbin-Watson test"                    
## [3] "Autocorrelación modelo Log-lin:  true autocorrelation is greater than 0"
## [4] "Autocorrelación modelo Log-lin:  1.10226331410322e-36"                  
## [5] "Autocorrelación modelo Log-lin:  modeloLoli"
print(paste("Autocorrelación modelo Log-Log: ", autocorLolo))
## [1] "Autocorrelación modelo Log-Log:  c(DW = 1.32144866972207)"              
## [2] "Autocorrelación modelo Log-Log:  Durbin-Watson test"                    
## [3] "Autocorrelación modelo Log-Log:  true autocorrelation is greater than 0"
## [4] "Autocorrelación modelo Log-Log:  2.07407299239277e-36"                  
## [5] "Autocorrelación modelo Log-Log:  modeloLolo"
print(paste("Autocorrelación modelo Box: ", autocorBox))
## [1] "Autocorrelación modelo Box:  c(DW = 1.31005691262298)"              
## [2] "Autocorrelación modelo Box:  Durbin-Watson test"                    
## [3] "Autocorrelación modelo Box:  true autocorrelation is greater than 0"
## [4] "Autocorrelación modelo Box:  1.43575156846124e-37"                  
## [5] "Autocorrelación modelo Box:  modeloBox"

Recordando el test de Durbin-Watson que describimos con el modelo original, un valor cercano a 2 indica ausencia de autocorrelación positiva y negativa en los residuos. Un valor significativamente menor que 2 sugiere autocorrelación positiva.

Para todos los modelos, la autocorrelación fue positiva, aún más baja que en el modelo original, esto implica que los errores en este modelo están correlacionados positivamente entre sí, lo que podría sesgar las estimaciones y las inferencias realizadas a partir de estos modelos.

Conclusión

Las transformaciones realizadas (Lin-Log, Log-Lin, Log-Log, Box-Cox) no ayudan la mejora de los modelos en el cumplimiento de los supuestos sobre los errores.

10. Comparación de resultados.

Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?

  • El modelo Lin-Log presentó el mejor coeficiente de determinación, sin embargo, como se comentó en el numeral 9, en ninguno de los modelos se cumplen los supuestos sobre los errores, no se logró normalidad, no autocorrelación ni homocedasticidad, es decir que las trasnformaciones no realizaron el efecto que esperábamos en ninguno de los modelos.

  • Sería necesario explorar modelos alternativos no lineales para identificar si con ellos se podrían cumplir con los supuestos.

  • Teniendo en cuenta estos resultados, ninguno de los modelos nos sería totalmente confiable en sus estimaciones por lo que la información que se genere debería tener esta claridad.

  • Los modelos de regresión se basan en las suposiciones sobre los errores, y si esas suposiciones no se cumplen, las predicciones del modelo pueden no ser precisas o confiables, haciendo que las predicciones del modelo puedan estar sesgadas o tener intervalos de confianza inadecuadamente estrechos.

  • Sin heterocedasticidad, los coeficientes pueden estar sesgados y las estimaciones de los efectos de las variables independientes en la variable dependiente pueden ser incorrectas. Sin una distribución normal de los errores, los intervalos de confianza pueden ser incorrectos, por lo que la incertidumbre alrededor de las estimaciones de los coeficientes puede no estar adecuadamente representada.

  • Debido a que las transformaciones no lograron mejorar los supuestos sobre los errores, esto puede limitar las decisiones que se pretendan tomar sobre los modelos, me quedaré con el modelo original centrado para presentar el informe.

11. Informe para inmobiliaria.

Con los resultados obtenidos construya un informe para los directivos de la inmobiliaria, indicando el modelo apropiado y sus principales características. A este informe se deben añadir los anexos como evidencia de la realización de los pasos anteriores.

Informe para Inmobiliaria:

Estimados miembros de la inmobiliaria A&C,

Se revisaron los datos de ofertas de vivienda publicadas en el portal de Fincaraiz relacionados con apartamentos de estrato 4 encontrando:

Información General

  • En el periodo revisado, para la ciudad de Cali, se ofertaron 1.363 apartamentos ubicados en estrato 4 principalmente en la zona Sur, con áreas construídas que varían entre 40 y 200 metros cuadrados, la mediana del área construida es de 70 metros cuadrados.

  • Los precios de los apartamentos varían según los metros cuadrados construídos desde 78 hasta 645 millones. A mayor área construída, mayor es el precio y esta correlación es estadísticamente significativa. Consideramos importante tenerlo en cuenta en el momento de definir los precios.

  • El 25% de los apartamentos cuesta menos de 153 millones y el 25% cuesta más de 240 millones.

Información sobre predicciones utilizando modelos estadísticos:

Si bien existe una relación fuerte entre el aumento del área construída y el aumento del precio del apartamento, lo modelos estadísticos calculados presentan resultados débiles y podrían estar sesgados, aún realizando ajustes (transformaciones) sobre los modelos propuestos, no se logró el cumplimiento de los supuestos, por lo que estos resultados deben tomarse con precaución para tomar decisiones.

  • Los modelos plantean que por cada aumento en un metro cuadrado de los apartamentos, el precio incrementa en promedio 2,16 millones y este incremento puede variar entre 2,06 y 2,26 milloes.

  • Cuando el área de los apartamentos es el valor promedio, es decir 75,5 metros cuadrados, el precio promedio sería de 202 millones.

  • Las predicciones muestran que para un apartamento de al rededor de 110 metros cuadrados, el precio puede estar al rededor de 440 millones y puede variar entre 429 y 452 millones de pesos.Encontrar un apartamento de 110 metros cuadrados por 200 millones sería una muy buena oferta.

Esperamos que esta información les sea de utilidad para fijar los precios de las viviendas ofertadas por ustedes, les recordamos tener precaución con el uso de la información porporcionada en los modelos estadísticos, lo que está totalmente claro es que apartamentos con mayor área construída, tendrán mayor precio.