1. 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.
Área construida La mayor parte de los datos se concentran entre 85 y 130 metros construidos, sin embargo se observa que un 25% de las viviendas entre 175 y 195 llevando a tener una media de 115 metros y un mediana de 97, dada la dispersión hacia el extremo superior observada en el diagrama de cajas e histograma.
Precio de la vivienda Debido a que se espera que el precio de la vivienda este en función del número de metros con los que cuenta la vivienda, se espera que se presente una dispersión similar hacia el extremo superior de los datos, sin embargo, la dispersión es menor a partir de comparar los coeficientes de variación de ambas variables, donde es mayor para el número de metros de la vivienda así como al comparar los diagramas de caja.
knitr::opts_chunk$set(warning = TRUE, message = TRUE)
library(readxl)
require(ggplot2)
## Loading required package: ggplot2
Data_viv= read_excel("~/Maestria/Simulacion estadistica/datos_vivienda.xlsx")
summary(Data_viv)
## 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
coef_var = function(x, na.rm = FALSE) {
sd(x, na.rm=na.rm) / mean(x, na.rm=na.rm)
}
coef_var(x=Data_viv$Area_contruida,na.rm=TRUE)
## [1] 0.3070779
coef_var(x=Data_viv$precio_millon,na.rm=TRUE)
## [1] 0.2473651
p1=ggplot(Data_viv,aes(x=Area_contruida))+geom_histogram()
p1
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p2=ggplot(Data_viv,aes(x=precio_millon))+geom_histogram()
p2
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
boxplot(Data_viv$Area_contruida)
boxplot(Data_viv$precio_millon)
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 gráficos e indicadores apropiados interpretados.
Relación entre las 2 variables A partir del análisis gráfico se observa una relación positiva entre las dos variables de acuerdo a lo esperado, es decir, a mayor número de metros cuadrados de la vivienda se observa un mayor precio. Esto se confirma con el coeficiente de covarianza y de correlación los cuales confirman la relación positiva entre las variables y que esta sea alta de acuerdo al valor arrojado por el coeficiente de correlación de de 0,919.
g1=ggplot(Data_viv,aes(y=precio_millon,x=Area_contruida))+geom_point()+geom_smooth()
g1
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
cor(x=Data_viv$Area_contruida,y=Data_viv$precio_millon)
## [1] 0.9190295
cov(Data_viv$Area_contruida,Data_viv$precio_millon)
## [1] 2683.271
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.
De acuerdo a los datos del modelo se espera que una vivienda tenga un precio base de 86.2 millones correspondiente al \(beta_0\) el cual puede corresponder al valor del lote sobre el cual esta construido la vivienda. Este precio se vera incrementando en COP 2.1 millones por cada metro que tenga la vivienda,de acuerdo al valor de \(beta_1\) arrojado. Es decir, si la vivienda cuenta con 100 metros se deberá multiplicar este valor de 2.1 por los 100 metros y sumarlos al valor base establecido de acuerdo a \(beta_0\). En este caso, la vivienda tendría un precio igual a: \(precio_vivienda=beta_0(86.234)+beta_1(2.124)*metros\) Para el ejemplo de la vivienda de 100 metros el valor predicho equivaldria a 298.6 millones
mod1=lm(precio_millon~ Area_contruida,data=Data_viv)
mod1
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = Data_viv)
##
## Coefficients:
## (Intercept) Area_contruida
## 86.234 2.124
predict(mod1,list(Area_contruida=100))
## 1
## 298.6309
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 hipótesis t.
Se tiene que el intervalo de confianza para β1 se encuentra entre 1,75 y 2,48, los cuales son los valores en los cuales podría encontrarse β1 con un nivel de confianza del 95%. Al analizar se observa que el valor de β1 es diferente de cero,dado que el valor de 0 no se encuentra dentro del intervalo de confianza y el valor p que arroja un valor significativo tal como se observa en el resumen del modelo.
mod1=lm(precio_millon~ Area_contruida,data=Data_viv)
mod1
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = Data_viv)
##
## Coefficients:
## (Intercept) Area_contruida
## 86.234 2.124
summary(mod1)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = Data_viv)
##
## 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
qnorm(0.975)
## [1] 1.959964
li=2.124-(1.96*0.186)
ls=2.124+(1.96*0.186)
data.frame(li,ls)
## li ls
## 1 1.75944 2.48856
5 Calcule e interprete el indicador de bondad y ajuste R2
En el resumen del modelo se observa que el valor de R2 corresponde a 0,83, lo cual significa que el modelo expuesto explica el 84% del precio de las viviendas.
summary(mod1)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = Data_viv)
##
## 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
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?.
El precio estimado sería de $319.87 millones.
De acuerdo al intervalo de confianza, parecería que seria una “buena oferta” pues se encuentra fuera del rango estimado del modelo, específicamente por debajo del rango inferior del valor estimado. Sin embargo, es importante aclarar que el modelo solo esta prediciendo en función de los datos disponibles del área construida, dejando de lado otras posibles variables que pueden influir en el precio como el tipo de pisos, acabados, número de habitaciones, si es apartamento o casa, situación legal entre muchas otras.
Personalmente, el precio me generaría alerta pues al estar tan alejado del intervalo de confianza me indicaría que tiene algo “diferente” al resto de inmuebles en la zona, posiblemente negativos para estar tan alejado de los posibles valores que indica el modelo para la zona y número de metros.
predict(mod1,list(Area_contruida=110),interval="confidence")
## fit lwr upr
## 1 319.8706 306.3133 333.4279
7 Realice la validación de supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos.
Con los diferentes gráficos se observa una posible no normalidad de los residuos del modelo. En el histograma se observa como los datos se encuentran sesgados hacia la derecha, donde adicional se concentran hacia la cola izquierda, lo cual tambien nos habla de datos extremos que afectan la normalidad. En el gráfico Q-Q se observan puntos que se alejan de la recta a lo largo de ella. De hecho los residuos parecen distribuirse en una especie de “S”.
Finalmente al analizar los valores residuales frente a los valores ajustados, se observa que no hay una aleatoriedad en los errores, sino más bien una distribución en forma de parábola invertida, confirmando que posiblemente no exista una relación lineal entre las variables analizadas.
hist(mod1$residuals)
qqnorm(mod1$residuals)
qqline(mod1$residuals,col="blue")
par(mfrow=c(2,2))
plot(mod1)
8. De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
De acuerdo a la distribución de los datos y revisión de la literatura se utiliza un modelo logarítmico buscando que los parámetros tengan la linealidad que esperamos.
mod_nuevo=lm(log(precio_millon)~log(Area_contruida), data=Data_viv)
summary(mod_nuevo)
##
## Call:
## lm(formula = log(precio_millon) ~ log(Area_contruida), data = Data_viv)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.13325 -0.07583 -0.01435 0.07501 0.16051
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.96408 0.29228 6.72 5.97e-07 ***
## log(Area_contruida) 0.80928 0.06194 13.06 2.11e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08859 on 24 degrees of freedom
## Multiple R-squared: 0.8767, Adjusted R-squared: 0.8716
## F-statistic: 170.7 on 1 and 24 DF, p-value: 2.109e-12
hist(mod_nuevo$residuals)
qqnorm(mod_nuevo$residuals)
qqline(mod_nuevo$residuals,col="blue")
par(mfrow=c(2,2))
plot(mod_nuevo)
9. De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado
Se observa que el nuevo modelo presenta un “r2” superior al primero, al ubicarse en 0,87 frente al 0,84 del modelo original. Esto no puede ser interpretado como un mejor modelo con mejor capacidad de predicción, solo tiene un mayor ajuste, el cual puede estar influenciado por la transformación de los datos, un mayor ajuste, mayor normalidad o una combinación entre todas. Las gráficas del nuevo modelo no presentan mejoras sustanciales, lo cual se debe tomar como una alerta importante de la importancia de seguir profundizando y mejorando el modelo. Una posible mejora del modelo pueda ser tener una mayor cantidad de datos,que disminuyan la dispersión y el imapcto de los valores dispersos que pueden estar afectando el modelo de manera negativa, o pasar a un modelo multivariado que explique mejor la realidad como puede ser para este caso estudiado.
summary(mod1)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = Data_viv)
##
## 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
summary(mod_nuevo)
##
## Call:
## lm(formula = log(precio_millon) ~ log(Area_contruida), data = Data_viv)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.13325 -0.07583 -0.01435 0.07501 0.16051
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.96408 0.29228 6.72 5.97e-07 ***
## log(Area_contruida) 0.80928 0.06194 13.06 2.11e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08859 on 24 degrees of freedom
## Multiple R-squared: 0.8767, Adjusted R-squared: 0.8716
## F-statistic: 170.7 on 1 and 24 DF, p-value: 2.109e-12