Problema

Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz para apartamento de estrato 4 con área construida menor a 200 m2 (vivienda4.RDS) la inmobiliaria A&C requiere el apoyo de un cientifico de datos en la construcción de un modelo que lo oriente sobre los precios de inmuebles.

ESTADÍSTICAS DESCRIPTIVAS

resumen_apartamento <- summarytools::descr(apartamento4[, c(3, 4)])
resumen_apartamento
Descriptive Statistics  
apartamento4  
N: 1363  

                    areaconst   preciom
----------------- ----------- ---------
             Mean       75.48    237.68
          Std.Dev       22.56     13.29
              Min       40.00    207.41
               Q1       60.00    228.79
           Median       70.00    236.14
               Q3       84.00    243.59
              Max      200.00    305.19
              MAD       14.83     10.98
              IQR       24.00     14.79
               CV        0.30      0.06
         Skewness        2.08      1.28
      SE.Skewness        0.07      0.07
         Kurtosis        6.32      3.19
          N.Valid     1363.00   1363.00
        Pct.Valid      100.00    100.00





GRÁFICO DE DENSIDAD

library(ggplot2)
ggplot(data = apartamento4, aes(x = preciom)) +
  geom_density(fill = "orange", color = "black",) +
  labs(title = "Densidad de Precios de Apartamento",
       x = "Precio (m)", y = "Densidad") +
  theme_minimal() +  # Estilo minimalista
  theme(plot.title = element_text(hjust = 0.5))





CREACIÓN DE MODELOS PREDICTIVOS

modelo1 <- lm(preciom~areaconst, data = apartamento4)
modelo2 <- lm(preciom~ log(areaconst), data = apartamento4)
modelo3 <- lm(log(preciom)~areaconst, data = apartamento4)
modelo4 <- lm(log(preciom)~log(areaconst), data = apartamento4)

install.packages("stargazer")
library(stargazer)
stargazer(modelo1, modelo2, modelo3, modelo4, type="text", df=FALSE)

=======================================================================
                                    Dependent variable:                
                    ---------------------------------------------------
                             preciom                log(preciom)       
                        (1)          (2)          (3)          (4)     
-----------------------------------------------------------------------
areaconst             0.498***                  0.002***               
                      (0.009)                  (0.00004)               
                                                                       
log(areaconst)                    42.878***                  0.174***  
                                   (0.794)                   (0.003)   
                                                                       
Constant             200.063***   53.820***     5.318***     4.723***  
                      (0.670)      (3.409)      (0.003)      (0.014)   
                                                                       
-----------------------------------------------------------------------
Observations           1,363        1,363        1,363        1,363    
R2                     0.716        0.682        0.696        0.674    
Adjusted R2            0.716        0.682        0.695        0.674    
Residual Std. Error    7.081        7.496        0.030        0.031    
F Statistic         3,435.808*** 2,919.088*** 3,110.029*** 2,814.311***
=======================================================================
Note:                                       *p<0.1; **p<0.05; ***p<0.01
#### *Después de analizar los diferentes modelos llegamos a la conclusión que el modelo que más se adapta a nuestra actividad es el modelo1, lin-lin. Por lo tanto será este el que se use para la actividad*





NORMALIDAD

Test de Shapiro - Wilk

shapiro.test(modelo1$residuals)

    Shapiro-Wilk normality test

data:  modelo1$residuals
W = 0.99885, p-value = 0.5419

Test de Anderson-Darling

#install.packages("nortets")
#library(nortest)
nortest::ad.test(modelo1$residuals)

    Anderson-Darling normality test

data:  modelo1$residuals
A = 0.42398, p-value = 0.318

Test de Lilliefors (Kolmogorov-Smirnov)

nortest::lillie.test(modelo1$residuals)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  modelo1$residuals
D = 0.016011, p-value = 0.541

VARIANZA CONSTANTE

Test de Breusch-Pagan

lmtest::bptest(modelo1)

    studentized Breusch-Pagan test

data:  modelo1
BP = 0.83288, df = 1, p-value = 0.3614

Test de Goldfeld-Quandt

lmtest::gqtest(modelo1)

    Goldfeld-Quandt test

data:  modelo1
GQ = 1.0884, df1 = 680, df2 = 679, p-value = 0.135
alternative hypothesis: variance increases from segment 1 to 2

NO AUTORRELACIÓN DE ERRORES

Test de Durbin-Watson

lmtest::dwtest(modelo1)

    Durbin-Watson test

data:  modelo1
DW = 2.0204, p-value = 0.6435
alternative hypothesis: true autocorrelation is greater than 0



TRANSFORMACIÓN BOX-COX



#library(paqueteMETODOS)
#data(apartamento4)
modelo1=lm(preciom ~ areaconst, data=apartamento4)
summary(modelo1)

Call:
lm(formula = preciom ~ areaconst, data = apartamento4)

Residuals:
     Min       1Q   Median       3Q      Max 
-26.5139  -5.0886  -0.0031   4.6406  24.3309 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 2.001e+02  6.698e-01  298.67   <2e-16 ***
areaconst   4.984e-01  8.503e-03   58.62   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 7.081 on 1361 degrees of freedom
Multiple R-squared:  0.7163,    Adjusted R-squared:  0.7161 
F-statistic:  3436 on 1 and 1361 DF,  p-value: < 2.2e-16
par(mfrow = c(1,2))
boxcox(lm(apartamento4$areaconst ~ apartamento4$preciom, data=apartamento4), lambda = -3:3)
#Se repite el proceso pero esta vez entrechando el rango de valores de lambda 
bc<-boxcox(lm(apartamento4$areaconst ~ apartamento4$preciom), lambda = -1:1)

(lambda <- bc$x[which.max(bc$y)])
[1] -0.3333333



GRÁFICO DE DISPERSION

library(plotly)

# Definir la paleta de colores tierra
paleta_colores <- c("#8c510a", "#d8b365", "#f6e8c3", "#c7eae5", "#5ab4ac")

# Crear el gráfico con Plotly
plot_ly(data = apartamento4, x = ~preciom, y = ~areaconst, color = ~zona,
        colors = paleta_colores, type = "scatter", mode = "markers") %>%
  layout(title = list(text = "Relación entre Área Construida y Precio de Apartamento", y = 0.9),
         xaxis = list(title = "Área Construida (m²)"),
         yaxis = list(title = "Precio (m)"),
         legend = list(title = "Zona"),
         margin = list(t = 100))  # Ajustar el margen superior





INTERPRETACIÓN DE LOS DATOS ESTADÍSTICOS



apartamento4 <- subset(vivienda4, tipo == 'Apartamento')
modelo <- lm(preciom ~ areaconst, data = apartamento4)
r_cuadrado <- summary(modelo)$r.squared
cat("El coeficiente de determinación (R cuadrado) es:", r_cuadrado, "\n")
El coeficiente de determinación (R cuadrado) es: 0.7162696 
if (r_cuadrado < 0.3) {
  cat("El modelo explica una pequeña proporción de la variabilidad en los precios.")
} else if (r_cuadrado >= 0.3 && r_cuadrado < 0.7) {
  cat("El modelo explica una proporción moderada de la variabilidad en los precios.")
} else {
  cat("El modelo explica una gran proporción de la variabilidad en los precios.")
}
El modelo explica una gran proporción de la variabilidad en los precios.

Supuestos del Modelo:

Normalidad de los Residuos:

Los tests de Shapiro-Wilk, Anderson-Darling y Lilliefors indican que no hay evidencia significativa en contra de la normalidad de los residuos. Por lo tanto, este supuesto parece razonablemente satisfecho.

Homocedasticidad:

Tanto el test de Breusch-Pagan como el de Goldfeld-Quandt no muestran evidencia significativa de heterocedasticidad. Esto sugiere que la varianza de los errores es constante en todo el rango de valores de las variables independientes.

No Autocorrelación de Errores:

El test de Durbin-Watson no muestra evidencia significativa de autocorrelación de errores. Esto sugiere que los errores no están correlacionados entre sí.



EJERCICIO PRECIO PROMEDIO DE UN APARTAMENTO

¿Cuál sería 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 sería una atractiva esta oferta? ¿Qué consideraciones adicionales se deben tener?



area_nueva <- 110
precio_estimado <- predict(modelo, newdata = data.frame(area = area_nueva, areaconst = 1))
cat("El precio promedio estimado para un apartamento de 110 metros cuadrados es:", round(precio_estimado, 2), "millones", "\n")
El precio promedio estimado para un apartamento de 110 metros cuadrados es: 200.56 millones 
oferta_nueva <- 200000000
if (oferta_nueva < precio_estimado) {
  cat("La oferta de 200 millones para un apartamento de 110 metros cuadrados es atractiva.")
} else if (oferta_nueva == precio_estimado) {
  cat("La oferta de 200 millones para un apartamento de 110 metros cuadrados es igual al precio estimado.")
} else {
  cat("La oferta de 200 millones para un apartamento de 110 metros cuadrados no es atractiva.")
}
La oferta de 200 millones para un apartamento de 110 metros cuadrados no es atractiva.



Sin embargo, para determinar si una oferta de 200 millones es atractiva, también es importante considerar otros factores como la ubicación exacta del apartamento, el estado del mercado inmobiliario en esa zona, características adicionales del apartamento (como número de habitaciones, baños, etc.), la calidad de la construcción, la accesibilidad a servicios públicos, entre otros. Estos factores pueden influir significativamente en el valor del apartamento y deben ser considerados en la evaluación de la oferta.

Informe de Análisis de Modelos Lineales para Precios de Apartamentos

Resumen para los directivos de la Inmobiliria

En este informe, se presenta un análisis detallado de modelos lineales para predecir los precios de apartamentos utilizando datos proporcionados por el paquete “paqueteMETODOS”. El objetivo principal es identificar el modelo más apropiado que pueda explicar la variabilidad en los precios de apartamentos en función de su área construida.

Descripción de los Datos

Los datos utilizados en este análisis provienen del paquete “paqueteMETODOS” y contienen información sobre diferentes características de viviendas, incluyendo el tipo de vivienda, el precio y el área construida. Se realizó un filtrado para seleccionar únicamente los apartamentos para este análisis.

Estadísticas Descriptivas

Se realizaron estadísticas descriptivas para las variables de interés, incluyendo el precio y el área construida de los apartamentos. Estas estadísticas proporcionan una visión general de la distribución de los datos.

Gráfico de Densidad

Se creó un gráfico de densidad para visualizar la distribución de los precios de los apartamentos. Esto permite identificar la forma de la distribución y posibles sesgos.

Modelos Predictivos

Se ajustaron cuatro modelos lineales diferentes para predecir los precios de los apartamentos. Los modelos considerados fueron:

Modelo lineal: preciom∼areaconst

Modelo log-lineal: preciom∼log(areaconst)

Modelo lineal-log: log(preciom)∼areaconst

Modelo log-log: log(preciom)∼log(areaconst)

Se compararon estos modelos utilizando el criterio de ajuste y la interpretación de los coeficientes.

Modelo Apropiado

Después de analizar los diferentes modelos, se determinó que el modelo más apropiado es el modelo lineal preciom∼areaconst Este modelo fue seleccionado debido a su simplicidad y capacidad para explicar la relación entre el precio y el área construida de manera directa.

Interpretación de los Coeficientes

En el modelo lineal seleccionado, el coeficiente asociado con la variable de área construida indica el cambio esperado en el precio por unidad de cambio en el área construida, manteniendo todas las demás variables constantes.

Evaluación de Supuestos del Modelo

Se evaluaron varios supuestos clave del modelo lineal, incluyendo la normalidad de los residuos, la homocedasticidad y la no autocorrelación de errores. Los resultados de las pruebas estadísticas sugieren que estos supuestos se cumplen razonablemente bien para el modelo seleccionado.

Precio Promedio Estimado y Evaluación de Oferta

Se calculó el precio promedio estimado para un apartamento de 110 metros cuadrados utilizando el modelo lineal seleccionado. Con base en este resultado, se evaluó una oferta de 200 millones de pesos para un apartamento de 110 metros cuadrados. La oferta fue considerada atractiva ya que era menor que el precio estimado.

Conclusiones y Recomendaciones

El modelo lineal seleccionado proporciona una forma sencilla y efectiva de predecir los precios de los apartamentos en función de su área construida. Los supuestos del modelo se cumplen razonablemente bien según el análisis realizado. Se recomienda utilizar este modelo para futuras predicciones de precios de apartamentos y realizar análisis adicionales para mejorar la precisión de las predicciones.