Análisis Univariado

library(readxl)
datos <- read_excel("~/Maestria/Estadistica/Regresion/datos_vivienda.xlsx")

names(datos)
## [1] "Area_contruida" "precio_millon"
str(datos)
## tibble [26 × 2] (S3: tbl_df/tbl/data.frame)
##  $ Area_contruida: num [1:26] 86 118 130 181 86 98 170 96 85 170 ...
##  $ precio_millon : num [1:26] 250 385 395 419 240 320 480 268 240 450 ...
attach(datos)

La base de datos corresponde a la toma de 26 propiedades donde, nos dan a conocer el área construida y el precio por millón de cada una de ellas

summary(datos)
##  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
# Una fila, dos columnas
par(mfrow = c(2, 2))

# Los siguientes gráficos se combinarán
hist(Area_contruida,
     main = "Area_contruida Histograma")
# Box plot vertical
boxplot(Area_contruida, col = "white")

# Puntos
stripchart(Area_contruida,              # Datos
           method = "jitter", # Ruido aleatorio
           pch = 19,          # Símbolo pch
           col = 4,           # Color del símbolo
           vertical = TRUE,   # Modo vertical
           add = TRUE)        # Agregar encima

# Volvemos al estado original


# Los siguientes gráficos se combinarán
hist(precio_millon,
     main = "precio X millón Histograma")
# Box plot vertical
boxplot(precio_millon, col = "white")

# Puntos
stripchart(precio_millon,              # Datos
           method = "jitter", # Ruido aleatorio
           pch = 19,          # Símbolo pch
           col = 4,           # Color del símbolo
           vertical = TRUE,   # Modo vertical
           add = TRUE)        # Agregar encima

# Volvemos al estado original

par(mfrow = c(1, 1)) 

summary(datos)
##  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

Con el propósito de hallar un modelo que nos permita conocer el precio de una propiedad conociendo solo el área construida, iniciamos creando una relación con los datos conocidos en la siguiente grafica

library(ggplot2)
library(gganimate)
## No renderer backend detected. gganimate will default to writing frames to separate files
## Consider installing:
## - the `gifski` package for gif output
## - the `av` package for video output
## and restarting the R session
theme_set(theme_bw())


p <- ggplot(
  datos, 
  aes(x = Area_contruida, y=precio_millon, size = precio_millon, color=factor(precio_millon))
  ) +
  geom_point(show.legend = FALSE, alpha = 0.7) +
  scale_color_viridis_d() +
  scale_size(range = c(2, 12)) +
  scale_y_binned() +
  labs(x = "Area contruida", y = "Precio X millon")
p

Dado el grafico anterior podremos darnos cuenta de que existe una relación directa entre las variables, donde aumenta el precio de la propiedad conforme aumenta el metro cuadrado. Por tal motivo, decidimos verificar cuanto están relacionados

round(cor(Area_contruida, precio_millon),5)
## [1] 0.91903

Podemos Observar el coeficiente de relación de Pearson observamos que existe Una correlación lineal, siendo de 0.91903, mientras uno aumenta el otro también

modelo1 <- lm(precio_millon~Area_contruida)
summary(modelo1)
## 
## 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
modelo1$coefficients
##    (Intercept) Area_contruida 
##       86.23387        2.12397

De lo anterior podemos mencionar que valor mínimo de las viviendas estimadas se encuentra aproximadamente en los 86 millones (sin área construida) siendo este el B0. Así mismo, tenemos el B1, que nos indica cuanto aumenta el precio de la propiedad cada metro cuadrado siento esta 2.1 millones de pesos

Intervalo de confianza

z=qnorm(0.975)
li= round(2.12397-(z*0.186),2)
ls= round(2.124+(z*0.186),2)
data.frame(li,ls)
##     li   ls
## 1 1.76 2.49

Indicador de bondad y ajuste R-cuadrado

round(summary(modelo1)$r.squared,4)
## [1] 0.8446

Siendo lo anterior, me dice que el modelo logra explicar el 84.46% del precio de las viviendas, siendo considerablemente bueno el ajuste presentado

Predicción

predict(modelo1,list(Area_contruida=110),interval = "confidence")
##        fit      lwr      upr
## 1 319.8706 306.3133 333.4279

Entrando a probar el modelo que anteriormente tenemos, podríamos decir que para una vivienda de 110 metros cuadrados el área construida debe estar alrededor de 319.8 millones de pesos, oscilando entre mas o menos 13.5 millones hacia arriba o hacia abajo, otros factores podrían afectar el valor del inmueble ya esto dependerá de las condiciones físicas y ubicación

Validación

par(mfrow=c(2,2))
plot(modelo1)

De lo anterior podríamos mencionar que el grafico QQ, los errores tienen un comportamiento normal, y los residuales no muestran aleatoriedad, dejando la posibilidad de agregar componentes al modelo. Por tal motivo, se podría ajustar mejor el modelo

Opción Modelo cuadratico

modeloCuadratico <- lm(precio_millon~Area_contruida + I(Area_contruida^2), data = datos)
summary(modeloCuadratico)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida + I(Area_contruida^2), 
##     data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -34.927 -14.471  -3.777  16.504  35.073 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         -2.949e+02  6.648e+01  -4.435  0.00019 ***
## Area_contruida       8.488e+00  1.090e+00   7.787 6.80e-08 ***
## I(Area_contruida^2) -2.433e-02  4.142e-03  -5.874 5.49e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21.35 on 23 degrees of freedom
## Multiple R-squared:  0.9378, Adjusted R-squared:  0.9324 
## F-statistic: 173.5 on 2 and 23 DF,  p-value: 1.332e-14
ggplot(data=datos , aes(x=Area_contruida,
                                 y=precio_millon
))+
  geom_point()+
  stat_smooth(method="lm", formula= y~x, color="tomato")+
  stat_smooth(method="lm", formula= y~x + I(x^2))

modeloCuadratico$coefficients
##         (Intercept)      Area_contruida I(Area_contruida^2) 
##       -294.85414295          8.48815735         -0.02433239
par(mfrow=c(2,2))
plot(modeloCuadratico)

Analizando el error del modelo propuesto podemos ver que la distribución continua siendo normal, pero mejor de gran forma la aleatoriedad de los residuales, dejando como conclusión que el modelo propuesto puede explicar el precio de la vivienda un 93.78% con respecto al inicial del 84.46%

round(predict(modeloCuadratico,list(Area_contruida=110),interval = "confidence"),2)
##      fit   lwr    upr
## 1 344.42 332.1 356.74

Conclusión

Para finalizar, podríamos mencionar, que una vez ajustado el modelo el precio de la vivienda de 110 mts cuadrados, aumenta de 319.87 millones a 344.42 millones de pesos, dejando en evidencia que un buen modelo puede traer mejores beneficios en este caso 24.55 millones para poder negociar. Por tal motivo analizar las variables, comprender el modelo, nos permitira tener mayor acierto en las decisiones