Con base en los datos de ofertas de vivienda descargadas del portal Fincaraíz realizar los siguientes puntos.
Los datos se muestran a continuación:
library(readxl)
## Warning: package 'readxl' was built under R version 4.0.4
vivienda <- read_excel("C:/Users/Claudia Gallo/Desktop/Bioestadistica/vivienda.xlsx")
vivienda
## # A tibble: 26 x 2
## area_construida 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
Se observa que la base de datos contiene un total de 26 registros con 2 variables: area_construida y precio_millon. Siendo area_construida la variable independiente y precio_millon la variable dependiente.
\(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.
hist(vivienda$precio_millon,col="blue",main="Precio de vivienda",ylab="Frecuencia",xlab="precio_millon")
summary(vivienda$precio_millon)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 240.0 251.2 305.0 332.1 395.0 480.0
En el histograma anterior (Precio de vivienda) se observa la variación en el precio en millones de pesos de las viviendas ofertadas en el portal de Fincaraíz, indicando que las viviendas tienen diferentes precios. El precio máximo de vivienda en el portal es de 480.0 millones de pesos, mientras que el precio mínimo de vivienda es de 240.0 millones de pesos. El precio promedio de vivienda es de 332.1 millones de pesos y la mediana es de 305.0 millones de pesos.
hist(vivienda$area_construida,col="green",main="Área de vivienda",ylab="Frecuencia",xlab="area_construida")
summary(vivienda$area_construida)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 80.0 86.0 97.0 115.7 130.0 195.0
En el histograma anterior (Área de vivienda) se observa la variación en el área construida de las viviendas ofertadas en el portal de Fincaraíz, indicando que las viviendas tienen diferentes áreas. El área máxima de vivienda en el portal es de 195.0 metros cuadrados, mientras que el área mínima de vivienda es de 80.0 metros cuadrados. El área promedio de vivienda es de 115.7 metros cuadrados y la mediana es de 97.0 metros cuadrados.
\(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 e interpretados.
require(ggplot2)
## Loading required package: ggplot2
require(plotly)
## Loading required package: plotly
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
g1=ggplot(data=vivienda,aes(x=area_construida,y=precio_millon))+geom_point()+theme_bw()
ggplotly(g1)
g2=ggplot(data=vivienda,aes(x=area_construida,y=precio_millon))+geom_point()+theme_bw()+geom_smooth()
g2
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
g3=ggplot(data=vivienda,aes(x=area_construida,y=precio_millon))+geom_point()+theme_bw()+geom_smooth(method="lm")
g3
## `geom_smooth()` using formula 'y ~ x'
cor(vivienda)
## area_construida precio_millon
## area_construida 1.0000000 0.9190295
## precio_millon 0.9190295 1.0000000
Entre el área de vivienda y el precio de vivienda Se observa una relación que tiende a ser directamente proporcional, entre más área tenga una vivienda más alto será su precio. Sin embargo, la relación más apropiada no es lineal. Por otro lado, el coeficiente de correlación de Pierson obtenido (0.9190295), indica una relación positiva fuerte entre las variables.
\(3.\) Estime el modelo de regresión lineal simple entre \(precio = f(area)+e\). Interprete los coeficientes del modelo \(\beta_0\), \(\beta_1\) en caso de ser correcto.
attach(vivienda)
plot(area_construida,precio_millon)+title("Relación entre el precio de vivienda y el área de vivienda")
## integer(0)
modelo=lm(precio_millon~area_construida)
abline(modelo,col="red")
summary(modelo)
##
## Call:
## lm(formula = precio_millon ~ area_construida)
##
## 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_construida 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
El coenficiente \(\beta_0\) no se debe interpertar porque no se observan valores de area_construida cero. Por otro lado, el \(\beta_1=2.124\) indica que por cada metro cuadrado adicional que tenga una vivienda el precio se incrementa en 2.124 millones de pesos. Adicionalmente se observa que el coeficiente es significativamente distinto de cero.
\(4.\) Construir un intervalo de confianza (95%) para el coeficiente \(\beta_1\), interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipotesis t.
x1=area_construida
y1=precio_millon
b1_area=2.124
Sxx1=sum((x1-mean(x1))^2)
sigma2_area=sum((y1-modelo$fitted.values)^2)/24
t=qt(p=0.975,df=24)
error_estandar=t*sqrt(sigma2_area/Sxx1)
limite_inferior=b1_area-error_estandar
limite_superior=b1_area+error_estandar
c(limite_inferior,limite_superior)
## [1] 1.740199 2.507801
El intervalo de confianza obtenido generaliza el resultado del coeficiente \(\beta_1\). Esto quiere decir que el valor real de \(\beta_1\) se encuentra entre 1.740199 y 2.507801. Este intervalo de confianza representa que por cada metro cuadrado adicional que tenga una vivienda el precio se incrementa entre 1.740199 y 2.507801 millones de pesos. Como en el intervalo de confianza no se encuentra el cero (0) se concluye que \(\beta_1\) no puede ser cero (0), es decir que el área es significativa en el modelo.
\(5.\) Calcule e interprete el indicador de bondad y ajuste \(R^2\). En la información obtenida en el punto 3 se observa que el ajuste del modelo es de \(R^2=0.8446\), es decir que el modelo explica el 84% de la variabilidad del precio de vivienda.
\(6.\) ¿Cuál sería el precio promedio estimado para una vivienda de 110 metros cuadrados? ¿Considera entonces con este resultado que una vivienda 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?
predict(modelo,list(area_construida=110))
## 1
## 319.8706
predict(modelo,list(area_construida=110),interval="confidence",level=0.95)
## fit lwr upr
## 1 319.8706 306.3133 333.4279
Se espera que el precio promedio para una vivienda de 110 \(m^2\) sea de 319.8706 millones de pesos. El intervalo de confianza indica que el valor promedio de esta vivienda debe estar entre 306.3133 y 333.4279 millones de pesos con un 95% de confianza. Teniendo en cuenta la información anterior arrojada por la predicción considero que una vivienda en la misma zona con 110 \(m^2\) en un precio de 200 millones de pesos sería una muy buena oferta.
\(7.\) Realice la validadción de supuestos del modelo por medio de los gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos.
\(Residuales\)
ei=modelo$residuals
ei
## 1 2 3 4 5 6 7
## -18.895336 48.137608 32.649962 -51.672533 -28.895336 25.617018 32.691142
## 8 9 10 11 12 13 14
## -22.135041 -26.771366 2.691142 -31.019307 47.245540 21.104664 -26.771366
## 15 16 17 18 19 20 21
## -18.135041 -18.895336 -18.895336 32.649962 14.154080 -1.151513 67.649962
## 22 23 24 25 26
## -11.019307 22.649962 14.732752 -50.408120 -37.308858
round(mean(ei),3)
## [1] 0
Este supuesto siempre se cumple por defecto.
y_modelo=modelo$fitted.values
datos=data.frame(y_modelo,ei)
ggplot(datos,aes(x=y_modelo,y=ei))+geom_point()+geom_smooth()+theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
En el gráfico anterior se observa que no se cumple con la validación del supuesto, la varianza no es homogénea.
qqnorm(ei)
qqline(ei,col="red")
Se observa en el gráfico cuartil-cuartil que los datos no se ajustan bien a la línea de normalidad, es decir que no se cumple con la validación del supuesto.
\(8.\) De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
ggplot(vivienda,aes(x=area_construida,y=precio_millon))+geom_point()+geom_smooth()+theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
ggplot(vivienda,aes(x=log(area_construida),y=precio_millon))+geom_point()+geom_smooth()+theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
La transformación apropiada para mejorar el ajuste y los supuestos del modelo fue sacarle el logaritmo a los valores de la variable x=area_construida, ya que el comportamiento del modelo era logarítmico.
\(9.\) De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.
trans_area=log(area_construida)
trans_modelo=lm(precio_millon~trans_area)
\(residuales\) - \(Modelo\) \(inicial\)
ei=modelo$residuals
ei
## 1 2 3 4 5 6 7
## -18.895336 48.137608 32.649962 -51.672533 -28.895336 25.617018 32.691142
## 8 9 10 11 12 13 14
## -22.135041 -26.771366 2.691142 -31.019307 47.245540 21.104664 -26.771366
## 15 16 17 18 19 20 21
## -18.135041 -18.895336 -18.895336 32.649962 14.154080 -1.151513 67.649962
## 22 23 24 25 26
## -11.019307 22.649962 14.732752 -50.408120 -37.308858
\(Residuales\) - \(Modelo\) \(transformado\)
trans_ei=trans_modelo$residuals
trans_ei
## 1 2 3 4 5 6 7
## -12.518084 36.476159 20.144640 -45.837429 -22.518084 21.968916 32.209058
## 8 9 10 11 12 13 14
## -24.425115 -19.338166 2.209058 -25.661239 35.510169 27.481916 -19.338166
## 15 16 17 18 19 20 21
## -20.425115 -12.518084 -12.518084 20.144640 1.905225 12.144449 55.144640
## 22 23 24 25 26
## -5.661239 10.144640 18.159406 -35.093167 -37.790942
\(Varianza\) \(constante\) - \(Modelo\) \(inicial\)
y_modelo=modelo$fitted.values
datos=data.frame(y_modelo,ei)
ggplot(datos,aes(x=y_modelo,y=ei))+geom_point()+geom_smooth()+theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
\(Varianza\) \(constante\) - \(Modelo\) \(transformado\)
y_modelo=trans_modelo$fitted.values
datos=data.frame(y_modelo,trans_ei)
ggplot(datos,aes(x=y_modelo,y=trans_ei))+geom_point()+geom_smooth()+theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
\(Normalidad\) - \(Modelo\) \(inicial\)
qqnorm(ei)
qqline(ei,col="red")
\(Normalidad\) - \(Modelo\) \(transformado\)
qqnorm(trans_ei)
qqline(trans_ei,col="red")