1. Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y area de la vivienda (metros cuadrados) - incluir graficos e indicadores apropiados interpretados.
summary(datos_vivienda)
## Area_contruida precio_millon
## Min. : 80.0 Min. :240.0
## 1st Qu.: 86.0 1st Qu.:251.2
## Median : 97.0 Median :305.0
## Mean :115.7 Mean :332.1
## 3rd Qu.:130.0 3rd Qu.:395.0
## Max. :195.0 Max. :480.0
Precio_promedio=mean(precio_millon,na.rm = TRUE)
Desviacion_precio=sd(precio_millon,na.rm = TRUE)
Mediana_precio=median(precio_millon,na.rm = TRUE)
Area_promedio=mean(Area_contruida,na.rm = TRUE)
Desviacion_Area=sd(Area_contruida,na.rm = TRUE)
Mediana_Area=median(Area_contruida,na.rm = TRUE)
Resultado=data.frame(Precio_promedio,Desviacion_precio,Mediana_precio,Area_promedio,Desviacion_Area,Mediana_Area)
Resultado
| Precio_promedio | Desviacion_precio | Mediana_precio | Area_promedio | Desviacion_Area | Mediana_Area |
|---|---|---|---|---|---|
| 332.0769 | 82.14423 | 305 | 115.7469 | 35.54332 | 97 |
require(ggplot2)
require(ggpubr)
#Histograma para precios
par(mfrow=c(2,2))
hist(precio_millon)
abline(v=Precio_promedio, col="blue", lwd=3)
boxplot(precio_millon,xlab="Millones", main="Boxplot Precios",horizontal = TRUE)
#Histograma para Areas
hist(Area_contruida)
abline(v=Area_promedio, col="blue", lwd=3)
boxplot(Area_contruida,xlab="Metros Cuadarados", main="Boxplot Area",horizontal = TRUE)
En en analisis exploratorio inicial se encuentra que para la variable precio los datos en Millones se encuentran en el rango de [240-480], con promedio de 332 y mediana 305, desviacion estandar 82,
Para la variable Area Construida se tienen en metros cuadrados un rango de [80-195], promedio 115, mediana 97 y desviacion estandar de 35. Mediante el histograma y grafico de caja se evidencia un alto porcentaje de los datos entre 80 y 100 m2
2. Realice un análisis exploratorio bivariado de datos enfocado en la relación entre la variable respuesta (y=precio) en función de la variable predictora (x=area) - incluir graficos e indicadores apropiados interpretados
#Para la exploración bivariada
require(ggplot2)
require(plotly)
Grafico1=ggplot(data=datos_vivienda,aes(y=precio_millon,x=Area_contruida))+geom_point()+geom_smooth()
ggplotly(Grafico1)
correlacion = cor(Area_contruida,precio_millon, use= "complete.obs")
correlacion
## [1] 0.9190295
De acuerdo a los graficos se observa que existe una relacion directamente proporcional entre el Area construida y el precio de la vivienda, esta correlación es del 91,9%
3. Estime el modelo de regresión lineal simple entre precio = f(area) +e. Interprete los coeficientes del modelo β0, β1 en caso de ser correcto.
modelo = lm(precio_millon~Area_contruida)
summary(modelo)
##
## 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
Beta0=modelo$coefficients[1]
Beta1=modelo$coefficients[2]
data.frame(Beta0,Beta1)
| Beta0 | Beta1 | |
|---|---|---|
| (Intercept) | 86.23387 | 2.12397 |
El modelo de regresion lineal simple encontrado tiene los siguientes parametros: Beta0 = 86,234 Beta1 = 2,124 Esto indica que si el area construida fuera cero el precio estaria en los 86,2 millones y para cada metro cuadrado construido el precio incrementa en 2,1 millones. en nuestro caso no se presentan valores de area igual a cero. Segun el valor R2 se concluye que el modelo explica el 84,4% de la relacion entre el area construida y el precio en millones
4. 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 hipotesis t.
error_area=0.186
Li=Beta1-(qnorm(0.975)*error_area)
Ls=Beta1+(qnorm(0.975)*error_area)
data.frame(Li,Ls)
| Li | Ls | |
|---|---|---|
| Area_contruida | 1.759417 | 2.488524 |
#confint(modelo, "Area_contruida", level = 0.95)
se encuentra que el Valor P para Beta 1 es de 3.45e-11 *** monstrando un nivel de significancia para el modelo El intervalo de confianza calculado para Beta1 muestra que el efecto que tiene el area sobre el precio se encuentra entre 1,76 y 2,49 Millones lo cual muestra nuevamente que el coeficiente es diferente de cero
5. Calcule e interprete el indicador de bondad y ajuste R2
R2=correlacion*correlacion
R2
## [1] 0.8446152
el valor de R2 indica que el modelo explica el 84,5% del precio del inmueble
6. 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 seria una buena oferta? Que consideraciones adicionales se deben tener?.
predict(modelo, list(Area_contruida=110), interval = "confidence")
## fit lwr upr
## 1 319.8706 306.3133 333.4279
el resultado de la prediccion utilizando el modelo muestra que para un Area de 110 m2 el precio seria 319,9 millones, estando en un intervalo entre 306 y 333. En caso de encontrar una oferta por 200 millones para esta area, se puede considerar una excelente oferta pues el valor minimo que nos muestra el modelo es de 306 Para nuestro caso de analisis no tenemos mas criterios para considerar, en otro caso se deberian incluir otras variables adicionales que expliquen esta oferta muy por debajo del precio esperado
7. Realice la validación de supuestos del modelo por medio de graficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos.
par(mfrow=c(2,2))
plot(modelo)
Analizando las gráficas generadas se observa respecto a los supuestos
Homogeneidad de varianza: los residuales ajustados contra los errores no tienen un comportamiento aleatorio, por lo cual el se asumio una relacion lineal de forma erronea.
Normalidad:Se observan varios datos alejados de la curva de distribución normal
para mejorar el modelo si es necesario realizar una transformación
#Validación Cruzada
precio_predict=array(NA,26)
for(i in 1:26){
datos_training=datos_vivienda[-i,]
datos_test=datos_vivienda[i,]
modelo_predict=lm(precio_millon~Area_contruida,data=datos_training)
precio_predict[i]=predict(modelo_predict,list(Area_contruida=datos_test$Area_contruida))
}
Resultado_predict=data.frame(datos_vivienda,precio_predict)
Resultado_predict
| Area_contruida | precio_millon | precio_predict |
|---|---|---|
| 86.00 | 250 | 270.2409 |
| 118.00 | 385 | 334.9285 |
| 130.00 | 395 | 360.8154 |
| 181.00 | 419 | 481.5030 |
| 86.00 | 240 | 270.9531 |
| 98.00 | 320 | 293.0791 |
| 170.00 | 480 | 442.3523 |
| 96.00 | 268 | 291.3199 |
| 85.00 | 240 | 268.7368 |
| 170.00 | 450 | 446.9008 |
| 87.00 | 240 | 273.1625 |
| 118.42 | 385 | 335.8531 |
| 86.00 | 290 | 267.3924 |
| 85.00 | 240 | 268.7368 |
| 96.00 | 272 | 291.1058 |
| 86.00 | 250 | 270.2409 |
| 86.00 | 250 | 270.2409 |
| 130.00 | 395 | 360.8154 |
| 134.00 | 385 | 370.1165 |
| 80.00 | 255 | 256.2502 |
| 130.00 | 430 | 359.1702 |
| 87.00 | 260 | 271.7807 |
| 130.00 | 385 | 361.2854 |
| 89.00 | 290 | 274.3083 |
| 195.00 | 450 | 516.0947 |
| 170.00 | 410 | 452.9656 |
MAE=mean(abs(Resultado_predict$precio_millon-Resultado_predict$precio_predict))
MAE
## [1] 30.47363
MAE/mean(Resultado_predict$precio_millon)*100
## [1] 9.176678
El modelo se equivoca en el 9,2% del valor del precio obtenido
8. De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
se prueba un ajuste del modelo utilizando una transformación logaritmica
modelo_ajustado = lm(precio_millon~log(Area_contruida), data=datos_vivienda)
summary(modelo_ajustado)
##
## Call:
## lm(formula = precio_millon ~ log(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 ***
## log(Area_contruida) 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(modelo_ajustado)
9. De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.
correlacion2 = cor(log(Area_contruida),precio_millon, use= "complete.obs")
R2_ajustado=correlacion2*correlacion2
data.frame(R2,R2_ajustado)
| R2 | R2_ajustado |
|---|---|
| 0.8446152 | 0.8962713 |
con el ajuste realizado se obtuvo una mejora en el valor Rcuadrado lo cual representa una mayor explicabilidad de las variaciones del precio de las viviendas pasando de un 84% a un 89%