Actividad Regresión Lineal Simple

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

Importación del Dataset

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")

Importación de Paquetes

#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

1. Analisis Exploratorio

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.

Area_contruida

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

precio_millon

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

2. Analisis Bivariado

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

3. Modelo de Regresion Lineal Simple

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

5. bondad y ajuste 𝑅^ 2

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

6. Hipotesis

¿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

7. Validación del modelo

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)

8. Transformación

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

9. Comparación

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)