Actividad 2 Regresión Lineal Multiple
Realizar un análisis descriptivo de los datos a partir de la información recolectada por la compañia B&C y construir un modelo lineal multiple, donde la variable precio sea explicada en función del área construida, el estrato, el número de baños, el número de habitaciones y la zona, verificando el cumplimiento de los supuestos.
A continuación se muestra la base con los datos recolectados por la empresa.
La información se compone de 8322 registros y 13 variables que se describen a continuación:
id: Identificador único de la vivienda
zona: Zona de la ciudad
piso: Piso en la que está ubicada la vivienda
estrato: Estrato
preciom: Precio en millones de pesos
areaconst: Área construida en metros cuadrados
parqueaderos: Número de parqueaderos
banios: Número de baños
habitaciones: Número de habitaciones
tipo: Tipo de vivienda
barrio: Barrio
longitud: Coordenada de longitud
latitud: Coordenada de latitud
Para facilitar el manejo de la información se transformaron los nombres de las variables e igualmente se realizaron los cambios en los tipos de variables que lo requerian.
colnames(base) <- c("ID", "Zona", "Piso", "Estrato",
"Precio", "Area_Construida",
"Parqueaderos", "Baños", "Habitaciones",
"Tipo", "Barrio", "Longitud", "Latitud")
base$Estrato <- as.character(base$Estrato)
base$ID <- as.character(base$ID)
baseSe removieron de la base los registros que con NAs en ID porque no contenian información en las otras variables (3 casos).
Las otras variables con NAs se describen a continuación.
Las variables “Piso” y “Parqueaderos” son las únicas variables con NAs y con una cantidad significativa de registros.
Esta variable corresponde al piso en la que está ubicada la vivienda y realizando la exploración se identificaron registros con tipo casa en pisos altos, lo cual genera la duda sobre el entendimiento del campo por parte de las personas que realizan el ingreso de datos. El porcentaje de datos nulos de la variable supera el 25% por esta razón esta variable no será tenida en cuenta.
ggplot(base, aes(x = Estrato, y = Parqueaderos)) +
geom_boxplot(na.rm = TRUE) +
labs(title = "Gráfico de Caja para Parqueaderos y Estrato",
x = "Estrato",
y = "Parqueadero")ggplot(base, aes(x = Tipo, y = Parqueaderos)) +
geom_boxplot(na.rm = TRUE) +
labs(title = "Gráfico de Caja para Parqueaderos y Tipo",
x = "Tipo",
y = "Parqueadero")En la gráfica anterior se puede inferir que esta variable tiene correlación con las variables “Estrato” y “Tipo” debido a la diferencia entre las medianas. Por esta razón se decidió imputar la mediana en los datos no disponibles segun el grupo de “Estrato” y “Tipo”.
Por otro lado, tambien se evidencian valores altos en el número de parqueaderos clasificados por Estrato, que son valores atipicos muy marcados, por lo que se decidio cambiar tambien estos valores por la mediana de cada grupo.
base <- base %>%
group_by(Estrato, Tipo) %>%
mutate(
Parqueaderos = ifelse(is.na (Parqueaderos),
median(Parqueaderos, na.rm = TRUE),
Parqueaderos)
) %>%
ungroup()
base <- base %>%
mutate(Parqueaderos = ceiling(Parqueaderos))
reemplazar_outliers2 <- function(datos) {
datos %>%
group_by(Estrato) %>%
mutate(
Parqueaderos = ifelse(
Parqueaderos > mean(Parqueaderos,
na.rm = TRUE) + 2 * sd(Parqueaderos,
na.rm = TRUE),
mean(Parqueaderos, na.rm = TRUE),
Parqueaderos
)
)
}
base <- reemplazar_outliers2(base)
ggplot(base, aes(x = Estrato, y = Parqueaderos)) +
geom_boxplot(na.rm = TRUE) +
labs(title = "Gráfico de Caja para Parqueaderos y Estrato",
x = "Estrato",
y = "Parqueaderos")Está variable no cuenta con información de los estratos 1 y 2 que puede corresponder a preferencias de canal para publicación y gestión en la venta de vivienda. Esto puede generar distorciones en los analisis que se generen con la base. Sobre está variable no se realizaron ajustes.
habitaciones <- base %>%
group_by(Tipo, Estrato) %>%
summarize(
Mediana = median(Habitaciones),
Minimo = min(Habitaciones),
Maximo = max(Habitaciones)
)
habitacionesDebido a que no tiene sentido que no existan habitaciones en viviendas, se imputó la mediana de las habitaciones por tipo y estrato sin tener en cuenta los registros en cero.
Se evaluaron los registros con alto número de habitaciones, sin embargo se decidió mantener estos registros.
base <- base %>%
group_by(Estrato,Tipo) %>%
mutate(
Habitaciones = ifelse(Habitaciones == 0,
median(Habitaciones[Habitaciones != 0],
na.rm = TRUE),
Habitaciones)
) %>%
ungroup()
habitaciones <- base %>%
group_by(Tipo, Estrato) %>%
summarize(
Mediana = median(Habitaciones ),
Minimo = min(Habitaciones),
Maximo = max(Habitaciones)
)
habitacionesPor tratarse de una caracteristica de las propiedades, se verifico contra las las variables Tipo y Estrato.
tabla_baños <- base %>%
group_by(Tipo, Estrato) %>%
summarize(
Viviendas = length(ID),
Mediana = median(Baños),
Minimo = min(Baños),
Maximo = max(Baños)
)
tabla_bañosggplot(base, aes(x = Estrato, y = Baños)) +
geom_boxplot() +
labs(title = "Boxplot Numero de Baños", x = "Estratos", y = "# Baños")Dado que una propiedad para vivienda tenga 0 baños no es adecuado, se imputo la mediana de cada grupo para los registros que tienen este valor.
base <- base %>%
group_by(Estrato,Tipo) %>%
mutate(
Baños = ifelse(Baños == 0,
median(Baños[Baños != 0],
na.rm = TRUE),
Baños)
) %>%
ungroup()
base <- base %>%
mutate(Baños = ceiling(Baños))
tabla_baños2 <- base %>%
group_by(Tipo, Estrato) %>%
summarize(
Viviendas = length(ID),
Mediana = median(Baños),
Minimo = min(Baños),
Maximo = max(Baños)
)
tabla_baños2 Sin duda la variable con mayor dificultad para tratar fue Barrio, debido a que el registro no se encuentra estandarizado. Utilizando una base de datos del gobierno local, donde se catalogaban los barrios de Cali, se procedió a realizar una validación sobre los datos recolectados en esta variable.
Se transformaron ambas variables, cambiando a minuscula, sin tildes y sin caracteres especiales con el objetivo de homogenizar y abarcar alcanzar un mayor número de nombres de barrio validados. Del total de 8.215 registros con un total de 383 elementos de la base de B&C se validaron correctamente 171 (44.4%) equivalentes a 3.991 registros (48,6%), los restantes 212 nombres alguno no correspondían a nombres de barrio sino a sectores de la ciudad o nombres que popularmente se le asignan a espacios.
Debido al alto porcentaje de datos no validados se decidió no utlizar la variable Barrio en el analisis.
Se realizó un mapa con los puntos de las posiciones cardinales de donde se identifica por colores la variable Zona.
ggplot(base, aes(x = Longitud, y = Latitud, color = as.factor(Zona))) +
geom_point() +
labs(title = "Mapa de Cali - Colombia", x = "Longitud", y = "Latitud") +
theme_minimal() +
guides(color = guide_legend(title = "Zonas"))A pesar que se pueden observar algunos puntos mal etiquetados, se puede evidenciar una demarcación de las zonas y una validación visual entre estas dos variables.
Estas variables no son utilizadas en adelante en este informe, por lo que serán removidas de la base.
## ID Zona Estrato Precio
## Length:8319 Length:8319 Length:8319 Min. : 58.0
## Class :character Class :character Class :character 1st Qu.: 220.0
## Mode :character Mode :character Mode :character Median : 330.0
## Mean : 433.9
## 3rd Qu.: 540.0
## Max. :1999.0
## Area_Construida Parqueaderos Baños Habitaciones
## Min. : 30.0 Min. :1.00 Min. : 1.000 Min. : 1.000
## 1st Qu.: 80.0 1st Qu.:1.00 1st Qu.: 2.000 1st Qu.: 3.000
## Median : 123.0 Median :1.00 Median : 3.000 Median : 3.000
## Mean : 174.9 Mean :1.58 Mean : 3.129 Mean : 3.637
## 3rd Qu.: 229.0 3rd Qu.:2.00 3rd Qu.: 4.000 3rd Qu.: 4.000
## Max. :1745.0 Max. :5.00 Max. :10.000 Max. :10.000
## Tipo
## Length:8319
## Class :character
## Mode :character
##
##
##
Como primer paso se corrigió la escritura de las etiquetas.
base <- base %>%
mutate(Tipo = case_when(
Tipo == "casa"| Tipo == "CASA"~ "Casa",
Tipo == "APARTAMENTO" |Tipo == "apto" ~ "Apartamento",
TRUE ~ Tipo
))
conteo <- base %>%
group_by(Tipo) %>%
summarise(conteo = n())
conteoA continuación se realiza el filtro para que solo queden ofertas de apartamentos en la base.
Resumen de la base.
## ID Zona Estrato Precio
## Length:5100 Length:5100 Length:5100 Min. : 58.0
## Class :character Class :character Class :character 1st Qu.: 175.0
## Mode :character Mode :character Mode :character Median : 279.0
## Mean : 366.9
## 3rd Qu.: 430.0
## Max. :1950.0
## Area_Construida Parqueaderos Baños Habitaciones
## Min. : 35.0 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.: 68.0 1st Qu.:1.000 1st Qu.:2.000 1st Qu.:3.000
## Median : 90.0 Median :1.000 Median :2.000 Median :3.000
## Mean :112.8 Mean :1.467 Mean :2.624 Mean :2.984
## 3rd Qu.:130.0 3rd Qu.:2.000 3rd Qu.:3.000 3rd Qu.:3.000
## Max. :932.0 Max. :5.000 Max. :8.000 Max. :9.000
## Tipo
## Length:5100
## Class :character
## Mode :character
##
##
##
Para la adecuada realización de correlación entre el precio y las otras variables es importante conocer el tipos de de cada uno de ellos.
## tibble [5,100 × 9] (S3: tbl_df/tbl/data.frame)
## $ ID : chr [1:5100] "1212" "1724" "2326" "4386" ...
## $ Zona : chr [1:5100] "Zona Norte" "Zona Norte" "Zona Norte" "Zona Norte" ...
## $ Estrato : chr [1:5100] "5" "5" "4" "5" ...
## $ Precio : num [1:5100] 260 240 220 310 520 320 385 100 175 820 ...
## $ Area_Construida: num [1:5100] 90 87 52 137 98 108 103 49 80 377 ...
## $ Parqueaderos : num [1:5100] 1 1 2 2 2 2 2 1 1 1 ...
## $ Baños : num [1:5100] 2 3 2 3 2 3 2 1 2 4 ...
## $ Habitaciones : num [1:5100] 3 3 3 4 2 3 3 2 3 4 ...
## $ Tipo : chr [1:5100] "Apartamento" "Apartamento" "Apartamento" "Apartamento" ...
ggplot(aptos, aes(x = Area_Construida, y = Precio)) +
geom_point() +
geom_smooth(method = "lm", col = "blue") + # Agrega una línea de regresión lineal
labs(title = "Relación entre Precio y Área Construida",
x = "Área Construida",
y = "Precio")correlacion1 <- cor(aptos$Precio, aptos$Area_Construida, method = "pearson", use = "complete.obs")
correlacion1## [1] 0.8287437
Tanto el gráfico como el calculo de la correlación de Pearson muestran una fuerte correlación lineal positiva entre estas varaibles.
ggplot(aptos, aes(x = as.factor(Estrato), y = Precio)) +
geom_boxplot() +
labs(title = "Distribución de Precio por Estrato",
x = "Estrato",
y = "Precio")## Df Sum Sq Mean Sq F value Pr(>F)
## as.factor(Estrato) 3 219218319 73072773 1796 <2e-16 ***
## Residuals 5096 207302072 40679
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El p-valor de la prueba F indica una diferencia estadísticamente significativa entre los diferentes niveles de Estrato en relación con el Precio (p < 0.001). Esto significa que el Estrato es un factor importante que influye en el precio, y los diferentes estratos tienen medias de precios significativamente diferentes.
ggplot(aptos, aes(x = as.factor(Baños), y = Precio)) +
geom_boxplot() +
labs(title = "Distribución de Precio por Estrato",
x = "Baños",
y = "Precio")## Df Sum Sq Mean Sq F value Pr(>F)
## as.factor(Baños) 7 247264487 35323498 1003 <2e-16 ***
## Residuals 5092 179255905 35203
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El análisis de varianza (ANOVA) muestra resultados que indican una relación significativa entre el número de baños y el precio de los apartamentos, con un p-valor de la prueba F significativamente bajo.
ggplot(aptos, aes(x = as.factor(Habitaciones), y = Precio)) +
geom_boxplot() +
labs(title = "Distribución de Precio por Estrato",
x = "Habitaciones",
y = "Precio")## Df Sum Sq Mean Sq F value Pr(>F)
## as.factor(Habitaciones) 7 47389712 6769959 90.92 <2e-16 ***
## Residuals 5092 379130680 74456
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El análisis de varianza (ANOVA) muestra resultados que indican una relación significativa entre el número de habitaciones y el precio de los apartamentos, con un p-valor de la prueba F significativamente bajo.
ggplot(aptos, aes(x = as.factor(Zona), y = Precio)) +
geom_boxplot() +
labs(title = "Distribución de Precio por Estrato",
x = "Zona",
y = "Precio")## Df Sum Sq Mean Sq F value Pr(>F)
## as.factor(Zona) 4 118380819 29595205 489.3 <2e-16 ***
## Residuals 5095 308139573 60479
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El análisis de varianza (ANOVA) muestra resultados que indican una relación significativa entre la zona y el precio de los apartamentos, con un p-valor de la prueba F significativamente bajo.
Grafico con Plotly
fig <- plot_ly(data = aptos,
x = ~Baños,
y = ~Precio,
type = 'scatter',
mode = 'markers',
color = ~Zona,
size = ~Habitaciones,
hoverinfo = 'text',
text = ~paste('Zona:', Zona, '<br>Precio:', Precio, '<br>Habitaciones:', Habitaciones, '<br>Baños:', Baños)) %>%
layout(title = 'Precio vs. Baños y Habitaciones',
xaxis = list(title = 'Número de Baños'),
yaxis = list(title = 'Precio'))
# Mostrar el gráfico interactivo
figA continuación se estima un modelo de regresión lineal multiple del precio de la vivienda en función del área construida, el estrato, el número de cuartos, el número de parqueaderos y el número de baños.
modelo <- lm(Precio ~ Area_Construida + Estrato + Habitaciones + Parqueaderos + Baños, data = aptos)
# Resumen del modelo
summary(modelo)##
## Call:
## lm(formula = Precio ~ Area_Construida + Estrato + Habitaciones +
## Parqueaderos + Baños, data = aptos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1631.25 -47.59 0.55 42.30 990.11
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -69.02468 10.10315 -6.832 9.36e-12 ***
## Area_Construida 1.96671 0.04176 47.093 < 2e-16 ***
## Estrato4 22.56486 6.23961 3.616 0.000302 ***
## Estrato5 41.83459 6.33400 6.605 4.39e-11 ***
## Estrato6 159.95543 8.20702 19.490 < 2e-16 ***
## Habitaciones -37.45249 3.31793 -11.288 < 2e-16 ***
## Parqueaderos 97.15727 4.23068 22.965 < 2e-16 ***
## Baños 46.55437 2.97654 15.640 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 126.8 on 5092 degrees of freedom
## Multiple R-squared: 0.808, Adjusted R-squared: 0.8077
## F-statistic: 3061 on 7 and 5092 DF, p-value: < 2.2e-16
El intercepto representa el precio estimado que no se explica con las varianzas de las variables independientes. Por tener un valor negativo, tiene un signifiado dificil de explicar en lo practico ya que el área construida, el número de habitaciones, parqueaderos y baños no pueden ser cero en la realidad.
Por cada metro cuadrado adicional de área construida, manteniendo constantes las demás variables, el precio del apartamento aumenta en aproximadamente 1.97 millones. El coeficiente es altamente significativo (p < 2e-16).
El resultado es logico en la medida que la vivienda tenga mayor área, se espera que el precio de la misma sea mayor.
Estrato 4 (22.56486, p = 0.000302) Los apartamentos ubicados en el estrato 4 tienen, en promedio, un precio $22.56 millones más alto, manteniendo constantes las demás variables. Este coeficiente es estadísticamente significativo (p < 0.001).
Estrato 5 (41.83459, p = 4.39e-11) El estrato 5, el precio del apartamento es en promedio $41.83 millones más alto, manteniendo las demás variables constantes. También es altamente significativo.
Estrato 6 (159.95543, p < 2e-16) Los apartamentos en el estrato 6 son considerablemente más caros, con un precio promedio de $159.96 millones más alto, manteniendo las demás variables constantes. Este coeficiente es altamente significativo.
Los resultados son logicos en la medida que la vivienda tenga mayor estrato, se espera que el precio de la misma sea mayor.
Por cada habitación adicional, el precio disminuye en $37.45 millones, manteniendo constantes las demás variables. Este coeficiente es muy significativo, pero el signo negativo podría ser contraintuitivo.
Por cada parqueadero adicional, el precio del apartamento aumenta en $97.16 millones, manteniendo constantes las demás variables. Este coeficiente es muy significativo.
El resultado es logico en la medida que la vivienda tenga mayor número de parqueaderos se espera que el precio de la misma sea mayor. Sin embargo, se puede identificar un posible problema de multicolinealidad dado que una vivienda con varias habitaciones, muchos metros cuadrados construidos va a tener mayor cantidad de parqueaderos, por lo cual parte de la varianza explicada por estas variables independeintes puede estar sobre representada en el modelo.
Interpretación: Por cada baño adicional, el precio del apartamento aumenta en $46.55 millones, manteniendo constantes las demás variables. Este coeficiente es significativo.
El resultado es logico en la medida que la vivienda tenga mayor número de baños se espera que el precio de la misma sea mayor.
En resumen todos los coeficientes son estadísticamente significativos (p < 0.001), lo que indica que todas las variables incluidas en el modelo tienen un impacto significativo sobre el precio del apartamento.
La varianza de los errores en un modelo de regresión se estima como el error cuadrático medio residual (MSE). Esta es la suma de los cuadrados de los residuos dividida por los grados de libertad residuales. La varianza de los errores del modelo es 16,066.24.
R-cuadrado ajustado (0.8077): Indica que aproximadamente el 80.77% de la variabilidad en el precio se explica por las variables en el modelo.
Estadístico F : El valor F muy alto y el p-value asociado (< 2.2e-16) muestran que el modelo en su conjunto es altamente significativo.
Supuestos del modelo
Shapiro-Wilk normality test
data: resid(modelo) W = 0.84353, p-value < 2.2e-16
Un p-valor tan bajo indica que la hipótesis nula de que los residuos siguen una distribución normal se rechaza. Esto significa que los residuos del modelo no son normalmente distribuidos.
A partir de esta información se podrían explorar transformacines entre la varaible dependiente y las independientes.
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 1535.3, df = 7, p-value < 2.2e-16
# Gráfico de residuos vs. valores ajustados
plot(fitted(modelo), resid(modelo),
xlab = "Valores ajustados", ylab = "Residuos",
main = "Residuos vs. Valores ajustados")
abline(h = 0, col = "red")La prueba Breusch-Pagan indica que hay problemas de heterocedasticidad en el modelo. Esto significa que los residuos no tienen una varianza constante.
En un modelo de regresión lineal, la heterocedasticidad puede causar que los errores estándar de los parametros se estimen incorrectamente, lo que a su vez afecta la inferencia estadística.
De nuevo, las alternativas están en la transformación de las variables del modelo o realizar un modelo de regresión ponderada (WLS).
Generalmente la autocorrelación está asociada a las series de tiempo
y en este caso se trata de datos de corte por lo cual se presume no
existe este problema.
## lag Autocorrelation D-W Statistic p-value
## 1 0.1366995 1.726264 0
## Alternative hypothesis: rho != 0
EL estadistico de Durbin-Watson está cerca de 2, lo que es generalmente bueno. Sin embargo, el p-valor indica que la hipótesis nula de independencia de los residuos es rechazada.
Esto puede indicar que el modelo está omitiendo algún patrón en los datos o que las observaciones están correlacionadas temporal o espacialmente. Esto puede afectar la precisión de las estimaciones de los errores estándar y, por lo tanto, las inferencias.
Una alternativa es agregar variables al modelo.
## GVIF Df GVIF^(1/(2*Df))
## Area_Construida 2.659909 1 1.630923
## Estrato 2.249041 3 1.144633
## Habitaciones 1.467239 1 1.211297
## Parqueaderos 2.479927 1 1.574778
## Baños 3.160198 1 1.777694
No hay evidencia suficiente para decir que hay un problema serio de multicolinealidad en el modelo. El factor de Inflación de Varaianza (VIF) sugiere que las variables independientes no están excesivamente correlacionadas entre sí y no es necesario aplicar correcciones importantes.
El gráfico muestra que los residuos no están distribuidos aleatoriamente en torno a la línea horizontal en 0. Hay una mayor dispersión en los valores más altos, lo que podría ser indicativo de heterocedasticidad.
Esto indica que el modelo puede no esta capturando completamente la relación entre las variables independientes y el precio. El patrón también refuerza la posible heterocedasticidad que fue señalada por el Breusch-Pagan test.
De nuevo la alternativa para abordar este problema se centra en la transformaci[on de la variable dependiente y/o las independientes.
Modelo con una partición del 70% para entrenamiento y 30% para prueba.
# Establecer la semilla para reproducibilidad
set.seed(123)
# Crear un índice para dividir los datos (70% entrenamiento, 30% prueba)
trainIndex <- createDataPartition(aptos$Precio, p = 0.7, list = FALSE)
# Dividir los datos en conjunto de entrenamiento y prueba
trainData <- aptos[trainIndex, ]
testData <- aptos[-trainIndex, ]
head(trainData)Set para entrenamiento
Set para prueba
Modelo
Resultados del modelo.
modelo <- train(Precio ~ Area_Construida + Estrato + Habitaciones + Parqueaderos + Baños,
data = trainData,
method = "lm")
summary(modelo$finalModel)##
## Call:
## lm(formula = .outcome ~ ., data = dat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1577.17 -46.53 0.06 40.58 940.54
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -67.43755 12.09873 -5.574 2.68e-08 ***
## Area_Construida 1.90636 0.05011 38.042 < 2e-16 ***
## Estrato4 25.55291 7.45754 3.426 0.000618 ***
## Estrato5 44.67324 7.58795 5.887 4.29e-09 ***
## Estrato6 174.33552 9.81810 17.757 < 2e-16 ***
## Habitaciones -34.03783 3.94879 -8.620 < 2e-16 ***
## Parqueaderos 94.81195 5.04252 18.802 < 2e-16 ***
## Baños 43.16965 3.56851 12.097 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 127 on 3564 degrees of freedom
## Multiple R-squared: 0.8007, Adjusted R-squared: 0.8003
## F-statistic: 2046 on 7 and 3564 DF, p-value: < 2.2e-16
Significacancia alta de los coeficientes y un R² ajustado alto (80%)
Predicción sobre los datos de prueba.
predicciones <- predict(modelo, newdata = testData)
resultados <- data.frame(
Precio_Real = testData$Precio,
Predicción = predicciones,
Diferencia = testData$Precio - predicciones
)
resultadosCalculo del error cuadrático medio, el error absoluto medio y el R2
## [1] "MSE: 16070.3030506579"
## [1] "MAE: 76.8793380181511"
## [1] "R²: 0.823430982243084"
Error Cuadrático Medio (MSE): El valor obtenido, 16070.30, indica que el promedio de los errores al cuadrado entre las predicciones y los valores reales es relativamente alto. Comparado con el modelo original
El Error Absoluto Medio (MAE) es una medida más intuitiva, ya que representa el error promedio sin elevarlo al cuadrado, en millones de pesos (Precio). En este caso, el MAE es $76.88, lo que significa que, en promedio, las predicciones del modelo están desviadas de los valores reales en $76.88 unidades de precio. Este valor podría ser elevado.
Coeficiente de determinación (R²)): El R² (0.823) es una métrica que indica el porcentaje de la varianza en la variable dependiente (Precio) que es explicada por las variables independientes (Area_construida, Estrato, Habitaciones, Parqueaderos, y Baños). Este es un valor alto, indicando que el modelo tiene un ajuste fuerte y explica bastante bien la relación entre las variables predictoras y el precio.