En esta actividad se trabajará con la base de datos de ofertas de vivienda provenientes del portal de Fincaraiz.Para este caso estaríamos interesados en determinar la existencia de algún tipo de relación entre el precio de la vivienda y su área construida.
La hipótesis inicial consiste en: A mayor área construida se espera que el precio de la vivienda aumente. Es decir, una relación directa y positiva.
Se cuenta con dos variables, un total de 26 registros y no se encuentran valores faltantes. Para iniciar se procede con la carga de los mismos:
library(readxl)
datos_vivienda1 <- read_excel("C:/Users/ACER/Desktop/datos_vivienda1.xlsx")
View(datos_vivienda1)
Debido a que ambas variables toman diferentes valores no considero pertinente una representación gráfica con conteos de fecuencias por lo que las dividiré por medio de intervalos según la regla de Sturges.
VARIABLE: ÁREA CONSTRUIDA
attach(datos_vivienda1)
muestraord <- sort(Area_contruida)
muestraord
## [1] 80.00 85.00 85.00 86.00 86.00 86.00 86.00 86.00 87.00 87.00
## [11] 89.00 96.00 96.00 98.00 118.00 118.42 130.00 130.00 130.00 130.00
## [21] 134.00 170.00 170.00 170.00 181.00 195.00
n <- length(Area_contruida)
n
## [1] 26
max(Area_contruida)
## [1] 195
min(Area_contruida)
## [1] 80
rango <- range(Area_contruida)
rango
## [1] 80 195
amplitud <- diff(rango)
amplitud
## [1] 115
nointervalos <- 5
rangointervalos <- amplitud / nointervalos
rangointervalos
## [1] 23
tabla.intervalos <- transform(table(cut(Area_contruida, breaks = 5)))
tabla.intervalos
## Var1 Freq
## 1 (79.9,103] 14
## 2 (103,126] 2
## 3 (126,149] 5
## 4 (149,172] 3
## 5 (172,195] 2
plot(tabla.intervalos, main = "Área Construída")
En el gráfico podemos observar que la mayor cantidad de viviendas de la base de datos tienen un área mayor a los 79.9 y menor a 103 metros cuadrados, esto representa aproximadamente el 54%.
hist(Area_contruida, col="green",main="Histograma por área construida")
VARIABLE: “PRECIO MILLÓN”
muestraord2 <- sort(precio_millon)
muestraord2
## [1] 240 240 240 240 250 250 250 255 260 268 272 290 290 320 385 385 385 385 395
## [20] 395 410 419 430 450 450 480
n2 <- length(precio_millon)
n2
## [1] 26
max(precio_millon)
## [1] 480
min(precio_millon)
## [1] 240
rango2 <- range(precio_millon)
rango2
## [1] 240 480
amplitud2 <- diff(rango2)
amplitud2
## [1] 240
nointervalos2 <- 5
rangointervalos2 <- amplitud2 / nointervalos2
rangointervalos2
## [1] 48
tabla.intervalos2 <- transform(table(cut(precio_millon, breaks = 5)))
tabla.intervalos2
## Var1 Freq
## 1 (240,288] 11
## 2 (288,336] 3
## 3 (336,384] 0
## 4 (384,432] 9
## 5 (432,480] 3
pie(tabla.intervalos2$Freq, labels = paste(tabla.intervalos2$Var1, " - ", tabla.intervalos2$Freq),col=c("orange","blue","green","red","purple"), main = "Precio por millón")
Por medio de la torta se evidencia que los precios más comunes de las viviendas se encuentran entre los 240 y 288 (41%) seguido de aquellos entre los 384 y 432 milloes de pesos (35%).
hist(precio_millon, col="yellow",main="Histograma por precio")
Adicional a los comentarios anteriores, se determina a partir de los histogramas que ninguna de las variables sigue una distribución normal.
plot(Area_contruida,precio_millon,pch=16, col=c("blue"), main = "Diagrama de Dispersión",xlab="Área",ylab="Precio")
El diagrama de dispersión nos ayuda a validar la relación que existe entre las dos variables: se puede observar que la relación es directa pero no del todo lineal. Adicional a esto, calculamos el coeficiente de correlación de Pearson con el fin de cuantificar la intensidad de la asociación.
cor(Area_contruida,precio_millon)
## [1] 0.9190295
El resultado indica una relación positiva fuerte. Es decir que el área construida está muy asociada con el precio, lo cual indica que a mayor área mayor será el valor del predio.
mod=lm(precio_millon~Area_contruida)
summary(mod)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida)
##
## 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
Interpretación de coeficientes:
El coeficiente B0 no tiene caso interpretarlo ya que no tiene sentido pensar en una vivienda con 0 metros cuadrados.
El coeficiente B1 (acompaña al área construida): indica el aumento en el precio (millones de pesos COP) por cada incremento en una unidad (metro cuadrado) de área construida; entonces, si aumenta en un metro cuadrado el área de la vivienda el efecto sobre el precio sería un aumento de $2’124.000.
Entre los resultados arrojados también es posible identificar el valor p el cual nos indica si realmente el coeficiente es sifnificativo, es decir si el área construida realmente está asociado o no de forma significativa con el precio de las viviendas, se determina que sí porque contiene un cero y por el nivel de significancia indicado por los asteriscos.
confint(mod,level=0.95)
## 2.5 % 97.5 %
## (Intercept) 39.83983 132.627917
## Area_contruida 1.74017 2.507771
Lo que permite concluir que con una confianza del 95%. se estima que el verdadero incremento promedio en el precio por millón por cada incremento en un metro cuadrado se encuentra entre 1’740.017 y 2’507.771.Nuestro valor de B1 ofrecido por el modelo lineal se encuentra entre este rango.
tt<-t.test(Area_contruida)
tt
##
## One Sample t-test
##
## data: Area_contruida
## t = 16.605, df = 25, p-value = 5.166e-15
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 101.3907 130.1032
## sample estimates:
## mean of x
## 115.7469
Teniendo en cuenta que B1=2’124.000 y con un intervalo de confianza del 95% se determina que no es igual a cero.
En los resultados del apartado 3 se reflejan estos dos resultados. El coeficiente R2 es una medida de bondad de ajuste que indica qué tanto el modelo explica la variable respuesta. En este caso me indica que este modelo logra explicar un 84% del precio de las viviendas.
predict(mod,newdata = list(Area_contruida=110))
## 1
## 319.8706
Según el modelo de regresión lineal simple el precio promedio estimado para un apartamento de 110 metros cuadrados es de $319’870.600.Entonces un apartamento en la misma zona y área ofertado en $200’000.000 sí sería una buena oferta al estar por debajo del precio estimado con el modelo.
Otras consideraciones adicionales a tener en cuenta podrían consistir en variables que no se están teniendo en cuenta en este estudio como: acabados, número de piso, si cuenta con parqueadero o no, entre otros.
par(mfrow=c(2,2))
plot(mod)
Análisis de gráficos:
Residuales contra valores ajustados: este gráfico debería mostrar aleatoriedad porque los residuales no deberían tener ningún comportamiento. Para este caso si lo hay lo que indica que los residuales tienen información que podría tenerse en cuenta en el modelo. Entonces, la asociaición lineal asumida inicialmente no necesariamente se cumple, se debería tener en cuenta otro tipo de relación.
Gráfico de normalidad: Todos los puntos deberían ser cercanos a la línea de distribución normal pero hay algunos que se alejan.
residuos<-rstandard(mod)
shapiro.test(residuos)$p.value
## [1] 0.417895
Debido a los resultados del punto anterior, al observar que el supuesto de aleatoriedad de los errores no se está cumpliendo, es importante volver a la estimación del modelo y usar otra opción para transformarlo:
mod2=lm(log(precio_millon)~Area_contruida)
summary(mod2)
##
## Call:
## lm(formula = log(precio_millon) ~ Area_contruida)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.16503 -0.09255 -0.02221 0.08600 0.19822
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.048147 0.073371 68.80 < 2e-16 ***
## Area_contruida 0.006288 0.000607 10.36 2.46e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1079 on 24 degrees of freedom
## Multiple R-squared: 0.8172, Adjusted R-squared: 0.8096
## F-statistic: 107.3 on 1 and 24 DF, p-value: 2.456e-10
Supuestos
par(mfrow=c(2,2))
plot(mod2)
residuos2<-rstandard(mod2)
shapiro.test(residuos2)$p.value
## [1] 0.2136462
mod3=lm(precio_millon~Area_contruida+I(Area_contruida^2))
summary(mod3)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida + I(Area_contruida^2))
##
## Residuals:
## Min 1Q Median 3Q Max
## -34.927 -14.471 -3.777 16.504 35.073
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.949e+02 6.648e+01 -4.435 0.00019 ***
## Area_contruida 8.488e+00 1.090e+00 7.787 6.80e-08 ***
## I(Area_contruida^2) -2.433e-02 4.142e-03 -5.874 5.49e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.35 on 23 degrees of freedom
## Multiple R-squared: 0.9378, Adjusted R-squared: 0.9324
## F-statistic: 173.5 on 2 and 23 DF, p-value: 1.332e-14
Supuestos
par(mfrow=c(2,2))
plot(mod3)
residuos3<-rstandard(mod3)
shapiro.test(residuos3)$p.value
## [1] 0.2873846
El modelo lineal Vs. el Modelo con logaritmo no muestra diferencias significativas en cuanto a la comparación de supuestos. Aunque la prueba de Shapiro-Wilk arroja un resultado menor se disminuye el R2 a un 81%.
El modelo lineal Vs. el Modelo polinómico muestra una gran mejora, por lo que a continuación se realiza el análisis de cada aspecto que lo compone: