Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz (datos_vivienda.xls - descarga) realizar los siguientes puntos:
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.
library(readxl)
library(ggplot2)
## Warning in as.POSIXlt.POSIXct(Sys.time()): unable to identify current timezone 'H':
## please set environment variable 'TZ'
library(CGPfunctions)
viviendas = read_excel("D:/Maestria/Metodos estadisticos/Regresion/YDRAY-datos_vivienda-3.xlsx")
viviendas
## # A tibble: 26 x 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
## 7 170 480
## 8 96 268
## 9 85 240
## 10 170 450
## # ... with 16 more rows
attach(viviendas)
Prom_Area_contruida=mean(Area_contruida)
Desv_Area_contruida=sd(Area_contruida)
quantile(Area_contruida)
## 0% 25% 50% 75% 100%
## 80 86 97 130 195
data.frame(Prom_Area_contruida,Desv_Area_contruida)
## Prom_Area_contruida Desv_Area_contruida
## 1 115.7469 35.54332
par(mfrow=c(1,2))
hist(precio_millon)
hist(Area_contruida)
Prom_precio_millon=mean(precio_millon)
Desv_precio_millon=sd(precio_millon)
quantile(precio_millon)
## 0% 25% 50% 75% 100%
## 240.00 251.25 305.00 395.00 480.00
data.frame(Prom_precio_millon,Desv_precio_millon)
## Prom_precio_millon Desv_precio_millon
## 1 332.0769 82.14423
ggplot(viviendas,aes(x=Area_contruida))+geom_histogram()+theme_bw()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggplot(viviendas,aes(x=precio_millon))+geom_histogram()+theme_bw()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
par(mfrow=c(1,2))
boxplot(Area_contruida,col = 'green',main="Area Construida",ylab='metros cuadrados')
boxplot(precio_millon,col = 'blue',main="Precio Millon",ylab='millones de pesos')
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.
cor(precio_millon,Area_contruida)
## [1] 0.9190295
plot(precio_millon,Area_contruida, col=100,main = 'precio vs area construida')
## 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.
cor(precio_millon,Area_contruida)
## [1] 0.9190295
mod1=lm(precio_millon~Area_contruida, data = viviendas )
mod1
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = viviendas)
##
## Coefficients:
## (Intercept) Area_contruida
## 86.234 2.124
plot(precio_millon,Area_contruida, col=100,main = 'precio vs area construida')
abline(mod1, col="red")
B0 : Es el Precio de los inmuebles con un minimo de 86.234 B1 :Se refiere a que por cada metro cuadrado el precio incrementaria en 2.124
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.
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
confint(object=mod, level=0.95)
## 2.5 % 97.5 %
## (Intercept) 39.83983 132.627917
## Area_contruida 1.74017 2.507771
t.test(mod$coefficients,mu=0)
##
## One Sample t-test
##
## data: mod$coefficients
## t = 1.0505, df = 1, p-value = 0.4843
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -490.1799 578.5377
## sample estimates:
## mean of x
## 44.17892
P-value resultante es:
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
Demuestra que el Area construida de vivienda impacta notablemente el precio de la vivienda, Ejemplo: Prueba con area = 140 metros cuadrados
prueba1=86.234+2.124*140
print(prueba1)
## [1] 383.594
Calcule e interprete el indicador de bondad y ajuste R2.
summary(mod)$r.squared
## [1] 0.8446152
En este caso la variable R2 indica que con un porcentaje del 84% la varaible precio es explicada por la varaible área.
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?.
prueba_metros <- data.frame(Area_contruida=110)
predict(object=mod, newdata=prueba_metros, interval="confidence", level=0.95)
## fit lwr upr
## 1 319.8706 306.3133 333.4279
Realice la validación de supuestos del modelo por medio de graficos apropiados, interpretarlos y sugerir posibles soluciones si se violan alugunos de ellos.
par(mfrow=c(2,2))
hist(mod$residuals)
plot(mod)
qqnorm(mod$residuals)
qqline(mod$residuals)
shapiro.test(mod$residuals)
##
## Shapiro-Wilk normality test
##
## data: mod$residuals
## W = 0.95489, p-value = 0.3009
De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
mod_ajuste=lm(precio_millon~log(Area_contruida))
summary(mod_ajuste)
##
## Call:
## lm(formula = precio_millon ~ log(Area_contruida))
##
## 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))
hist(mod_ajuste$residuals)
plot(mod_ajuste)
qqnorm(mod_ajuste$residuals)
qqline(mod_ajuste$residuals)
shapiro.test(mod_ajuste$residuals)
##
## Shapiro-Wilk normality test
##
## data: mod_ajuste$residuals
## W = 0.96783, p-value = 0.568
De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado
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
summary(mod_ajuste)
##
## Call:
## lm(formula = precio_millon ~ log(Area_contruida))
##
## 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
predict(object=mod, newdata=prueba_metros, interval="confidence", level=0.95)
## fit lwr upr
## 1 319.8706 306.3133 333.4279
predict(object=mod_ajuste, newdata=prueba_metros, interval="confidence", level=0.95)
## fit lwr upr
## 1 329.4367 318.5009 340.3726
En terminos generales al aplicar una transformación sobre el modelo, la varaible R2 mejora de 0.8381 (con el moedelo lm(formula = precio_millon ~ Area_contruida)) a 0.8919 (con el modelo lm(formula = precio_millon ~ log(Area_contruida))) y para el ejemplo de predicción en una vivienda de 110 metros cuadrados tambien mejora en su rango y precisión