Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz (datos_vivienda.xls - descarga) realizar los siguientes puntos:
library(readxl)
datos_vivienda <- read_excel("C:/Users/oscar/OneDrive/Escritorio/Maestria en Ciencia de Datos Javeriana/Metodos y simulacion estadistica/Unidad 3/datos_vivienda1.xlsx")
#install.packages('ggplot2', repos = "http://cran.us.r-project.org")
#install.packages('ggpubr', repos = "http://cran.us.r-project.org")
#install.packages('dplyr', repos = "http://cran.us.r-project.org")
#install.packages('table1', repos = "http://cran.us.r-project.org")
#install.packages('CGPfunctions', repos = "http://cran.us.r-project.org")
#install.packages("psych")
#install.packages("kableExtra")
library(ggplot2)
library(ggpubr)
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
library(table1)
##
## Attaching package: 'table1'
## The following objects are masked from 'package:base':
##
## units, units<-
library(CGPfunctions)
library(knitr)
library(psych)
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(kableExtra)
## Warning in !is.null(rmarkdown::metadata$output) && rmarkdown::metadata$output
## %in% : 'length(x) = 2 > 1' in coercion to 'logical(1)'
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
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.
Respuesta: Se puede observar que el promedio del área construida es de 115.74 metros cuadrados, con una desviación estándar de 35.54 lo que nos indica que tenemos mucha variabilidad. Además de el rango en el que se mueve es de 80 a 195 metros cuadrados.
attach(datos_vivienda)
ggplot(datos_vivienda,aes(x=Area_contruida,fill = factor(Area_contruida)))+geom_histogram()+theme_bw()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
tabla1=describe(Area_contruida)
tabla1%>%kbl(digits = 5)%>%kable_styling(font_size = 11,full_width = FALSE)
| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| X1 | 1 | 26 | 115.7469 | 35.54332 | 97 | 112.2009 | 21.4977 | 80 | 195 | 115 | 0.81315 | -0.74761 | 6.97062 |
Respuesta: El promedio del precio por millón es de 332 millones, con una desviación estándar de 82 millones esto nos indica que la variable tiene mucha variación. El rango de valores va desde los 240 a 480 millones, Siendo los 240 y 385 los valores mas repetidos.
ggplot(datos_vivienda,aes(x=precio_millon,fill = factor(precio_millon)))+geom_histogram()+theme_bw()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
tabla2=describe(precio_millon)
tabla2%>%kbl(digits = 5)%>%kable_styling(font_size = 11,full_width = FALSE)
| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| X1 | 1 | 26 | 332.0769 | 82.14423 | 305 | 328.3636 | 96.369 | 240 | 480 | 240 | 0.23815 | -1.61777 | 16.10981 |
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.
Respuesta: En el diagrama de puntos se puede observar que entre mayor sea el área, mayor será el precio por millón.
plot(Area_contruida,precio_millon,pch=16)
Respuesta: coeficiente de correlación es de 0.91, lo que nos indica que estas dos variables tienen una relación muy fuerte y un cambio en la variable área construida repercute en el precio en millones, Es decir que si el área aumenta el precio también lo hará y en caso contrario igual si el área disminuye el precio también.
cor(Area_contruida,precio_millon)
## [1] 0.9190295
Estime el modelo de regresión lineal simple entre 𝑝𝑟𝑒𝑐𝑖𝑜 = 𝑓(𝑎𝑟𝑒𝑎) + 𝑒. Interprete los coeficientes del modelo 𝛽0, 𝛽1 en caso de ser correcto.
Respuesta: El coeficiente 𝛽1 no indica que, por cada aumento de 1 metro cuadrado en el área construida, el precio en millones de la vivienda aumentara en 2.124. además, el coeficiente 𝛽0 nos indica el punto de corte con el eje Y óseo precio por millones el cual es de 86.2. Al final la ecuacion corrrespondiente al modelo lineal simple seria Y = 2.124X + 86.2
El resultado Pr(>|t|) = 3.45e-11 nos indica el nivel de significancia que tiene la relación del área construida con el precio en millones y podemos ver si se cumple por lo que estas dos variables están asociadas de manera significativa.
mod=lm(precio_millon~Area_contruida, data=datos_vivienda)
summary(mod)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = datos_vivienda)
##
## 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
## 4. Intervalo 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 hipotesis t.
Respuesta: Con un 95% de confianza podemos afirmar que el valor de 𝛽1 se va a encontrar entre 1.74 y 2.5.
confint(object=mod,parm="Area_contruida", level = 0.95)
## 2.5 % 97.5 %
## Area_contruida 1.74017 2.507771
Calcule e interprete el indicador de bondad y ajuste 𝑅2
Respuesta: valor del R2 es de 0.8446, lo que nos indica que el área impacta en un 84.46% el precio de las viviendas, por lo cual se pude considerar una variable significativa.
summary(mod)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = datos_vivienda)
##
## 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
¿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?.
Respuesta: Como resultado de usar la formula del modelo obtenemos que el precio promedio de una vivienda de 110 metros cuadrados es de 319.87 millones, por lo que una vivienda con la misma área por 200 millones sería una oferta buena oferta si es para compra y una pérdida de dinero si es para venta.
Además, se deben considerar otros factores no solamente el área construida, porque es importante conocer el número de habitaciones, ubicación, estrato, cercanía de lugares importantes, entre otros factores que pueden ser relevantes a la hora de realizar una compraventa.
# Para calcular esto podemos usar la formula del modelo Y = 2.124X + 86.2, reemplazando x por 110.
predict(mod,list("Area_contruida"=110),interval = "confidence")
## fit lwr upr
## 1 319.8706 306.3133 333.4279
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.
Respuesta: puede ver en el gráfico de Residuales vs Valores ajustados, que los valores residuales presentan un comportamiento lo que nos indica que estos aun poseen una componente sistemática que no está incluida en el modelo y que se podría incluir. Por lo que la relación lineal que se usó como supuesto inicial puede no ser la mejor para realizar el modelo entre la relación del área construida y el precio en millones.
Se deberá realizar una transformación sobre la variable predictora para buscar mejorar la situación.
par(mfrow=c(2,2))
plot(mod)
De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
Respuesta: Luego de realizar una transformacion sobre la variable predictora Area_contruida, encontramos que la correlacion entre esta y la variable precio por millon mejoro, pasando de 84.46% a 89.63 siendo esto una mejora de 5.17% en la correlacion.
transformacion_mod=lm(precio_millon~log(Area_contruida), data=datos_vivienda)
summary(transformacion_mod)
##
## Call:
## lm(formula = precio_millon ~ log(Area_contruida), data = datos_vivienda)
##
## Residuals:
## Min 1Q Median 3Q Max
## -45.837 -20.153 -1.878 20.145 55.145
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -948.53 89.09 -10.65 1.42e-10 ***
## log(Area_contruida) 271.88 18.88 14.40 2.63e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 27 on 24 degrees of freedom
## Multiple R-squared: 0.8963, Adjusted R-squared: 0.8919
## F-statistic: 207.4 on 1 and 24 DF, p-value: 2.63e-13
De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.
Respuesta: Comparando el modelo inicial y el transformado, podemos ver una pequeña mejora en el comportamiento de los residuales siendo estos un poco más aleatorios.
Frente al grafico de la normalidad, en el modelo transformado los datos se comportan de forma más normal ajustándose mejore en la línea de normalidad.
Pero sería recomendado realizar el modelo teniendo en cuenta más variables para poder tener un modelo con una mejor predicción.
par(mfrow=c(2,2))
plot(mod)
par(mfrow=c(2,2))
plot(transformacion_mod)