Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz (datos_vivienda.xls - descarga) realizar los siguientes puntos:
## [1] "Area_contruida" "precio_millon"
## Area_contruida
## 80 85 86 87 89 96 98 118
## 3.846154 7.692308 19.230769 7.692308 3.846154 7.692308 3.846154 3.846154
## 118.42 130 134 170 181 195
## 3.846154 15.384615 3.846154 11.538462 3.846154 3.846154
## # A tibble: 6 × 2
## Area_contruida precio_millon
## <dbl> <dbl>
## 1 86 250
## 2 118 385
## 3 130 395
## 4 181 419
## 5 86 240
## 6 98 320
Tabla de indicadores
## promedio_costo mediana_costo minimo_costo maximo_costo desviacion_std
## 1 332.0769 305 240 480 82.14423
## coeficiente_varia
## 1 24.73651
## promedio_area mediana_area minimo_area maximo_area desviacion_area
## 1 115.7469 97 80 195 35.54332
## coeficiente_var
## 1 30.70779
h1 = ggplot(datos_vivienda, aes(precio_millon,Area_contruida)) + geom_point(height = 2, width = 2,color="tomato2")
ggplotly(h1)
boxplot(precio_millon~Area_contruida, fill=precio_millon) + theme_bw()
## NULL
par(mfrow=c(1,2))
boxplot(precio_millon,col = 'coral1',main="Precio",ylab='Millones')
boxplot(Area_contruida,col = 'coral2',main="Area Construida",ylab='Metros^2')
A través del análisis exploratorio se permite identificar las características de las variables más relevantes del proceso a través de indicadores y gráficas de visualización. Para este proceso se puede evidenciar que para el costo promedio de las viviendas de la base de datos es de 332 Millones, el mínimo del precio es 240 millones, el máximo del precio es 480 millones, la desviación estándar es de 82 Millones y el coeficiente de variación corresponde a un 24%.
Por otro lado, al visualizar los resultados del área construida podemos ver reflejado que el promedio de área construida es de 115 m^2, en donde se podrán encontrar construcción como mínimo de construcción de 80 m^2 y como máximo de 195 m^2.Los diagramas de cajas y bigotes nos permiten evidenciar para las dos variables el comportamiento y su variabilidad.
# Coeficiente de correlación
cor(x = Area_contruida,y = precio_millon)
## [1] 0.9190295
# Modelo de regresión
mod=lm(precio_millon ~ Area_contruida, data = datos_vivienda) # lm([variable objetivo] ~ [variables predictoras], data = [fuente de datos])
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
La tabla de coeficientes \(b0\) y \(b1\) en el modelo estadístico se pueden evidenciar los resultados de acuerdo con el modelo de regresión lineal, donde:
# El intervalo de confianza del 95% para el coeficiente b1 de define como b1 +/- 2*SE(b1), donde:
## Limite Inferior
Limite_inferior_b1 = 2.124-2*0.186
## Limite Superior
Limite_superior_b1 = 2.124+2*0.186
## Donde obtendriamos
intervalo_confi = data.frame(Limite_inferior_b1,Limite_superior_b1)
intervalo_confi
## Limite_inferior_b1 Limite_superior_b1
## 1 1.752 2.496
# Para obtener el límite de confianza del 95% podemos escribir:
confint(mod)
## 2.5 % 97.5 %
## (Intercept) 39.83983 132.627917
## Area_contruida 1.74017 2.507771
#Prueba Hipotesis, rechazar Ho si Alfa >= valor p
0.05>=3.45e-11
## [1] TRUE
El error estándar mide la variabilidad/exactitud de los coeficientes beta del modelo, para ello se identifica el intervalo de confianza en el cual hay un 95% de probabilidades de que el intervalo [1.752, 2.496] contenga el valor real de b1.Por otro lado, para la variable de respuesta (y=precio) la estadística t y su p-value prueba si existe o no una relación estadísticamente significativa.
Las hipótesis estadísticas son las siguientes:
Tanto los valores p del intercepto como la variable de respuesta predictora son muy significativos, por lo que podemos rechazar la hipótesis nula y aceptar la hipótesis alternativa, esto significa que hay una asociación significativa entre el predictor y las variables resultado.
summary(mod)$r.squared
## [1] 0.8446152
# precio = bo + b1*area
precio = 86.234 + 2.124*110
precio
## [1] 319.874
¿Cual seria 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?
par(mfrow=c(2,2))
plot(mod)
Para realizar la validación de supuestos, este se realiza mediante la validación de análisis gráficos, donde:
model_1=lm(precio_millon ~ log10(Area_contruida), data = datos_vivienda) # lm([variable objetivo] ~ [variables predictoras], data = [fuente de datos])
summary(model_1)
##
## Call:
## lm(formula = precio_millon ~ log10(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 ***
## log10(Area_contruida) 626.03 43.47 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(model_1)
model_2 <- lm(precio_millon~Area_contruida + I(Area_contruida^2), data = datos_vivienda)
summary(model_2)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida + I(Area_contruida^2),
## data = datos_vivienda)
##
## 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
par(mfrow=c(2,2))
plot(model_2)
ggplot(data=datos_vivienda , aes(x=Area_contruida,y=precio_millon))+ geom_point(height = 2, width = 2,color="tomato2") + stat_smooth(method = lm) +
stat_smooth(method="lm", formula= y~x + I(x^2), color = "chocolate3", show.legend = ) +
stat_smooth(method="lm", formula= y~log(x), color = "green4")
A partir de la gráfica de residuales vs los valores ajustados se evidencia que no se cumple uno de los supuestos como la aleatoriedad de los errores, para ello se procede a generar la transformación necesaria para poder cumplir estos supuestos. Para ello se utilizaron dos tipos de transformación el primero de ellos es:
De acuerdo con lo evidenciado a través de las dos transformaciones es importante tener el contexto de los datos, ya que tomar una decisión apresurada a algunas de las posibilidades de transformación puede generar más sesgos y errores que el mejoramiento del modelo cuando hablamos de la regresión simple. Pero para casos específicos como el que se trató en esta sección, genera un buen análisis frente al entorno en el cual se ubican estos datos. Las trasformaciones generan buenos modelos cuando se trata de formar la búsqueda de las expresiones que permita predecir los valores de una variables a través del conocimiento de los valores de otras.