Preguntas

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.

Precio de vivienda (millones de pesos COP)

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.

Área de vivienda (metros cuadrados)

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

Precio vs Área

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.

Supuestos del modelo

\(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
  1. \(Media\) \(cero\)
round(mean(ei),3)
## [1] 0

Este supuesto siempre se cumple por defecto.

  1. \(Varianza\) \(constante\) Compara los \(e_i\) con los \(y\) del modelo
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.

  1. \(Normalidad\)
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.

  1. \(Independencia\) No es necesario validar este spuesto porque los datos del ejercicio no fueron tomados a través del tiempo.

\(8.\) De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.

Transformación

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)

Comparación modelo inicial vs modelo transformado

\(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")