require(ggplot2)
## Loading required package: ggplot2
require(ggpubr)
## Loading required package: ggpubr
library(readxl)
datosv <- read_excel("datos_vivienda.xlsx", sheet = "Sheet1")
par(mfrow=c(1,2))
hist(datosv$Area_construida)
hist(datosv$precio_millon)
Cuando se observa los histogramas de las variables área construida, se puede observar que gran parte de los inmuebles tienen un área de entre 80 y 100 metros cuadrados construidos. Por otra parte, existen muy pocos inmuebles en los datos cuya área construida supere los 140 metros cuadrados.
Esto también se refleja de la misma forma en los precios. Los inmuebles que mayor
ggplot(datosv,aes(x=Area_construida,y=precio_millon))+geom_point()+theme_bw()+geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
cor(datosv$Area_construida,datosv$precio_millon, method = "pearson")
## [1] 0.9190295
Al calcular el coeficiente de relación entre el área construida y el precio en millones en de un inmueble, encontramos que existe una relación positiva fuerte. Esto quiere decir que a mayor área construida, se espera que el precio del inmueble aumente.
También podemos observar esta relación con el gráfico de dispersión, en donde a medida que la variable del eje X (Área Construida) crece, así lo hace la variable dependiente de esta en el eje Y (Precio en millones)
mdl=lm(datosv$precio_millon~datosv$Area_construida, data = datosv)
summary(mdl)
##
## Call:
## lm(formula = datosv$precio_millon ~ datosv$Area_construida, data = datosv)
##
## 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 ***
## datosv$Area_construida 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
Al estimar el modelo de regresión simple, se obtiene que los coeficientes β0 y β1 son 86.234 y 2.124 respectivamente. Esto quiere decir que cuando una propiedad tiene área construida igual a 0, se espera que su precio en millones sea de 86.234 y que por cada metro más de área construida, su precio se incrementa en 2.124 millones.
Así mismo, el nivel de significancia nos indica que la relación entre estas dos variables es estrecha.
El indicador de R2 estimado para el modelo es de 0.8446, es decir, que este modelo puede explicar el 84.46% de los precios del conjunto de datos.
predict(mdl, newdata = list(Area_construida=110.0))
## 1 2 3 4 5 6 7 8
## 268.8953 336.8624 362.3500 470.6725 268.8953 294.3830 447.3089 290.1350
## 9 10 11 12 13 14 15 16
## 266.7714 447.3089 271.0193 337.7545 268.8953 266.7714 290.1350 268.8953
## 17 18 19 20 21 22 23 24
## 268.8953 362.3500 370.8459 256.1515 362.3500 271.0193 362.3500 275.2672
## 25 26
## 500.4081 447.3089
par(mfrow=c(2,2))
plot(mdl)
Los residuales presentan comportamiento, y no hay completa aleatoriedad.
Por ende, no podemos afirmar que la relación entre área
construida y precio en millones sea lineal
Así mismo, en el gráfico Q-Q normal, se puede ver que el comportamiento no se aproxima mucho a la curva, lo que refuerza la hipótesis de que esta relación no es lineal.
Por lo tanto, debemos realizar una transformación adecuada para poder estimar un mejor modelo, se sugiere usar una transformación con Log en la variable independiente, puesto que el comportamiento de la curva para los datos en el análisis exploratorio se asemeja a una función logarítmica.
mdl_ajustado=lm(datosv$precio_millon~log(datosv$Area_construida), data = datosv)
summary(mdl_ajustado)
##
## Call:
## lm(formula = datosv$precio_millon ~ log(datosv$Area_construida),
## data = datosv)
##
## 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(datosv$Area_construida) 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
par(mfrow=c(2,2))
plot(mdl_ajustado)
Al revisar el modelo, se puede ver que su ajuste es del 89.63%, lo cual
indica que es una mejor estimación que el primer modelo que se estimó.
También se validan supuestos. Se plantea la predicción.
predict(mdl_ajustado, newdata = list(Area_construida=110.0), interval = "confidence", level=0.95)
## fit lwr upr
## 1 262.5181 247.7250 277.3112
## 2 348.5238 337.3432 359.7045
## 3 374.8554 362.3238 387.3869
## 4 464.8374 442.8944 486.7804
## 5 262.5181 247.7250 277.3112
## 6 298.0311 286.0620 310.0002
## 7 447.7909 427.9292 467.6527
## 8 292.4251 280.1066 304.7436
## 9 259.3382 244.2341 274.4422
## 10 447.7909 427.9292 467.6527
## 11 265.6612 251.1679 280.1546
## 12 349.4898 338.2792 360.7005
## 13 262.5181 247.7250 277.3112
## 14 259.3382 244.2341 274.4422
## 15 292.4251 280.1066 304.7436
## 16 262.5181 247.7250 277.3112
## 17 262.5181 247.7250 277.3112
## 18 374.8554 362.3238 387.3869
## 19 383.0948 369.9451 396.2445
## 20 242.8556 226.0339 259.6772
## 21 374.8554 362.3238 387.3869
## 22 265.6612 251.1679 280.1546
## 23 374.8554 362.3238 387.3869
## 24 271.8406 257.9129 285.7683
## 25 485.0932 460.5901 509.5962
## 26 447.7909 427.9292 467.6527