Emerson Trujillo Sierra

Pregunta 3

  1. Con base en los datos de precios de vivienda de la actividad en clase realizar un informe que contenga los siguientes puntos utilizando R y RMarkdown.
library(readxl)
library(ggplot2)
datos_viviendas<- read_excel("C:/Users/portatil/DatosR/Metodos2/Datos_Vivienda.xlsx")
attach(datos_viviendas)
head(datos_viviendas,n = c(6,7))
## # A tibble: 6 × 7
##   Zona       piso  Estrato precio_millon Area_contruida parqueaderos Banos
##   <chr>      <chr>   <dbl>         <dbl>          <dbl> <chr>        <dbl>
## 1 Zona Sur   2           6           880            237 2                5
## 2 Zona Oeste 2           4          1200            800 3                6
## 3 Zona Sur   3           5           250             86 NA               2
## 4 Zona Sur   NA          6          1280            346 4                6
## 5 Zona Sur   2           6          1300            600 4                7
## 6 Zona Sur   3           6           513            160 2                4

a. Realice un filtro a la base de datos e incluya solo las ofertas de apartamentos, de la zona norte de la ciudad con precios inferiores a los 500 millones de pesos y áreas menores a 300 mt2. Presente los primeros 3 registros de la base y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de la base, discutir si todos los puntos se ubican en la zona norte o se presentan valores en otras zonas, por que?).

#Filtros:
filtro = which ( datos_viviendas$Tipo == "Apartamento" & datos_viviendas$Zona == "Zona Norte" & datos_viviendas$precio_millon < 500 & datos_viviendas$Area_contruida < 300)

#datos filtrados:
viviendas_fil = datos_viviendas[filtro,]

# arqueadero pasarlo a tipo númerico
viviendas_filt <- transform(viviendas_fil, parqueaderos = as.numeric(parqueaderos))

#Reemplazar NA
viviendas_filt[is.na(viviendas_filt)] <- 0


head(viviendas_filt, n = c(6,7))
##         Zona piso Estrato precio_millon Area_contruida parqueaderos Banos
## 1 Zona Norte    2       3           135             56            1     1
## 2 Zona Norte   NA       3            78             54            2     1
## 3 Zona Norte   NA       5           340            106            2     2
## 4 Zona Norte    1       3           135            103            1     3
## 5 Zona Norte    1       3            75             54            1     2
## 6 Zona Norte   NA       4           175             77            1     2
require(leaflet)
leaflet() %>% addCircleMarkers(lng= viviendas_filt$cordenada_longitud, lat=viviendas_filt$Cordenada_latitud, radius = 4, color = "red")  %>% addTiles()

En el mapa donde se referencia todos los apartamentos ubicados en la zona norte de la ciudad,ademas con precios inferiores a los 500 millones y areas menores a 300 m2, se puede observar que muchos de los puntos se encuentran referenciados en la zona sur, incluso algunos en la zona oeste y oriente, esto se debe a que en la base de datos original a muchos apartamentos que quedan en la zona sur, oeste y oriente le han reistrado coordenada longitud y latitud norte, en este caso como el modelo grafica las ubicaciones respecto a la longitud y latitud entonces se esta presentadno el error.

b. Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apartamento) en función del área construida, estrato y si tiene parqueadero. Use gráficos interactivos con plotly e interprete los resultados.

grafico=ggplot(viviendas_filt,aes(y=precio_millon,x=Area_contruida)) + geom_point(colour = "red", size = 2) + geom_smooth()
grafico

De acuerdo al grafico Se puede observar una relación directa, es decir a mayor área contruida, mayor es el precio.

grafico=ggplot(viviendas_filt,aes(y=precio_millon,x=Estrato)) + geom_point(colour = "red", size = 2) + geom_smooth()
grafico

Según el gráfico se puede observar que entre mayor sea el estrato, mayor es el precio de la vivienda.

grafico=ggplot(viviendas_filt,aes(y=precio_millon,x=parqueaderos)) + geom_point(colour = "red", size = 2) + geom_smooth()
grafico

Según el gráfico no se puede definir una relación existente entre el numero de parqueaderos vs el precio de la vivienda.

C. Estime un modelo de regresión lineal múltiple con las variables del punto anterior e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).

modelo_multi_vivi = lm(precio_millon ~ Area_contruida + Estrato + parqueaderos, data = viviendas_filt )
summary(modelo_multi_vivi)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida + Estrato + parqueaderos, 
##     data = viviendas_filt)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -216.571  -31.564   -1.213   27.889  224.053 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -157.38220    7.71190 -20.408  < 2e-16 ***
## Area_contruida    0.94938    0.06054  15.682  < 2e-16 ***
## Estrato          68.99436    2.26623  30.445  < 2e-16 ***
## parqueaderos     22.64906    2.73064   8.294 3.24e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 53.75 on 1073 degrees of freedom
## Multiple R-squared:  0.7629, Adjusted R-squared:  0.7623 
## F-statistic:  1151 on 3 and 1073 DF,  p-value: < 2.2e-16

La ecuación de regresión corresponde a: Preciomillon = −157.38220 + 0.94938(Area_contruida) + 68.99436(Estrato) + 22.64906(parqueaderos)

R cuadrado es igual a 0.7623 significa que la variables: area construida, estrato y parquaderos explican el 76% del precio del apartamento.

Hipótesis para ßo: Ho:βo=0,Ha:β0≠0

p−value=2e−16∗∗∗

Ya que p-value < 0.05, se rechaza H0: ß0 = 0 Hipótesis para ß1: H0:β1=0,Ha:β1≠0

p−value=2e−16∗∗∗

Ya que p-value < 0.05, se rechaza Ho: ß2 = 0 Hipótesis para ß2: Ho:β2=0,Ha:β2≠0

p−value=2e−16∗∗∗

ya que p-value < 0.05, se rechaza Ho: ß2 = 0 Hipótesis para ß3: Ho:β3=0,Ha:β3≠0

p−value=3.24e−16∗∗∗

Ya que p-value < 0.05, se rechaza Ho: ß3 = 0

d. Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas solo realizar sugerencias de que se podría hacer).

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

Supuesto 1: El valor esperado de los errores es cero E[u]=0

 summary(modelo_multi_vivi$residuals)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -216.571  -31.564   -1.213    0.000   27.889  224.053
t.test(modelo_multi_vivi$residuals, mu=0)
## 
##  One Sample t-test
## 
## data:  modelo_multi_vivi$residuals
## t = 6.246e-16, df = 1076, p-value = 1
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -3.209419  3.209419
## sample estimates:
##    mean of x 
## 1.021631e-15

p-value = 1 > α = 0.05, se tiene evidencia suficiente para no rechazar que Ho: ßo = 0, por tanto el supuesto se cumple.

Supuesto 2 : Los errores tienen varianza constante. V[ui]=σ2

library(lmtest)
lmtest::gqtest(modelo_multi_vivi) ##La prueba de Goldfeld-Quandt se utiliza para determinar si la heterocedasticidad está presente en un modelo de regresión.##
## 
##  Goldfeld-Quandt test
## 
## data:  modelo_multi_vivi
## GQ = 1.8151, df1 = 535, df2 = 534, p-value = 4.04e-12
## alternative hypothesis: variance increases from segment 1 to 2

como p-value = 4.04e-12 < α = 0.05, se rechaza la hipotesis nula, quiere decir que, los errores no tienen varianza constante, el supuesto no se cumple.

Supuesto 3 : u es una variable con distribución normal. u∼ Normal

shapiro.test(modelo_multi_vivi$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_multi_vivi$residuals
## W = 0.98702, p-value = 3.509e-08

Como p-value = 3.509e-08 < α = 0.05, se rechaza la hipótesis nula, quiere decir que, los errores no se distibuyen de forma normal, el supuesto no se cumple.

Supuesto 4 : Los errores son independientes unos de otros E[ui,uj]

lmtest::dwtest(modelo_multi_vivi)
## 
##  Durbin-Watson test
## 
## data:  modelo_multi_vivi
## DW = 1.757, p-value = 2.992e-05
## alternative hypothesis: true autocorrelation is greater than 0

Como p-value = 2.992e-05 < α = 0.05, se rechaza la hipótesis nula, quiere decir que, los errores no son indepentientes, el supuesto no se cumple.

e. Con el modelo identificado predecir el precio de un apartamento con 100 mt2, de estrato 4 y con parqueadero. ¿Si este apartamento lo están ofreciendo en 450 millones cual seria su opinión con base en el resultado del modelo considera que es una buena oferta?

#con un parqueadero:
predict(modelo_multi_vivi,list(Area_contruida=100, Estrato = 4, parqueaderos = 1), interval = "confidence" )
##        fit      lwr      upr
## 1 236.1822 232.2449 240.1195
#con dos parqueaderos:
predict(modelo_multi_vivi,list(Area_contruida=100, Estrato = 4, parqueaderos = 2), interval = "confidence" )
##        fit      lwr      upr
## 1 258.8313 251.7806 265.8819
#con tres parqueaderos:
predict(modelo_multi_vivi,list(Area_contruida=100, Estrato = 4, parqueaderos = 3), interval = "confidence" )
##        fit      lwr      upr
## 1 281.4803 269.5918 293.3689
#con cuatro parqueaderos:
predict(modelo_multi_vivi,list(Area_contruida=100, Estrato = 4, parqueaderos = 4), interval = "confidence" )
##        fit      lwr      upr
## 1 304.1294 287.0889 321.1699

De acuerdo con el modelo de precio estimado de apartamentos, no seria una buena oferta, ya que la predicción con diferentes cantidades de parqueaderos nos da un precio inferior a 450 millones.

f. Con las predicciones del modelo sugiera potenciales ofertas para una persona interesada en un apartamento en la zona norte con mas de 100 mt2 de área, de estrato 4, que tenga parqueadero y tenga encuenta que la persona tiene un crédito preaprobado de máximo 400 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.

Aptos = which ( viviendas_filt$Area_contruida >100 &  viviendas_filt$Estrato == 4 & viviendas_filt$parqueaderos >=1 & viviendas_filt$precio_millon <= 400 & viviendas_filt$precio_millon >=  236.1822)

#datos filtrados:
viviendas_filt2 = viviendas_filt[Aptos,]

min(viviendas_filt2$precio_millon)
## [1] 240
max(viviendas_filt2$Area_contruida)
## [1] 287
Aptos1 = which((viviendas_filt2$precio_millon == 240 | viviendas_filt2$Area_contruida == 287 | viviendas_filt2$Habitaciones ==4 | viviendas_filt2$Banos ==3) & (viviendas_filt2$Barrio =="la flora" | viviendas_filt2$Barrio == "versalles") )

viviendas_Filt5 = viviendas_filt2[Aptos1,]

head(viviendas_Filt5,n = c(7,7))
##           Zona piso Estrato precio_millon Area_contruida parqueaderos Banos
## 418 Zona Norte    4       4           380            123            1     3
## 755 Zona Norte   NA       4           265            125            2     3
## 788 Zona Norte    2       4           380            126            2     3
## 800 Zona Norte    6       4           270            152            1     3
## 844 Zona Norte    2       4           240            103            1     2
## 893 Zona Norte   NA       4           270            111            1     3
## 921 Zona Norte    7       4           300            126            2     4
require(leaflet)

leaflet() %>% addCircleMarkers(lng= viviendas_Filt5$cordenada_longitud, lat=viviendas_Filt5$Cordenada_latitud,radius = 8, color = "red")  %>% addTiles()