Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz realizar los siguientes puntos:

  1. Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y area de la vivienda (metros cuadrados) - incluir graficos e indicadores apropiados interpretados.
require(ggplot2)
require(ggpubr)
breaks <- pretty(range(datos$Area_contruida),
                 n = nclass.Sturges(datos$Area_contruida),
                 min.n = 1)
 g1= ggplot(datos,aes(x=Area_contruida))+
    geom_histogram(aes(y = ..density..),
                   color = 1, fill = "#D0D1E6",
                   breaks = breaks) +
    geom_density(color = "#74A9CF",lwd  = 0.8)+
    theme_classic()
 
 breaks <- pretty(range(datos$precio_millon),
                 n = nclass.Sturges(datos$precio_millon),
                 min.n = 1)
 g2= ggplot(datos,aes(x=precio_millon))+
    geom_histogram(aes(y = ..density..),
                   color = 1, fill = "#D0D1E6",
                   breaks = breaks) +
    geom_density(color = "#74A9CF",lwd  = 0.8)+
    theme_classic()
 
ggarrange(g1,g2,labels = c("Area construida", "Precio en millones"),ncol = 2, nrow = 1)

y <- table1::table1(~precio_millon+Area_contruida, data = datos)
y
Overall
(N=26)
precio_millon
Mean (SD) 332 (82.1)
Median [Min, Max] 305 [240, 480]
Area_contruida
Mean (SD) 116 (35.5)
Median [Min, Max] 97.0 [80.0, 195]

En cuanto al análisis de las variables podemos ver que:

\(*\) El área construida tiene una media de 116 metros cuadrados y una mediana de 97 metros cuadrados, con una desviación estándar de 35.5 metros cuadrados, con esto vemos una distribución asimetrica positiva, donde la media esta concentrada en la parte izquierda y se cuenta con una amplia cola derecha.

\(*\) El precio de las viviendas cuenta con una media de 332 millones de pesos, y una mediana de 305 millones de pesos, con una desviación estándar de 82.1 millones de pesos. Cuando analizamos la distribución vemos un comportamiento bimodal.

  1. 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 graficos e indicadores apropiados interpretados.
library("car")
scatterplot(precio_millon ~ Area_contruida, data = datos,  main=c("Correlacion",cor.test(datos$Area_contruida, datos$precio_millon)$estimate))

Con este análisis bivariado, podemos ver una relación fuerte y positiva entre ambas variables. Se tiene un coeficiente de correlación de 0.919, y la dinámica expuesta en la gráfica anterior muestra que a medida que el área construida incrementa, también lo hace el precio en millones de la vivienda. A pesar de tener clara la relación directa y positiva entre ambas variables, es posible ajustar esta relación con diferentes aproximaciones. Inicialmente se considerará una aproximación lineal de ambas variables en su estado natural (sin transformaciones)

  1. Estime el modelo de regresión lineal simple entre \(precio = f(area)+e\). Interprete los coeficientes del modelo \(\beta_0\); \(\beta_1\) en caso de ser correcto.
library("stargazer")
modelo1=lm(precio_millon~Area_contruida)
stargazer(modelo1, type = 'html')
Dependent variable:
precio_millon
Area_contruida 2.124***
(0.186)
Constant 86.234***
(22.479)
Observations 26
R2 0.845
Adjusted R2 0.838
Residual Std. Error 33.048 (df = 24)
F Statistic 130.455*** (df = 1; 24)
Note: p<0.1; p<0.05; p<0.01

La estimación del modelo propuesto \(Precio = \beta_0 + \beta_1 Area Construida\) nos da respuesta a varias cuestiones. Por un lado el intercepto, \(\beta_0\), nos indica el precio base de las viviendas; dada la especificación del modelo planteado este precio es de 86.23 millones de pesos, es decir incluso cuando un inmueble no posee area este seria el valor que se cobraria. Por su lado el coeficiente \(\beta_1\) nos muestra la elasticidad de respuesta del precio de las viviendas al área construida, es decir por incrementos en una unidad den el área de la vivienda, se espera incrementos de 2.124 millones de pesos en el precio del inmueble.

4.Construir un intervalo de confianza (95%) para el coeficiente \(\beta_1\), interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipotesis t.

library(kableExtra)

x=confint(modelo1, level=.95)
  x %>%
   kbl(booktabs = T,) %>%
   kable_classic_2(full_width = F)
2.5 % 97.5 %
(Intercept) 39.839830 132.627917
Area_contruida 1.740169 2.507772

Cuando construimos un intervalo de confianza del 95 porciento, podemos ver que tanto el intercepto como el \(\beta\) asociado al área de construcción son positivos, esto indica que la relación entre las variables es positiva, ademas el hecho que el intervalo no incluya el cero muestra una significancia estadística; Esta respuesta que es consistente con el resultado de la regresión previamente planteada, bajo la cual ambos coeficientes son estadísticamente significativos al 95%, esto quiere decir que con este nivel de confianza se rechaza la hipótesis nula, bajo la cual los parametros del modelos son es iguales a 0.

  1. Calcule e interprete el indicador de bondad y ajuste R^2
G=matrix(c(summary(modelo1)$r.squared,summary(modelo1)$adj.r.squared), ncol=1)
rownames(G)<- c("R Cuadrado","R Cuadrado ajustado")
  G %>%
   kbl(booktabs = T,) %>%
   kable_classic_2(full_width = F)
R Cuadrado 0.8446152
R Cuadrado ajustado 0.8381408

El \(R^2\) o \(R^2 ajustado\) muestran la bondad de ajuste del modelo, es decir que tanto las variables explicativas, en este caso el área de construcción como el intercepto son capaces de explicar la variabilidad de la variable dependiente, en este caso el precio en millones de pesos del inmueble. Ambos coeficientes muestran que el grado explicativo del modelo propuesto de alrededor de 84%.

  1. Cual seria el precio promedio estimado para un apartamento de 110 metros cuadrados? Considera entonces con este resultado que un apartemento en la misma zona con 110 metros cuadrados en un precio de 200 millones seria una una buena oferta? Que consideraciones adicionales se deben tener?
p=predict(modelo1,list(Area_contruida=110),interval = "confidence",level = 0.95)

G=matrix(c(p[1], p[2], p[3]), ncol=3)
colnames(G)<- c("Media","Inferior","Superior")
rownames(G)<- c("Precio estimado en millones")

  G %>%
   kbl(booktabs = T,) %>%
   kable_classic_2(full_width = F)
Media Inferior Superior
Precio estimado en millones 319.8706 306.3133 333.4279

Si, sería una muy buena oferta, dado que el precio estimado de una vivienda con un área construida de 110 metros cuadrados es de 319.87 millones de pesos, con un intervalo de 309.31 millones y 333.43 millones. Otras consideraciones que se deberían tener en cuenta, es el estado del inmueble, la disposición del espacio, la ubicación y su índice de criminalidad, dado que como vimos en el punto anterior, el modelo tiene una muy buena bondad de ajuste, pero no es capaz de explicar toda la variabilidad de la variable dependente.

  1. Realice la validación de supuestos del modelo por medio de graficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos.
#install.packages("olsrr")
library(olsrr)
library(lmtest)
library(skedastic)


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

X=ols_test_normality(modelo1)
G=matrix(c(matrix(c(round(X$kolmogorv$p.value,3), round(X$shapiro$p.value,3),round(X$anderson$p.value,3),'','' ), ncol=1), matrix(c('','','',round(bptest(modelo1)$p.value,3),round(white_lm(modelo1)$p.value,3)), ncol=1)), ncol=2)
colnames(G)<- c("Normalidad","Homocedasticidad")
rownames(G)<- c("Kolmogorov","Shapiro","Anderson","Breusch-Pagan","White")
  G %>%
   kbl(booktabs = T,) %>%
   kable_classic_2(full_width = F)
Normalidad Homocedasticidad
Kolmogorov 0.412
Shapiro 0.301
Anderson 0.188
Breusch-Pagan 0.015
White 0.039

Existen 4 supuestos principales:

\(*\) Normalidad de los errores

\(*\) Homocedasticidad de los errores

\(*\) Ausencia de autocorrelación de los errores

\(*\) Media cero de los errores.

Inicialmente vamos a analisar la linealidad, para esto revisamos el grafico de Residual vs Fitted, en este vemos que los residuales no tienen comportamiento de nube, sino que parecen tener un comprortamiento hiperbolico o polinomico, mostrando que tal vez la relacion lineal no es la correcta para estas dos variables.

Para poder validad la normalidad de los errores podemos hacer uso de dos herramientas, la primera es realizar graficas qq de normalidad y lo segundo es apoyarnos con test estadísticos, como Shapiro wilk, Kolmogorov-Smirnov y Anderson-Darling. Con todos los test (se tiene un valor p mayor a 0.05, por lo cual no se rechaza la hipótesis nula de normalidad) y los gráficos de normalidad podemos decir que no existe evidencia a favor de la no normalidad de los residuos de la regresión, por lo cual no se estaría violando este supuesto.

Para validad el segundo supuesto, el de homocedasticidad, el cual consiste en que la varianza de los errores sea contante, realizaremos pruebas estadísticas, como Breusch-Pagan, el test de White y las compararemos con el gráfico de Scale-Location. Con los resultados reportados en el gráfico y en los test estadísticos, se puede decir que existe evidencia a favor de heterocedasticidad presente en la regresión, dado que los valores p en las pruebas son menores al valor de significancia típico de 0.05, se rechaza la hipótesis nula de homocedasticidad. En términos gráficos se puede ver que los errores siguen una pendiente y no tienen comportamiento de nube en los gráficos mencionados, y con esto se estaría violando uno de los supuestos necesarios y por lo tanto la estimación por MCO no sería eficiente (aunque los coeficientes siguen siendo insesgado y consistentes), ya que la varianza no es óptima, y en este caso los estadístico t y f no se podría usar tal y como están.

En cuanto a la no autocorrelación de los errores, dado que contamos con unos datos de corte transversal y no serie de tiempo, no debería existir una violación de este supuesto.

Y finalmente la media cero de los errores hace referencia a la especificación correcta del modelo, si por ejemplo estamos ante un caso de variables omitidas es de esperarse que el termino error contenga el comportamiento de esta variable y genere un efecto constante en los residuales. Esto se puede validar con la grafica Residuals vs fitted, y sacando la esperanza matemática de los errores. Con estos resultados podemos ver que aunque la media de los errores no parece ser cero a simple vista, al sacar el valor exacto de esta podemos ver que es 0. Si embargo los residuales presentes en la grafican tienen un comportamiento hiperbólico, que puede dar a entender algún efecto omitido.

Par poder corregir los problemas de heterocedasticidad y linealidad, realizaremos unas transformaciones de los datos, de tal manera que la relación entre las variables (transformadas) puede expresarse de mejor manera bajo una regresión lineal.

  1. De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
t=1/Area_contruida
modelo2=lm(precio_millon~t)
stargazer(modelo1,modelo2, type = 'html')
Dependent variable:
precio_millon
(1) (2)
Area_contruida 2.124***
(0.186)
t -32,464.720***
(1,895.322)
Constant 86.234*** 635.350***
(22.479) (18.274)
Observations 26 26
R2 0.845 0.924
Adjusted R2 0.838 0.921
Residual Std. Error (df = 24) 33.048 23.054
F Statistic (df = 1; 24) 130.455*** 293.398***
Note: p<0.1; p<0.05; p<0.01

Dado que el supuesto que se está violando en el modelo planteado en el punto 3, es el de homocedasticidad, tenemos que indagar en las causas de este, para ver si la solución puede ser una transformación, o si es necesario realizar una estimación con los errores robustos de white, de tal forma que las inferencias estadísticas tengan validez asindotica sobre los valores de los parámetros.

Viendo las gráficas de valides de los supuestos y los test estadísticos, podemos ver que no hay fallas en el supuesto de normalidad, tampoco tenemos presencia de datos atípicos, o cambios estructurales. Podemos entonces están ante la presencia de omisiones de variables en la especificación o errores en la especificación de la forma funcional. Dado que tambien vemos una violacion en el supuesto de linealidad de las variables (grafica Residual vs Fitted), es razonable optimar por la utima opcion, y generar una transformacion de las variables tal que con esto si se pueda expresar una relacion lineal entre ellas.

Para esto usamos diferentes especificaciones y evaluamos el supuesto de homocedasticidad para poder ver si la estimación de MCO es ahora eficiente, las especificacion del modelo a elegir estan en linea con el analisis bivariado que se realizo en el taller, donde se ve que los datos si bien tienen una relacion directa y fuerte, parecen tener un ajuste hiperbolico o polinomico. En este reporte se mostrara aquel con mejor bondad de ajuste

  1. De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.
par(mfrow=c(2,2))
plot(modelo2)

X=ols_test_normality(modelo2)
G=matrix(c(matrix(c(round(X$kolmogorv$p.value,3), round(X$shapiro$p.value,3),round(X$anderson$p.value,3),'','' ), ncol=1), matrix(c('','','',round(bptest(modelo2)$p.value,3),round(white_lm(modelo2)$p.value,3)), ncol=1)), ncol=2)
colnames(G)<- c("Normalidad","Homocedasticidad")
rownames(G)<- c("Kolmogorov","Shapiro","Anderson","Breusch-Pagan","White")
  G %>%
   kbl(booktabs = T,) %>%
   kable_classic_2(full_width = F)
Normalidad Homocedasticidad
Kolmogorov 0.722
Shapiro 0.587
Anderson 0.59
Breusch-Pagan 0.103
White 0.248

Este segundo modelo, hace referencia a un ajuste hiperbolico, con este se ve una bondad de ajuste superior que en las otras especificaciones, y adicionalmente podemos ver tanto grafica como en los test estadísticos que se están cumpliendo los supuestos de las regresiones lineales, generando que los estimadores sean consistentes, insesgados y eficientes. A diferencia del modelo1 (planteado en el punto 3) se puede ver que ahora la grafica de Residual vs Fitted tiene comportamiento de nube, al igual que Sacle-Location, mostrando que los dos supuestos que se estaban violando, se han arreglado con la transformacion necesaria.