Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz (datos_vivienda.xls - descarga) realizar los siguientes puntos:

Importe de la data

library(readxl)
datos <- read_excel("C:/Users/johna/Downloads/datos_vivienda1.xlsx")
head(datos)
## # A tibble: 6 × 2
##   Area_contruida precio_millon
##            <dbl>         <dbl>
## 1             86           250
## 2            118           385
## 3            130           395
## 4            181           419
## 5             86           240
## 6             98           320
attach(datos)

1) 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.

Exploración de las variables Precio de vivienda y Area construida:

summary(datos)
##  Area_contruida  precio_millon  
##  Min.   : 80.0   Min.   :240.0  
##  1st Qu.: 86.0   1st Qu.:251.2  
##  Median : 97.0   Median :305.0  
##  Mean   :115.7   Mean   :332.1  
##  3rd Qu.:130.0   3rd Qu.:395.0  
##  Max.   :195.0   Max.   :480.0
par(mfrow=c(2,2))

boxplot(precio_millon, main =  "Precio de vivienda (mm)", horizontal = TRUE, xlab =  "Precio de vivienda (mm)", col=rgb(0,0.5,1,alpha=0.5))
hist(precio_millon, breaks = 5, main =  "Precio de vivienda (mm)", xlab =  "Precio de vivienda (mm)")

boxplot(Area_contruida, main = "Area construida (m2)",  horizontal = TRUE, xlab =  "Area construida (m2)", col=rgb(0,0.5,1,alpha=0.5))
hist(Area_contruida, breaks = 5, main = "Area construida (m2)", xlab =  "Area construida (m2)" )

Este proyecto analizará la relación que existe entre el área construida de una vivienda y el precio de esta. Con respecto al precio de las viviendas incluidas en la muestra podemos decir que este esta centrado en 322.1 millones, sin embargo la distribución de precios de vivienda esta ligeramente sesgada a la derecha, el rango de valores del precio de las viviendas varia entre 240 y 480 millones. Con respecto a la variable independiente, el área construida, el promedio de las casas muestradas tiene 115.7 metros cuadrados, con un rango entre 80 m2 y 195 m2. La distribución del área de las viviendas si muestra un sesgo bastante pronunciado a la derecha; podemos observar que el 50% de las vivienda tienen entre 80 y 97 metros cuadrados mientras que el otro 50% tiene entre 97m2 y 195 m2.

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

library(ggplot2)
ggplot(datos, aes(Area_contruida, precio_millon)) +geom_point(size =2, shape = 23) + ylab("Precio De vivienda (mm)") + xlab("Area Construida (m2)")

cor.test(Area_contruida, precio_millon)
## 
##  Pearson's product-moment correlation
## 
## data:  Area_contruida and precio_millon
## t = 11.422, df = 24, p-value = 3.45e-11
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8255707 0.9634168
## sample estimates:
##       cor 
## 0.9190295

Para desarrollar un análisis bivariado primero revisaremos el diagrama de puntos de estas dos variables. Aquí podemos identificar que existe una relación directa entre el área construida y precio de las viviendas. Adicional a esto, se desarrolló un test de correlación el cual nos arroja un coeficiente r = 0.9190, este valor nos indica una fuerte y positiva relación lineal entre las variables en estudio.

3) Estime el modelo de regresión lineal simple entre 𝑝𝑟𝑒𝑐𝑖𝑜 = 𝑓(𝑎𝑟𝑒𝑎) + 𝑒. Interprete los coeficientes del modelo 𝛽0, 𝛽1 en caso de ser correcto.

mod=lm(precio_millon ~ Area_contruida)
summary(mod)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -51.673 -25.612  -6.085  24.875  67.650 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      86.234     22.479   3.836 0.000796 ***
## Area_contruida    2.124      0.186  11.422 3.45e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 33.05 on 24 degrees of freedom
## Multiple R-squared:  0.8446, Adjusted R-squared:  0.8381 
## F-statistic: 130.5 on 1 and 24 DF,  p-value: 3.45e-11
ggplot(datos, aes(Area_contruida, precio_millon)) +geom_point(size =2, shape = 23) + geom_smooth(method=lm) + ylab("Precio De vivienda (mm)") + xlab("Area Construida (m2)")
## `geom_smooth()` using formula 'y ~ x'

El modelo de regresión lineal se estima en: Precio = 82.234 + 2.124 * Area_Contruida

𝛽0 = 82.234, este coeficiente nos indica el valor de la variable precio cuando no se tiene efecto del área construida. Para el ejemplo no se puede decir una casa de 0 m2 vale 82 millones, pero si podemos concluir que el precio base de las casas sin la influencia del metraje es de 82.2 millones en promedio.

𝛽1 = 2.124, este coeficiente nos indica el cambio en el precio por cada metro cuadrado variado en la vivienda. En otras palabras, el incremento de un metro cuadrado de área construida genera un aumento en el precio de la vivienda de 2.12 millones aproximadamente.

4) 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 hipotesis t.

confint(mod)
##                   2.5 %     97.5 %
## (Intercept)    39.83983 132.627917
## Area_contruida  1.74017   2.507771

Con respecto al al coeficiente 𝛽1, el intervalo de 95% de confianza para este estimador es (1.74, 2.51), dado que el 0 no esta incluido en el intervalo de confianza, podemos concluir que se rechaza la hipótesis nula y se concluye que hay suficiente evidencia para no aceptar la nulidad de este coeficiente.

Si comparamos este resultado con la prueba t que nos da el output del punto anterior, el p-value para el coeficiente 𝛽1 fue de aproximadamente 0, esto apoya el rechazo de la hipótesis de nulidad y apoya la conclusión obtenida con el intervalo de confianza.

5) Calcule e interprete el indicador de bondad y ajuste R2

summary(mod)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -51.673 -25.612  -6.085  24.875  67.650 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      86.234     22.479   3.836 0.000796 ***
## Area_contruida    2.124      0.186  11.422 3.45e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 33.05 on 24 degrees of freedom
## Multiple R-squared:  0.8446, Adjusted R-squared:  0.8381 
## F-statistic: 130.5 on 1 and 24 DF,  p-value: 3.45e-11

El indicador de bondad y ajuste para esta relación es de 0.8446, esto quiere decir que el modelo explica un 84.46% de la variación del precio de la vivienda. En otras palabras, la variabilidad de el área construida explica el 84.46% de la variabilidad en el precio de la vivienda. El 15.54% restante no es explicado por el modelo sino por variables externas que no se tienen en cuenta. De forma general podemos decir que el modelo tiene bastante fuerza para predecir a la variable dependiente.

6) ¿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 buena oferta? ¿Qué consideraciones adicionales se deben tener?.

predict(mod, newdata = list(Area_contruida=110))
##        1 
## 319.8706

El precio estimado por el modelo para un apartamento de 110 metros cuadrados es de 319.9 millones, la oferta de una vivienda de 110 metros cuadrados a 200 millones resultaría una muy buena oferta dado que es un valor bastante por debajo del esperado. Por supuesto, en la vida real se deben analizar muchas más variables, el modelo nos da una idea de que este precio es bastante económico para el metraje de la vivienda.

7) Realice la validación de supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos.

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

Vaidación de supuestos:

  • Errores aleatorios con media 0: A pesar de que los errores están centrados en 0, estos no parecen ser aleatorios, la existencia de una forma parabólica en la distribución de los errores es clara. Por lo que NO SE CUMPLE el supuesto de aleatoriedad.

  • Varianza constante, en el gráfico de residuos vs predichos podemos se puede evidenciar que la variabilidad de los errores no es constante, por lo contrario para valores bajos del precio se presenta una variabilidad mucho menor que para valores más altos. Por lo que NO SE CUMPLE el supuesto de varianza constante.

  • Independencia: Dado que no se cumplen los primeros dos supuestos, no se puede concluir que hay independencia entre los residuos, se evidencia un patrón en la distribución de estos como se mencionó anteriormente. NO SE CUMPLE INDEPENDENCIA

  • Normalidad: Dado que en la gráfica Normal Q-Q los puntos están bastante alineados a la recta se podría decir que SI SE CUMPLE NORMALIDAD en los residuos.

A pesar de que las métricas de correlación r y R2 arrojan buenos resultados, estos solo se pueden tener en cuenta si los supuestos se cumplen. Dado que 3 de los supuestos no se cumplen, un modelo de regresión lineal no es apropiado para representar la relación ente el área construida y el precio de la vivienda. Debido a esto se recomienda la creación de otro tipo de modelo diferente al de linealidad,

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

Analizando el scatterplot generado al inicio del problema, se levanta la sospecha de que una transformación hiperbólica podría ser apropiada para los datos en estudio. A continuación se genera la transformación y los gráficos de validación de supuestos:

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
datos_hip <- mutate(datos, Area_Hip= 1/Area_contruida)
head(datos_hip)
## # A tibble: 6 × 3
##   Area_contruida precio_millon Area_Hip
##            <dbl>         <dbl>    <dbl>
## 1             86           250  0.0116 
## 2            118           385  0.00847
## 3            130           395  0.00769
## 4            181           419  0.00552
## 5             86           240  0.0116 
## 6             98           320  0.0102
md2 <- lm(datos_hip$precio_millon ~ datos_hip$Area_Hip)
summary(md2)
## 
## Call:
## lm(formula = datos_hip$precio_millon ~ datos_hip$Area_Hip)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -36.987 -16.743  -5.023  18.547  44.379 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           635.35      18.27   34.77  < 2e-16 ***
## datos_hip$Area_Hip -32464.72    1895.32  -17.13 5.84e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 23.05 on 24 degrees of freedom
## Multiple R-squared:  0.9244, Adjusted R-squared:  0.9212 
## F-statistic: 293.4 on 1 and 24 DF,  p-value: 5.839e-15
par(mfrow=c(2,2))
plot(md2)

Nuevo modelo Hiperbólico

Precio = 635.35 - 32464.72/(Área)

Utilizando la transformación hiperbólica se obtiene una validación de todos los supuestos que no se cumplieron en la regresión lineal simple, como podemos ver en la gráfica de residuos vs predichos, los errores están centrados en 0, no presentan ningún patrón (existe aleatoriedad) y no menos importante, la variabilidad de estos es constante para todo el rango de precios predichos. Por lo que podemos concluir que con la trasformación hiperbólica se cumplen los supuestos de aleatoriedad en los residuos y media 0, varianza constante, independencia y normalidad.

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

Con respecto al ajuste del modelo, se pasó de tener un R2 de 0.8446 con el modelo inicial a uno de 0.9244 con el modelo hiperbólico, esto nos dice que el modelo hiperbólico explica mejor el precio de las viviendas que el modelo simple. Por otro lado y como ya vimos en el punto anterior el modelo hiperbólico cumple todos los supuestos de la regresión por lo que este es el apropiado para relacionar las variables en estudio.