Enunciado

Maria comenzó como agente de bienes raíces en Cali hace 10 años. Después de laborar dos años para una empresa nacional, se traslado a Bogotá y trabajó para otra agencia de bienes raíces. Sus amigos y familiares la convencieron de que con su experiencia y conocimientos del negocio debía abrir su propia agencia. Terminó por adquirir la licencia de intermediario y al poco tiempo fundó su propia compañía, C&A (Casas y Apartamentos) en Cali. Santiago y Lina, dos vendedores de la empresa anterior aceptaron trabajar en la nueva compaña. En la actualidad ocho agentes de bienes raíces colaboran con ella en C&A.

Actualmente las ventas de bienes raíces en Cali se han visto disminuidas de manera significativa en lo corrido del año. Durante este periodo muchas instituciones bancarias de ahorro y vivienda están prestando grandes sumas de dinero para la industria y la construcción comercial y residencial. Cuando el efecto producto de las tensiones políticas y sociales disminuya, se espera que la actividad económica de este sector se reactive.

Hace dos días, María recibió una carta solicitando asesoría para la compra de dos viviendas por parte de una compañía internacional que desea ubicar a dos de sus empleados con sus familias en la ciudad. Las solicitudes incluyen las siguientes condiciones:

Ayude a María a responder la solicitud, mediante técnicas modelación que usted conoce. Ella requiere le envíe un informe ejecutivo donde analice los dos casos y sus recomendaciones (Informe). Como soporte del informe debe anexar las estimaciones, validaciones y comparación de modelos requeridos (Anexos) .

0.1 Punto 1

Realice un filtro a la base de datos e incluya solo las ofertas de : base1: casas, de la zona norte de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de las bases. Discutir si todos los puntos se ubican en la zona correspondiente o se presentan valores en otras zonas, por que?).

0.1.1 Casas Zona Norte

Como primera aproximación ubicaremos sobre el mapa de Santiago de Cali todos los inmuebles que están marcados como “casas” y se ubican en la zona norte de la ciudad.

vivienda_c1 = vivienda[vivienda$tipo == "Casa" & vivienda$zona == "Zona Norte", ]

library(leaflet)

oferta <- data.frame(
  lat = vivienda_c1$latitud,
  long = vivienda_c1$longitud
)

# Crea un mapa
map <- leaflet(oferta) %>%
  addTiles() %>%
  addMarkers(
    lng = ~long,
    lat = ~lat,
    popup = ~as.character(lat) # Puedes personalizar el contenido del popup aquí
  )

map # Muestra el mapa

Se observa que las casas de la zona norte de la ciduad se encuentran dispersas por lo largo y ancho de la ciduad y no en una ubicación especifica. Al hacer zoom sobre el mapa esto se observa con mayor detalle.

0.1.2 Viviendas que cumplen con los requisitos de la oferta 1.

Se genera una sub-base con los requisitos que se solicitan para la vivienda 1. Cada una de las caracterísitcas se incluyó con la lógica de mínimo lo que están pidiendo. Así, los resultados también se graficaron sobre el mapa.

#Incluimos los condicionales

vivienda2 = vivienda[vivienda$tipo == "Casa" & vivienda$areaconst >= 200 & vivienda$parqueaderos >= 1 & vivienda$banios >= 2 & vivienda$habitaciones >= 4 & (vivienda$estrato == 4 | vivienda$estrato == 5) & vivienda$zona == "Zona Norte" & vivienda$preciom <= 350, ]

vivienda <- vivienda2[complete.cases(vivienda2[,1]),]
head(vivienda,n=3)
## # A tibble: 3 × 13
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  4210 Zona N… 01          5     350       200            3      3            4
## 2  4267 Zona N… 01          5     335       202            1      4            5
## 3  4800 Zona N… 01          5     340       250            2      4            4
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
library(leaflet)

oferta <- data.frame(
  lat = vivienda$latitud,
  long = vivienda$longitud
)

# Crea un mapa
map <- leaflet(oferta) %>%
  addTiles() %>%
  addMarkers(
    lng = ~long,
    lat = ~lat,
    popup = ~as.character(lat) # Puedes personalizar el contenido del popup aquí
  )

map # Muestra el mapa

Como resultado se obtuvieron 34 casas que cumplen con los requisitos solicitados a la empresa. Sin embargo, al ubicar espacialmente los inmuebles se observa que algunos de ellos están en la zona centro y sur de la ciudad. Esto se puede asociar a una mala marcación de los inmuebles en la base de datos y que no se ha validado la información de longitud y latitud de cada inmueble.

0.2 Punto 2

Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio de la casa) en función del área construida, estrato, numero de baños, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados.

0.2.1 Correlación entre variables de interés tipo: casa

#Gráfico de correlaciones para casas

library(paqueteMODELOS)
library(ggcorrplot)
library(plotly)
data("vivienda")

dfn<-select(vivienda, preciom, areaconst, estrato, banios, habitaciones, parqueaderos, zona, tipo)
dfn<-dfn[dfn$tipo == "Casa",]

summary(dfn)
##     preciom       areaconst         estrato          banios      
##  Min.   :  77   Min.   :  30.0   Min.   :3.000   Min.   : 0.000  
##  1st Qu.: 300   1st Qu.: 154.0   1st Qu.:3.000   1st Qu.: 3.000  
##  Median : 430   Median : 240.0   Median :5.000   Median : 4.000  
##  Mean   : 540   Mean   : 273.4   Mean   :4.485   Mean   : 3.894  
##  3rd Qu.: 670   3rd Qu.: 350.0   3rd Qu.:5.000   3rd Qu.: 5.000  
##  Max.   :1999   Max.   :1745.0   Max.   :6.000   Max.   :10.000  
##  NA's   :3      NA's   :3        NA's   :3       NA's   :3       
##   habitaciones    parqueaderos       zona               tipo          
##  Min.   : 0.00   Min.   : 1.00   Length:3222        Length:3222       
##  1st Qu.: 3.00   1st Qu.: 1.00   Class :character   Class :character  
##  Median : 4.00   Median : 2.00   Mode  :character   Mode  :character  
##  Mean   : 4.61   Mean   : 2.29                                        
##  3rd Qu.: 5.00   3rd Qu.: 3.00                                        
##  Max.   :10.00   Max.   :10.00                                        
##  NA's   :3       NA's   :736
dfn<-data.frame(dfn)
sum(is.na(dfn))
## [1] 757
delete.na <- function(df, n=0) {
  df[rowSums(is.na(df)) <= n,]
}
dfn <- delete.na(dfn)

r<-cor(dfn[1:6])

p<-ggcorrplot(r,type="lower",
              title="Correlaciones casas",
              colors=c("red","yellow","blue"),
              outline.color="black", ggtheme = theme_test() + theme(text = element_text(size = 7)))

plotly::ggplotly(p)

0.2.2 Correlación entre variables de interés tipo: casa por zona

#Gráfico por zonas

#Zona Norte

dfn_zn<-dfn[dfn$zona == "Zona Norte",]

r<-cor(dfn_zn[1:6])

p<-ggcorrplot(r,type="lower",
              title="Correlaciones casas - zona norte",
              colors=c("red","yellow","blue"),
              outline.color="black", ggtheme = theme_test() + theme(text = element_text(size = 7)))

plotly::ggplotly(p)
#Zona Sur
dfn_zs<-dfn[dfn$zona == "Zona Sur",]

r<-cor(dfn_zs[1:6])

p<-ggcorrplot(r,type="lower",
              title="Correlaciones casas - zona sur",
              colors=c("red","yellow","blue"),
              outline.color="black", ggtheme = theme_test() + theme(text = element_text(size = 7)))

plotly::ggplotly(p)
#Zona Oriente
dfn_zor<-dfn[dfn$zona == "Zona Oriente",]

r<-cor(dfn_zor[1:6])

p<-ggcorrplot(r,type="lower",
              title="Correlaciones casas - zona oriente",
              colors=c("red","yellow","blue"),
              outline.color="black", ggtheme = theme_test() + theme(text = element_text(size = 7)))

plotly::ggplotly(p)
#Zona Oeste
dfn_zoe<-dfn[dfn$zona == "Zona Oeste",]

r<-cor(dfn_zoe[1:6])

p<-ggcorrplot(r,type="lower",
              title="Correlaciones casas - zona oeste",
              colors=c("red","yellow","blue"),
              outline.color="black", ggtheme = theme_test() + theme(text = element_text(size = 7)))

plotly::ggplotly(p)
#Zona Centro
dfn_zc<-dfn[dfn$zona == "Zona Centro",]

r<-cor(dfn_zc[1:6])

p<-ggcorrplot(r,type="lower",
              title="Correlaciones casas - zona centro",
              colors=c("red","yellow","blue"),
              outline.color="black", ggtheme = theme_test() + theme(text = element_text(size = 7)))

plotly::ggplotly(p)

Resultados:

Casas: al tomar todos los inmuebles marcados como casas de la base de datos y analizar sus correlaciones, se encuentra qué, la mayor correlación (0.64) se encuentra entre las variables de preciom (precio metro cuadrado) y las variables área construida, estrato y parqueaderos por igual. Por el contrario, la correlación más baja y en este caso negativa (-0.15), se da entre las variables de habitaciones y estrato.

Casas zona norte: al tomar todos los inmuebles marcados como casas y ubicados en la zona norte de la ciudad, se analizó sus correlaciones y se encontró qué, la mayor correlación (0.69) se encuentra entre las variables de preciom (precio metro cuadrado) y areaconst (área construida) de la propiedad. Por el contrario, la correlación más baja (0.06), se da entre las variables de habitaciones y estrato.

Casas zona sur: al tomar todos los inmuebles marcados como casas y ubicados en la zona sur de la ciudad, se analizó sus correlaciones y se encontró qué, la mayor correlación (0.68) se encuentra entre las variables de preciom (precio metro cuadrado) y areaconst (área construida) y parqueaderos de la propiedad por igual. Por el contrario, la correlación más baja y en este caso negativa (-0.10), se da entre las variables de habitaciones y estrato.

Casas zona oriente: al tomar todos los inmuebles marcados como casas y ubicados en la zona oriente de la ciudad, se analizó sus correlaciones y se encontró qué, la mayor correlación (0.65) se encuentra entre las variables de habitaciones y banios (número de baños) de la propiedad. Por el contrario, la correlación más baja y en este caso negativa (-0.06), se da entre las variables de habitaciones y estrato. Adicionalmente, la correlación entre las variables preciom (precio metro cuadrado) y el estrato en esta zona de la ciudad es cercana a cero (-0.01).

Casas zona oeste: al tomar todos los inmuebles marcados como casas y ubicados en la zona oeste de la ciudad, se analizó sus correlaciones y se encontró qué, la mayor correlación (0.65) se encuentra entre las variables de preciom (precio metro cuadrado) y parqueaderos de la propiedad. Por el contrario, la correlación más baja y en este caso negativa (-0.28), se da entre las variables de habitaciones y estrato.

Casas zona centro: al tomar todos los inmuebles marcados como casas y ubicados en la zona centro de la ciudad, se analizó sus correlaciones y se encontró qué, la mayor correlación (0.52) se encuentra entre las variables de habitaciones y banios (número de baños) de la propiedad. Por el contrario, la correlación más baja (-0.13), se da entre las variables de habitaciones y estrato.

0.2.3 Otras opciones de visualización de relación entre variables:

library(paqueteMODELOS)
library(ggcorrplot)
library(plotly)
data("vivienda")

delete.na <- function(df, n=0) {
  df[rowSums(is.na(df)) <= n,]
}
vivienda <- delete.na(vivienda)
vivienda<-vivienda[vivienda$tipo == "Casa",]


vivienda %>% 
  plot_ly(x = ~preciom, y = ~areaconst, color = ~zona) %>%
  add_markers(marker = list(size = 4, symbol = "diamond")) %>%
  layout(title = "Precio vs área construida")
vivienda %>% 
  plot_ly(x = ~preciom, y = ~estrato, color = ~zona) %>%
  add_markers(marker = list(size = 4, symbol = "diamond")) %>%
  layout(title = "Precio vs estrato")
vivienda %>% 
  plot_ly(x = ~preciom, y = ~banios, color = ~zona) %>%
  add_markers(marker = list(size = 4, symbol = "diamond")) %>%
  layout(title = "Precio vs número de baños")
vivienda %>% 
  plot_ly(x = ~preciom, y = ~habitaciones, color = ~zona) %>%
  add_markers(marker = list(size = 4, symbol = "diamond")) %>%
  layout(title = "Precio vs número de habitaciones")
vivienda %>% 
  plot_ly(x = ~preciom, y = ~parqueaderos, color = ~zona) %>%
  add_markers(marker = list(size = 4, symbol = "diamond")) %>%
  layout(title = "Precio vs número de parqueaderos")

0.3 Punto 3

Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número de baños)) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deben están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).

library(paqueteMODELOS)
library(ggcorrplot)
library(plotly)
data("vivienda")

delete.na <- function(df, n=0) {
  df[rowSums(is.na(df)) <= n,]
}
vivienda <- delete.na(vivienda)
vivienda<-vivienda[vivienda$tipo == "Casa" & vivienda$zona == "Zona Norte",]

modelo1 <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda)

summary(modelo1)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = vivienda)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -761.11  -84.10  -16.36   52.22  925.67 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -245.62878   60.86958  -4.035 7.27e-05 ***
## areaconst       0.66444    0.06703   9.913  < 2e-16 ***
## estrato        85.58184   13.17690   6.495 4.51e-10 ***
## habitaciones    8.91428    7.14129   1.248    0.213    
## parqueaderos   28.05949    6.77575   4.141 4.74e-05 ***
## banios         11.49860    9.51130   1.209    0.228    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 152.8 on 248 degrees of freedom
## Multiple R-squared:  0.5952, Adjusted R-squared:  0.587 
## F-statistic: 72.92 on 5 and 248 DF,  p-value: < 2.2e-16

Resultados:

De acuerdo con el modelo que se construyó para el total de casas ubicadas en la zona norte de la ciudad, se observa que:

  1. Las variables de área construida, estrato y parqueaderos son estadísticamente significativas.

  2. Las variables relacionadas con el número de habitaciones y baños de la vivienda no fueron significativas en el modelo.

  3. De acuerdo con el modelo a mayor área construida del inmueble, en promedio el precio del metro cuadrado aumenta. Aunque el valor estimado del parámetro es bajo (0.66444), si se estudia a fondo la relación entre estas variables, debe existir un punto “óptimo” de precio y área construida, y después de este el precio del metro cuadrado no varía sin importar que se agregen más metros de área construdia.

  4. De acuerdo con el modelo a mayor estrato en que está ubicado el inmueble, en promedio el precio del metro cuadrado aumenta. Esta relación guarda lógica con los resultados que se esperan obtener previamente.

  5. De acuerdo con el modelo a mayor número de parqueaderos del inmueble, en promedio el precio del metro cuadrado aumenta. Esta relación guarda lógica con las demandas de las personas que cuentan con varios vehículos y que estarían dispuestos a pagar demás para conseguir más espacio de parqueo.

  6. En relación con la no significancia de las variables de número de habitaciones y baños, este resultado parece algo contra intuitivo, dado que a mayor área construida el precio aumenta, esta construcción no estaría relacionada con habitaciones o baños. Desde otra perspectiva, esta no significancia puede responder a los nuevos tamaños de los hogares en las ciudades capitales, que para el caso de hogares unipersonales va en aumento.

  7. Una definición sencilla del \(R^{2}\) es: el porcentaje de la variación en la variable de respuesta que es explicado por un modelo. Así las cosas, el actual modelo explica en un 59,52\(\%\) (en caso de tomar el \(R^{2}\) ajustado este valor sería de 58,7\(\%\)) la variación en el precio del metro cuadrado en casas de la zona norte de Cali.

  8. El valor del \(R^{2}\) indica que con el actual modelo existe cerca de un 40\(\%\) de la variación del precio del metro cuadrado en casas de la zona norte de Cali que no se está explicando. Esto podría llevar a pensar en modificación o combinación de variables o de la especificación del mismo modelo.

  9. p-value del modelo es significativo (2.2e-16) por lo que se puede aceptar que el modelo no es por azar, al menos uno de los coeficientes parciales de regresión es distinto de 0.

0.4 Punto 4

Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas, solo realizar sugerencias de que se podría hacer).

library(paqueteMODELOS)
library(ggcorrplot)
library(plotly)
library(car)
data("vivienda")

delete.na <- function(df, n=0) {
  df[rowSums(is.na(df)) <= n,]
}
vivienda <- delete.na(vivienda)
vivienda<-vivienda[vivienda$tipo == "Casa" & vivienda$zona == "Zona Norte",]

modelo1 <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda)


#Distribución normal de los residuos:

qqPlot(modelo1$residuals, 
       distribution = "norm",
       main = "Q-Q PLOT de residuos del modelo 1",
       xlab = "cuantiles teóricos",
       ylab = "cuantiles de la muestra",
       id = FALSE, grid = TRUE,
       envelope = 0.95, col = carPalette()[1], col.lines = carPalette()[3],
       pch = 20,
       cex = 1,
       lwd = 2)
qqline(modelo1$residuals,
       col = "blue",
       lty = 1,
       lwd = 2)   

shapiro.test(modelo1$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo1$residuals
## W = 0.87822, p-value = 2.263e-13
#Homocedasticidad

ggplot(data = vivienda, aes(modelo1$fitted.values, modelo1$residuals)) +
  geom_point() +
  geom_smooth(color = "firebrick", se = FALSE) +
  geom_hline(yintercept = 0) +
  theme_bw()

library(lmtest)
bptest(modelo1)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo1
## BP = 51.686, df = 5, p-value = 6.257e-10
#Multicolinealidad

library(corrplot)
corrplot(cor(dplyr::select(vivienda, areaconst, estrato, habitaciones, parqueaderos, banios)),
         method = "number", tl.col = "black")

#Análisis de inflación de varianza

library(car)
vif(modelo1)
##    areaconst      estrato habitaciones parqueaderos       banios 
##     1.415331     1.214737     1.818227     1.215609     1.961650
#Autocorrelación

library(car)
dwt(modelo1, alternative = "two.sided")
##  lag Autocorrelation D-W Statistic p-value
##    1      0.03325503      1.930942   0.544
##  Alternative hypothesis: rho != 0
library(lmtest)
dwtest(modelo1, alternative="two.sided",iterations=1000)
## 
##  Durbin-Watson test
## 
## data:  modelo1
## DW = 1.9309, p-value = 0.536
## alternative hypothesis: true autocorrelation is not 0

Resultados:

  1. Los residuales se salen de las bandas que se contruyeron en la gráfica de Q Q Plot para ellos, esto puede indicar de manera visual que estos no son normales.
  2. De acuerdo con los resultados de la prueba Shapiro-Wilk test, el p-valor de la prueba es menor a un alfa de 0.05 (5\(\%\)), lo cual indica que se rechaza la hipótesis nula y por tanto los residuales no tienen un comportamiento normal.
  3. Se observa que el valor-P es menor que el nivel de significancia usual de 0.05 (5\(\%\)), por lo tanto, hay evidencia para decir que no existe homosedasticidad en los residuales del modelo.
  4. Con base en la gráfica de las correlaciones no se observa de manera visual indicios de multicolinealidad en el modelo.
  5. En relación con el punto anterior, el Análisis de inflación de varianza arrojó resultados bajos para todas las variables del modelo, lo cual podría indicar que no hay problemas de colinealidad entre las variables.
  6. Por último, en términos de autocorrelación y dado que el valor-P en ambas pruebas fue mayor a 0.05 (5\(\%\)), se puede rechazar la presencia de autocorrelacion. Es decir, no se rechaza la hipotesis Ho.

0.5 Punto 5

Realice una partición en los datos de forma aleatoria donde 70% sea un set para entrenar el modelo y 30% para prueba. Estime el modelo con la muestra del 70%. Muestre los resultados.

library(paqueteMODELOS)
library(ggcorrplot)
library(plotly)
library(car)
data("vivienda")

delete.na <- function(df, n=0) {
  df[rowSums(is.na(df)) <= n,]
}
vivienda <- delete.na(vivienda)
vivienda<-vivienda[vivienda$tipo == "Casa" & vivienda$zona == "Zona Norte",]

#Aquí sacamos una submuestra
#Dividimos los datos entre el conjunto de entrenamiento y prueba.

data.samples <- sample(1:nrow(vivienda), nrow(vivienda) * 0.7, replace = FALSE)
training.data <- vivienda[data.samples, ]
test.data <- vivienda[-data.samples, ]

#Ahora aplicamos el modelo propuesto sobre el conjunto de entrenamiento:

train.modelo1 <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, training.data)

summary(train.modelo1)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = training.data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -378.99  -68.39  -19.57   46.37  893.75 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -211.61530   64.07708  -3.303 0.001167 ** 
## areaconst       0.93092    0.08903  10.456  < 2e-16 ***
## estrato        67.52690   14.51484   4.652 6.55e-06 ***
## habitaciones    3.26329    7.74035   0.422 0.673851    
## parqueaderos   28.44131    7.92098   3.591 0.000431 ***
## banios         12.64280   11.15590   1.133 0.258681    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 138.9 on 171 degrees of freedom
## Multiple R-squared:  0.673,  Adjusted R-squared:  0.6634 
## F-statistic: 70.38 on 5 and 171 DF,  p-value: < 2.2e-16

0.6 Punto 6

Realice predicciones con el modelo anterior usando los datos de prueba (30%).

#Con base en el modelo que se contruyó con el conjunto de entrenamiento, aquí se hacen 
# predicciones con el conjunto de prueba

train.output <- predict(train.modelo1, test.data)

summary(train.output)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   164.9   432.7   492.3   563.1   686.7  1443.1

0.7 Punto 7

Calcule el error cuadrático medio, el error absoluto medio y el R2, interprete.

#1. Error cuadrático medio

RMSE.df = data.frame(predicted = train.output, actual = test.data$preciom,
SE = ((train.output - test.data$preciom)^2/length(train.output)))
head(RMSE.df)
##   predicted actual         SE
## 1  356.3749    490 231.891921
## 2  231.0305    210   5.743916
## 3  175.5019    140  16.368648
## 4  451.3288    600 287.053545
## 5  481.1183    610 215.720738
## 6  473.0467    400  69.296456
sqrt(sum(RMSE.df$SE))
## [1] 195.3419
#Otra forma de validar el calculo es:

library(Metrics)

rmse(test.data$preciom, train.output)
## [1] 195.3419
#2. Error absoluto medio

MAE.df = data.frame(predicted = train.output, actual = test.data$preciom,
MAE = (1/length(train.output)*(abs(train.output - test.data$preciom))))
head(MAE.df)
##   predicted actual       MAE
## 1  356.3749    490 1.7353914
## 2  231.0305    210 0.2731233
## 3  175.5019    140 0.4610638
## 4  451.3288    600 1.9307947
## 5  481.1183    610 1.6737885
## 6  473.0467    400 0.9486590
sum(MAE.df$MAE)
## [1] 131.705
#Otra forma de validar el calculo es:

mae(test.data$preciom, train.output)
## [1] 131.705
#3. R_2 ajustado

summary(train.modelo1)$adj.r.squared
## [1] 0.6634085

Interpretación:

  1. La raíz de error cuadrado medio (RMSE) es uno de los dos indicadores de rendimiento principales para un modelo predictivo de regresión. Mide la diferencia media entre los valores previstos por el modelo predictivo y los valores reales. Con el resultado obtenido, podemos indicar que el modelo carece de precisión en las predicciones.

  2. El error absoluto medio (MAE) es el promedio de la diferencia absoluta entre el valor observado y los valores predichos. En linea con el resultado previo este modelo no estaría produciendo predicciones precisas.

  3. Una definición sencilla del \(R^{2}\) es: el porcentaje de la variación en la variable de respuesta que es explicado por un modelo. Así las cosas, el actual modelo explica en un 60,59\(\%\) la variación en el precio del metro cuadrado en casas de la zona norte de Cali. Este valor es superior al modelo contruido inicialmente, lo que indicaría que este modelo construído con la muestra de entrenamiento es mejor que el modelo construído con la muestra completa.