Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz para apartamento de estrato 4 con área construida menor a 200 m2 (vivienda4.RDS) la inmobiliaria A&C requiere el apoyo de un cientifico de datos en la construcción de un modelo que lo oriente sobre los precios de inmuebles.
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.
vivienda4$tipo=str_to_upper(vivienda4$tipo)
Data = subset(vivienda4, vivienda4$estrato == 4 & vivienda4$areaconst < 200 & vivienda4$tipo == "APARTAMENTO")
AnalisisPrecioVivienda = vivienda4$preciom
AnalisisAreaVivienda = vivienda4$areaconst
AnalisisExploratorio <- function(variable,variableAnalizada){
print(paste("----- ANALISIS EXPLORATORIO DE ",variableAnalizada," -----"))
print(paste("media: ",mean(variable)))
print(paste("mediana: ",median(variable)))
print(paste("Valor Maximo: ",max(variable)))
print(paste("Valor Minimo: ", min(variable)))
print(paste("Varianza: ", var(variable)))
print("Cuartiles de 25%, 50% y 70%")
print(quantile(variable, 0.25))
print(quantile(variable, 0.50))
print(quantile(variable, 0.70))
print(paste("Desviacion estandar: ",sd(variable)))
testNormalidad = shapiro.test(variable)
print(testNormalidad)
hist(variable, xlab = variableAnalizada, main = "HISTOGRAMA")
boxplot(variable,horizontal= FALSE,xlab = paste("Diagrama de cajas de: ",variableAnalizada), main = "Cajas" )
}
AnalisisExploratorio(variable = AnalisisAreaVivienda,variableAnalizada = "AREA DE VIVIENDAS")
## [1] "----- ANALISIS EXPLORATORIO DE AREA DE VIVIENDAS -----"
## [1] "media: 87.6295427901524"
## [1] "mediana: 75"
## [1] "Valor Maximo: 200"
## [1] "Valor Minimo: 40"
## [1] "Varianza: 1321.0685460665"
## [1] "Cuartiles de 25%, 50% y 70%"
## 25%
## 60
## 50%
## 75
## 70%
## 90
## [1] "Desviacion estandar: 36.3465066556127"
##
## Shapiro-Wilk normality test
##
## data: variable
## W = 0.8168, p-value < 2.2e-16
AnalisisExploratorio(variable = AnalisisPrecioVivienda,variableAnalizada = "PRECIO DE VIVIENDAS")
## [1] "----- ANALISIS EXPLORATORIO DE PRECIO DE VIVIENDAS -----"
## [1] "media: 225.374560375147"
## [1] "mediana: 210"
## [1] "Valor Maximo: 760"
## [1] "Valor Minimo: 78"
## [1] "Varianza: 7376.27428499723"
## [1] "Cuartiles de 25%, 50% y 70%"
## 25%
## 160
## 50%
## 210
## 70%
## 250
## [1] "Desviacion estandar: 85.8852390402288"
##
## Shapiro-Wilk normality test
##
## data: variable
## W = 0.8896, p-value < 2.2e-16
PRECIO VIVIENDA: De acuerdo al analisis realizado se puede concluir que distribucion sesgada hacia la derecha ya que su media es muy superior a su mediana y segun sus cuartiles el 70% de los apartamentos se encuentran por debajo de de 250 millones, el 50% de las casas estan por debajo de 210 millones y el 25% por debajo de 160 millones. Tambien se puede concluir que su distribucion no es normal de acuerdo con el histograma.
AREA VIVIENDA: De acuerdo al analisis realizado tambien se observa que tiene una sesgadez hacia la derecha debido a que su media es mas grande que la mediana, el 70% de las casas tienen menos de 90 metros cuadrados, el 50% menos de 75 metros cuadrados y el 25% menos de 60 metros cuadrados.
Realice un análisis exploratorio bivariado de datos, enfocado en la relación entre la variable respuesta (precio) en función de la variable predictora (area construida) - incluir gráficos e indicadores apropiados interpretados.
plot(AnalisisPrecioVivienda,AnalisisAreaVivienda,xlab = "Precios de viviendas", ylab = "Area de vivienda")
abline(lm(AnalisisAreaVivienda ~ AnalisisPrecioVivienda), col = "red")
Correlacion = cor(AnalisisPrecioVivienda,AnalisisAreaVivienda)
print(paste("Corelacion: ",Correlacion))
## [1] "Corelacion: 0.763016627167914"
analisisRegresionLineal = lm(AnalisisPrecioVivienda~AnalisisAreaVivienda)
summary(analisisRegresionLineal)
##
## Call:
## lm(formula = AnalisisPrecioVivienda ~ AnalisisAreaVivienda)
##
## Residuals:
## Min 1Q Median 3Q Max
## -195.86 -31.95 -8.95 27.87 431.17
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 67.381 3.510 19.20 <2e-16 ***
## AnalisisAreaVivienda 1.803 0.037 48.73 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 55.53 on 1704 degrees of freedom
## Multiple R-squared: 0.5822, Adjusted R-squared: 0.5819
## F-statistic: 2374 on 1 and 1704 DF, p-value: < 2.2e-16
Luego de realizar los calculos, se puede observar que la correlacion es fuerte ya que su resultado fue 0.76, esto es un valor muy cercano a 1 y por lo tanto nos confirma que hay una fuerte relacion entre el area de las viviendas y el precio, tambien se observa que la distribucion de los residuos es asimetrica ya que la mediana no esta cerca del punto medio entre el minimo y el maximo. Se puede ver que la variable precio depende en un 58% de la variable area
Estime el modelo de regresión lineal simple entre precio=f(area)+ε. Interprete los coeficientes del modelo β0, β1 en caso de ser correcto.
modeloLineal = lm(AnalisisPrecioVivienda ~ AnalisisAreaVivienda, data = Data)
modeloLineal
##
## Call:
## lm(formula = AnalisisPrecioVivienda ~ AnalisisAreaVivienda, data = Data)
##
## Coefficients:
## (Intercept) AnalisisAreaVivienda
## 67.381 1.803
B1 es el area el cual es la variable independiente y B0 es el intercepto o el precio el cual depende del area directamente, como se menciono anteriormente el precio tiene una dependencia de 58% respecto al area, tambien es correcto decir que por cada punto de area que aumente, el precio aumentara aproximadamente 2 puntos.
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 hipótesis t.
Intervalo_Confianza = confint(object = modeloLineal, level = 0.95)
Intervalo_Confianza
## 2.5 % 97.5 %
## (Intercept) 60.496208 74.265055
## AnalisisAreaVivienda 1.730404 1.875547
Este intervalo nos muestra donde puede estar ubicado el valor real tanto para el intercepto como para el valor del area, no nos da un valor exacto pero si un rango de confianza muy certero y se puede tener seguridad de que en el intercepto el valor se encuentre entre 60.4 y 74.2 y en area se encuentra entre 1.73 y 1.87.
Calcule e interprete el indicador de bondad R2.
summary(modeloLineal)
##
## Call:
## lm(formula = AnalisisPrecioVivienda ~ AnalisisAreaVivienda, data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -195.86 -31.95 -8.95 27.87 431.17
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 67.381 3.510 19.20 <2e-16 ***
## AnalisisAreaVivienda 1.803 0.037 48.73 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 55.53 on 1704 degrees of freedom
## Multiple R-squared: 0.5822, Adjusted R-squared: 0.5819
## F-statistic: 2374 on 1 and 1704 DF, p-value: < 2.2e-16
el R Cuadrado nos indica que el valor de la variable dependiente (precio)es de 58% dependiente del area
¿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 atractiva esta oferta? ¿Qué consideraciones adicionales se deben tener?.
predict(modeloLineal, data.frame(AnalisisAreaVivienda = 110), interval = "confidence", level = 0.95)
## fit lwr upr
## 1 265.7079 262.6113 268.8046
summary(modeloLineal$residuals)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -195.857 -31.953 -8.946 0.000 27.875 431.169
Despues de validar los resultados obtenidos podemos consluir que si es viable la oferta ya que los precios ocilan entre los 150 millones a 374 millones para el area 110 m2, esto sin tener en cuenta otros factores que pueden influir como la zona
Realice la validación de los supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos. Utilice las pruebas de hipótesis para la validación de supuestos y compare los resultados con lo observado en los gráficos asociados.
hist(modeloLineal$residuals)
par(mfrow=c(2,2))
plot(modeloLineal)
shapiro.test(modeloLineal$residuals)
##
## Shapiro-Wilk normality test
##
## data: modeloLineal$residuals
## W = 0.92671, p-value < 2.2e-16
bptest(modeloLineal)
##
## studentized Breusch-Pagan test
##
## data: modeloLineal
## BP = 152.8, df = 1, p-value < 2.2e-16
Se puede observar que de acuerdo al tamaño de BP el cual es grande, que este no es homocedastico y tambien dado que su p-value es muy pequeño, se rechaza su hipotesis nula. Para cumplir con esto es necesario cambiar de modelo o mejorar el ya existente. Tambien se observa que la distribucion de sus residuos no es normal.
De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
ModeloAdaptado = lm(log(AnalisisPrecioVivienda) ~ log(AnalisisAreaVivienda), data = Data)
ModeloAdaptado
##
## Call:
## lm(formula = log(AnalisisPrecioVivienda) ~ log(AnalisisAreaVivienda),
## data = Data)
##
## Coefficients:
## (Intercept) log(AnalisisAreaVivienda)
## 1.9189 0.7802
bptest(ModeloAdaptado)
##
## studentized Breusch-Pagan test
##
## data: ModeloAdaptado
## BP = 65.105, df = 1, p-value = 7.101e-16
Se observa mejoria con el nuevo modelo, sin embargo, aun su p-value es muy pequeño por lo tanto se rechaza la hipotesis nula y no cumple con la homocedasticidad esto tambien nos indica que la varianza de los errores no es constante, al igual que tener un BP alto es un indicio de esto, por tal razon aun se debe de mejorar mas el modelo o definitivamente realizar el cambio de modelo por otro que se adapte mejor.
De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.
modeloLineal
##
## Call:
## lm(formula = AnalisisPrecioVivienda ~ AnalisisAreaVivienda, data = Data)
##
## Coefficients:
## (Intercept) AnalisisAreaVivienda
## 67.381 1.803
bptest(modeloLineal)
##
## studentized Breusch-Pagan test
##
## data: modeloLineal
## BP = 152.8, df = 1, p-value < 2.2e-16
ModeloAdaptado
##
## Call:
## lm(formula = log(AnalisisPrecioVivienda) ~ log(AnalisisAreaVivienda),
## data = Data)
##
## Coefficients:
## (Intercept) log(AnalisisAreaVivienda)
## 1.9189 0.7802
bptest(ModeloAdaptado)
##
## studentized Breusch-Pagan test
##
## data: ModeloAdaptado
## BP = 65.105, df = 1, p-value = 7.101e-16
Se observa gran mejoria en el segundo modelo despues de realizarce la transformacion sin embargo, en ninguno de los dos modelos se cumple el principio de homocedasticidades decir, es necesario adaptarse mas o cambiar de modelo, dado que sus BP aun son valores muy grandes y su p-value en ambos modelos son demasiado pequeños, dando indicio de lo anterior mencionado y asi mismo demostrando su rechazo a la hipotesis nula
Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?
modelo1=lm(AnalisisPrecioVivienda ~ AnalisisAreaVivienda, data=Data)
modelo2=lm(AnalisisPrecioVivienda ~ log(AnalisisAreaVivienda), data=Data)
modelo3=lm(log(AnalisisPrecioVivienda) ~ AnalisisAreaVivienda, data=Data)
modelo4=lm(log(AnalisisPrecioVivienda) ~ log(AnalisisAreaVivienda), data=Data)
dwtest(modelo1)
##
## Durbin-Watson test
##
## data: modelo1
## DW = 1.6713, p-value = 5.124e-12
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(modelo2)
##
## Durbin-Watson test
##
## data: modelo2
## DW = 1.6908, p-value = 7.831e-11
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(modelo3)
##
## Durbin-Watson test
##
## data: modelo3
## DW = 1.5006, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(modelo4)
##
## Durbin-Watson test
##
## data: modelo4
## DW = 1.5104, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
stargazer(modelo1, modelo2, modelo3, modelo4, type="text", df=FALSE)
##
## ================================================================================
## Dependent variable:
## ------------------------------------------------------
## AnalisisPrecioVivienda log(AnalisisPrecioVivienda)
## (1) (2) (3) (4)
## --------------------------------------------------------------------------------
## AnalisisAreaVivienda 1.803*** 0.007***
## (0.037) (0.0002)
##
## log(AnalisisAreaVivienda) 189.708*** 0.780***
## (3.641) (0.014)
##
## Constant 67.381*** -610.083*** 4.724*** 1.919***
## (3.510) (16.085) (0.014) (0.063)
##
## --------------------------------------------------------------------------------
## Observations 1,706 1,706 1,706 1,706
## R2 0.582 0.614 0.571 0.639
## Adjusted R2 0.582 0.614 0.571 0.638
## Residual Std. Error 55.531 53.347 0.227 0.208
## F Statistic 2,374.452*** 2,715.248*** 2,267.022*** 3,012.086***
## ================================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Se observa que el mejor modelo o el que mejor se adapta es el modelo 4, ya que su R2 y el ajuste de R2 es mayor al de los demas modelos, tambien cabe resaltar que su residual o el error es minimo en comparacion con los otros modelos y su F Statistic es el mas elevado y su autocorrelacion es positiva.
Por tal razon aunque no es el modelo mas optimo ya que posiblemente se puede mejorar mas, o probablemente haya un modelo distinto que se adapte mejor, en este caso, el modelo 4 seria la mejor opcion.