Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz para apartamento de estrato 4 con área construida menor a 200m2 la inmobiliaria A & C requiere apoyo de un científico de datos en la construcción de un modelo que lo oriente sobre los precios de inmuebles.
Con este propósito el equipo de asesores a diseñado los siguientes pasos para obtener un modelo y así poder a futuro determinar los precios de los inmuebles a negociar.
# Selección de vivienda tipo apartamento
Data_vivienda <- Data_vivienda %>%
filter(tipo == "Apartamento")
# Vista global de las variables
glimpse(Data_vivienda)
## Rows: 1,363
## Columns: 5
## $ zona <fct> Zona Norte, Zona Norte, Zona Sur, Zona Norte, Zona Norte, Zo…
## $ estrato <fct> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, …
## $ preciom <dbl> 220, 320, 290, 220, 220, 162, 225, 370, 155, 240, 260, 130, …
## $ areaconst <dbl> 52, 108, 96, 82, 75, 60, 84, 117, 60, 75, 76, 55, 62, 60, 60…
## $ tipo <fct> Apartamento, Apartamento, Apartamento, Apartamento, Apartame…
Observamos que la data cuenta con una dimensión de 5 variables y 1.363 viviendas. Para las variables tenemos las siguientes:
Adicionalmente, notamos variables variables categóricas que tienen el formato adecuado.
# Enfoque detallado de la data
skimr::skim(Data_vivienda)
| Name | Data_vivienda |
| Number of rows | 1363 |
| Number of columns | 5 |
| _______________________ | |
| Column type frequency: | |
| factor | 3 |
| numeric | 2 |
| ________________________ | |
| Group variables | None |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| zona | 0 | 1 | FALSE | 5 | Zon: 1065, Zon: 237, Zon: 52, Zon: 7 |
| estrato | 0 | 1 | FALSE | 1 | 4: 1363, 3: 0, 5: 0, 6: 0 |
| tipo | 0 | 1 | FALSE | 1 | Apa: 1363, Cas: 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| preciom | 0 | 1 | 202.44 | 65.29 | 78 | 153.5 | 185 | 240 | 645 | ▇▆▁▁▁ |
| areaconst | 0 | 1 | 75.48 | 22.56 | 40 | 60.0 | 70 | 84 | 200 | ▇▅▁▁▁ |
Para las variables categóricas encontramos que zona contiene 5 valores únicos, un solo estrato y dos tipos de vivienda que corresponden a casa y apartamento. Para las variables númericas tenemos, precio de la vivienda con una media de 202 millones de pesos COP y área construida con una media de 75.47 metros cuadrados.
No se presentan valores faltantes
summary(Data_vivienda)
## zona estrato preciom areaconst
## Zona Centro : 7 3: 0 Min. : 78.0 Min. : 40.00
## Zona Norte : 237 4:1363 1st Qu.:153.5 1st Qu.: 60.00
## Zona Oeste : 52 5: 0 Median :185.0 Median : 70.00
## Zona Oriente: 2 6: 0 Mean :202.4 Mean : 75.48
## Zona Sur :1065 3rd Qu.:240.0 3rd Qu.: 84.00
## Max. :645.0 Max. :200.00
## tipo
## Apartamento:1363
## Casa : 0
##
##
##
##
# Histograma densidad precio de la vivienda
preciom_hist <- Data_vivienda %>%
ggplot(aes(preciom)) +
geom_histogram(aes(y = ..density..),fill = "yellow", color = "red") +
geom_density(kernel = "gaussian") +
labs(title = "",
x = "Precio en millones (COP)",
y = "Densidad")
preciom_hist
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Observamos la distribución de los precios una asimetría o sesgo positiva (sesgo = 1.442664), es decir, muchos obtuvieron resultados bajos y unos pocos resultados altos. Por ende, la mejor forma de establecer su valor de centralidad es la mediana debido a que es menos sensible a valores extremos. Los precios presentan un rango entre los $78 y $645 millones de pesos, con un precio mediano de $185 millones de pesos y picos de frecuencia entre $230 y $300 millones de pesos.
media <- mean(Data_vivienda$preciom)
mediana <- median(Data_vivienda$preciom)
desviacion <- sd(Data_vivienda$preciom)
simetria <- skewness(Data_vivienda$preciom)
data.frame(media, mediana, desviacion, simetria)
## media mediana desviacion simetria
## 1 202.4373 185 65.29049 1.442664
# Histograma densidad metro cuadrado
areaconst_hist <- Data_vivienda %>%
ggplot(aes(areaconst)) +
geom_histogram(aes(y = ..density..),fill = "yellow", color = "red") +
geom_density(kernel = "gaussian") +
labs(title = "",
x = "m2",
y = "Densidad")
areaconst_hist
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Observamos la distribución del área construida (m2) una asimetría o sesgo positiva (sesgo = 2.082196), es decir, muchos obtuvieron resultados bajos y unos pocos resultados altos. Por ende, la mejor forma de establecer su valor de centralidad es la mediana debido a que es menos sensible a valores extremos. El área presenta un rango entre los 40 y 200 metros cuadrados, con un área mediana de 70 m2.
media <- mean(Data_vivienda$areaconst)
mediana <- median(Data_vivienda$areaconst)
desviacion <- sd(Data_vivienda$areaconst)
simetria <- skewness(Data_vivienda$areaconst)
data.frame(media, mediana, desviacion, simetria)
## media mediana desviacion simetria
## 1 75.47836 70 22.56461 2.082196
# Identificación de valores atípicos
iqr_precio <- quantile(Data_vivienda$preciom, 0.75) - quantile(Data_vivienda$preciom, 0.25)
umbral_inferior_precio <- quantile(Data_vivienda$preciom, 0.25) - 1.5 * iqr_precio
umbral_superior_precio <- quantile(Data_vivienda$preciom, 0.75) + 1.5 * iqr_precio
outliers_precio <- Data_vivienda %>%
filter(preciom < umbral_inferior_precio | preciom > umbral_superior_precio)
# Boxplot para precio de la vivienda
ggplot(Data_vivienda, aes(x = "", y = preciom)) +
geom_boxplot(fill = "lightblue", color = "black") +
geom_point(data = outliers_precio, aes(x = 1, y = preciom)) +
geom_hline(yintercept = c(umbral_inferior_precio, umbral_superior_precio),
linetype = "dashed", color = "red", size = 1) +
labs(title = "Valores Atípicos",
x = "",
y = "Precio en millones (COP)") +
theme_minimal() +
theme(axis.text.x = element_blank(),
axis.ticks.x = element_blank())
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Se observan valores inusuales en el precio de las viviendas que comienzan a partir de los 390 millones de pesos COP. Estos datos atípicos no serán eliminados en el análisis.
ggplot(Data_vivienda, aes(areaconst, preciom)) +
geom_point()
# Coeficiente de correlación Pearson
cor.test(Data_vivienda$areaconst, Data_vivienda$preciom, method = "pearson")
##
## Pearson's product-moment correlation
##
## data: Data_vivienda$areaconst and Data_vivienda$preciom
## t = 41.595, df = 1361, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7237938 0.7706237
## sample estimates:
## cor
## 0.7481389
# Coeficiente de correlación Spearman
cor.test(Data_vivienda$areaconst, Data_vivienda$preciom, method = "spearman")
## Warning in cor.test.default(Data_vivienda$areaconst, Data_vivienda$preciom, :
## Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: Data_vivienda$areaconst and Data_vivienda$preciom
## S = 93987139, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.7772938
A pesar de que nuestras variables numéricas precio de la vivienda en millones COP y área construida en metros cuadrados no se comportan como una normal, la forma mas adecuada de evaluar su correlación es mediante el método de pearson debido la posible relación lineal que se observa en la gráfica de correlación. Nos arroja un resultado de 0.7481389 que significa una correlación positiva débil.
Teniendo en cuenta la ecuación de la recta de regresión:
Donde:
Y = Data_vivienda$preciom
X = Data_vivienda$areaconst
summary(LRS <- lm(Y ~ X))
##
## Call:
## lm(formula = Y ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -225.404 -23.902 -4.754 25.763 209.021
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 39.04679 4.09977 9.524 <2e-16 ***
## X 2.16473 0.05204 41.595 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 43.34 on 1361 degrees of freedom
## Multiple R-squared: 0.5597, Adjusted R-squared: 0.5594
## F-statistic: 1730 on 1 and 1361 DF, p-value: < 2.2e-16
Con respecto a los coeficientes del modelo de regresión, la ecuación de la recta es Y = 39.04679 + 2.16473 * X. β0 39.04679 es el valor estimado del precio de la vivienda cuando el área construida (m2) es igual a 0, y β1 2.16473 representa el cambio estimado en el precio de la vivienda por cada unidad de cambio en el área construida (m2). Al no tener sentido un precio de vivienda (39.04679) con 0 área construida, realizamos la estimación de la recta con el valor centrado del área construida (m2).
# Valor centrado de área construida (m2)
Data_vivienda$areaconst_C <- Data_vivienda$areaconst - mean(Data_vivienda$areaconst)
# LRS con variable independiente centrada
summary(LRS2 <- lm(Y ~ Xc))
##
## Call:
## lm(formula = Y ~ Xc)
##
## Residuals:
## Min 1Q Median 3Q Max
## -225.404 -23.902 -4.754 25.763 209.021
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 202.43727 1.17390 172.45 <2e-16 ***
## Xc 2.16473 0.05204 41.59 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 43.34 on 1361 degrees of freedom
## Multiple R-squared: 0.5597, Adjusted R-squared: 0.5594
## F-statistic: 1730 on 1 and 1361 DF, p-value: < 2.2e-16
Con respecto a los coeficientes del modelo de regresión, la ecuación de la recta es Y = 202.43727 + 2.16473 * X. β0 202.43727 es el valor estimado del precio de la vivienda cuando el área construida (m2) es igual a su media, y β1 2.16473 representa el cambio estimado en el precio de la vivienda por cada unidad de cambio en el área construida (m2).
La medida de bondad de ajuste es de 0.5597, lo que significa que aproximadamente el 55.97% de la variabilidad del precio de las viviendas puede ser explicada por el área construida (m2) en el modelo.
Los valores de significancia estadística de los coeficientes son muy pequeños para β0(<2e-16) y β1(<2e-16), lo que indica que los coeficientes son estadadísticamente significativos.
modelo1 <- LRS
summary(confint(modelo1))
## 2.5 % 97.5 %
## Min. : 2.063 Min. : 2.267
## 1st Qu.: 9.298 1st Qu.:13.472
## Median :16.533 Median :24.678
## Mean :16.533 Mean :24.678
## 3rd Qu.:23.769 3rd Qu.:35.884
## Max. :31.004 Max. :47.089
Con un nivel de confianza del 95%, el valor del coeficiente β1 representa la relación entre el precio de la vivienda y el área construida (m2), el cual se encuentra dentro del intervalo [2.06264, 2.266826]:
La medida de bondad de ajuste es de 0.5597, lo que significa que aproximadamente el 55.97% de la variabilidad del precio de las viviendas puede ser explicada por el área construida (m2) en el modelo.
predict(modelo1, data.frame(X = 110), interval = "confidence", level = 0.95)
## fit lwr upr
## 1 277.1674 272.9573 281.3775
En base al modelo construido, el precio estimado de las vivienda de tipo apartamento con un área construida de 110 metros cuadrados es de 277.1674 millones COP. Presenta un rango entre 272.9573 y 281.3775 millones COP con un nivel de confianza del 95%. Para determinar si es una buena oferta se deben analizar otros factores determinantes como antiguedad del apartamento, estado físico del apartamento, costos de administrativos mensuales fijos (administración) y entre muchos otros que tendrían impacto en la decisión tanto económicos como de clasificación (atractivo / no atractivo).
print(Normalidad_mod1 <- shapiro.test(modelo1$residuals))
##
## Shapiro-Wilk normality test
##
## data: modelo1$residuals
## W = 0.96486, p-value < 2.2e-16
qqnorm(modelo1$residuals, pch = 20, col = "blue")
qqline(modelo1$residuals, col = "red")
text(2, 0.6, paste("W = ", round(Normalidad_mod1$statistic, 4), "\n", "p-value = ", round(Normalidad_mod1$p.value, 4)), adj = c(0, 1))
El valor p (p-value < 2.2e-16) es muy pequeño y menor al nivel de significancia (0,05) por lo que se rechaza la hipótesis nula (H0 = la distribución es normal) a favor de la hipótesis alternativa (H1 = La distribución no es normal). Evidenciamos el resultado en la gráfica de qq-normalidad donde en los extremos los datos no se ajustan a la recta.
print(homocedasticidad_mod1 <- lmtest::bptest(modelo1))
##
## studentized Breusch-Pagan test
##
## data: modelo1
## BP = 292.99, df = 1, p-value < 2.2e-16
plot(modelo1$residuals, type = "bp")
## Warning in plot.xy(xy, type, ...): plot type 'bp' will be truncated to first
## character
El valor p (p-value < 2.2e-16) es muy pequeño y menor al nivel de significancia (0,05) por lo que se rechaza la hipótesis nula (H0 = los errores tienen varianza constante) a favor de la hipótesis alternativa (H1 = los errores no tinen varianza constante). Evidenciamos en la gráfica que hay valores muy por encima y por debajo de 0 en el eje y. No cumple el criterio de varianza constante de los errores, por lo tanto, es heterocedastico.
print(autocorrelacion_mod1 <- lmtest::dwtest(modelo1))
##
## Durbin-Watson test
##
## data: modelo1
## DW = 1.443, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
La prueba de Durbin-Watson presenta evidencia de presencia de autocorrelación positiva en los residuos del modelo, es decir, los residuos estan relacionados. El valor p (p-value < 2.2e-16) es muy pequeño pero mayor a 0, por lo que se rechaza la hipótesis nula (H0 = los errores son independientes) a favor de la hipótesis alternativa (H1 = los errrores no son independientes). El resultado DW = 1.443 al ser menor que 2, evidencia autocorrelación positiva, en caso opuesto sería negativa.
par(mfrow = c(2,2))
plot(modelo1)
Realizamos la transformación del modelo 1 a Yi=β0+β1log(Xi)+εi (Lin-Log)
summary(modelo2 <- lm(Y ~ log(X)))
##
## Call:
## lm(formula = Y ~ log(X))
##
## Residuals:
## Min 1Q Median 3Q Max
## -196.252 -21.338 -1.579 22.096 261.436
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -635.532 19.092 -33.29 <2e-16 ***
## log(X) 195.419 4.445 43.97 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 41.98 on 1361 degrees of freedom
## Multiple R-squared: 0.5868, Adjusted R-squared: 0.5865
## F-statistic: 1933 on 1 and 1361 DF, p-value: < 2.2e-16
# Test normalidad, homocedasticidad y autocorrelación
Normalidad_mod2 <- shapiro.test(modelo2$residuals)
homocedasticidad_mod2 <- lmtest::bptest(modelo2)
autocorrelacion_mod2 <- lmtest::dwtest(modelo2)
##
## Shapiro-Wilk normality test
##
## data: modelo2$residuals
## W = 0.95826, p-value < 2.2e-16
##
## studentized Breusch-Pagan test
##
## data: modelo2
## BP = 214.66, df = 1, p-value < 2.2e-16
##
## Durbin-Watson test
##
## data: modelo2
## DW = 1.4775, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Realizamos la transformación del modelo 1 a log(Yi)=β0+β1Xi+εi (Log-Lin)
summary(modelo3 <- lm(log(Y) ~ X))
##
## Call:
## lm(formula = log(Y) ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.98857 -0.13188 -0.01249 0.15595 0.66387
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.5512586 0.0194001 234.60 <2e-16 ***
## X 0.0094530 0.0002463 38.38 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2051 on 1361 degrees of freedom
## Multiple R-squared: 0.5198, Adjusted R-squared: 0.5195
## F-statistic: 1473 on 1 and 1361 DF, p-value: < 2.2e-16
# Test normalidad, homocedasticidad y autocorrelación
Normalidad_mod3 <- shapiro.test(modelo3$residuals)
homocedasticidad_mod3 <- lmtest::bptest(modelo3)
autocorrelacion_mod3 <- lmtest::dwtest(modelo3)
##
## Shapiro-Wilk normality test
##
## data: modelo3$residuals
## W = 0.99051, p-value = 1.035e-07
##
## studentized Breusch-Pagan test
##
## data: modelo3
## BP = 150.38, df = 1, p-value < 2.2e-16
##
## Durbin-Watson test
##
## data: modelo3
## DW = 1.3187, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Realizamos la transformación del modelo 1 a log(Yi)=β0+β1log(Xi)+εi (Log-Log)
summary(modelo4 <- lm(log(Y) ~ log(X)))
##
## Call:
## lm(formula = log(Y) ~ log(X))
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.8890 -0.1119 0.0028 0.1343 0.7538
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.48373 0.08703 17.05 <2e-16 ***
## log(X) 0.88175 0.02026 43.52 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1914 on 1361 degrees of freedom
## Multiple R-squared: 0.5819, Adjusted R-squared: 0.5816
## F-statistic: 1894 on 1 and 1361 DF, p-value: < 2.2e-16
# Test normalidad, homocedasticidad y autocorrelación
Normalidad_mod4 <- shapiro.test(modelo4$residuals)
homocedasticidad_mod4 <- lmtest::bptest(modelo4)
autocorrelacion_mod4 <- lmtest::dwtest(modelo4)
##
## Shapiro-Wilk normality test
##
## data: modelo4$residuals
## W = 0.98958, p-value = 2.857e-08
##
## studentized Breusch-Pagan test
##
## data: modelo4
## BP = 92.877, df = 1, p-value < 2.2e-16
##
## Durbin-Watson test
##
## data: modelo4
## DW = 1.3214, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Se realiza la transformación Box-Cox
# Encontrar lambda
modelo5 <- boxcox(modelo1, lambda = -3:3)
# Valor lambda
print(lambda <- modelo5$x[which.max(modelo5$y)])
## [1] -0.03030303
modelo5_trans <- lm(((Y^lambda-1)/lambda)~X)
##
## Call:
## lm(formula = ((Y^lambda - 1)/lambda) ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.83962 -0.11213 -0.01031 0.13361 0.56337
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.2590869 0.0165365 257.56 <2e-16 ***
## X 0.0080294 0.0002099 38.25 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1748 on 1361 degrees of freedom
## Multiple R-squared: 0.5181, Adjusted R-squared: 0.5177
## F-statistic: 1463 on 1 and 1361 DF, p-value: < 2.2e-16
# Test normalidad, homocedasticidad y autocorrelación
Normalidad_mod5 <- shapiro.test(modelo5_trans$residuals)
homocedasticidad_mod5 <- lmtest::bptest(modelo5_trans)
autocorrelacion_mod5 <- lmtest::dwtest(modelo5_trans)
##
## Shapiro-Wilk normality test
##
## data: modelo5_trans$residuals
## W = 0.9904, p-value = 8.828e-08
##
## studentized Breusch-Pagan test
##
## data: modelo5_trans
## BP = 145.72, df = 1, p-value < 2.2e-16
##
## Durbin-Watson test
##
## data: modelo5_trans
## DW = 1.3166, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
summary(modelo1)
##
## Call:
## lm(formula = Y ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -225.404 -23.902 -4.754 25.763 209.021
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 39.04679 4.09977 9.524 <2e-16 ***
## X 2.16473 0.05204 41.595 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 43.34 on 1361 degrees of freedom
## Multiple R-squared: 0.5597, Adjusted R-squared: 0.5594
## F-statistic: 1730 on 1 and 1361 DF, p-value: < 2.2e-16
summary(modelo2)
##
## Call:
## lm(formula = Y ~ log(X))
##
## Residuals:
## Min 1Q Median 3Q Max
## -196.252 -21.338 -1.579 22.096 261.436
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -635.532 19.092 -33.29 <2e-16 ***
## log(X) 195.419 4.445 43.97 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 41.98 on 1361 degrees of freedom
## Multiple R-squared: 0.5868, Adjusted R-squared: 0.5865
## F-statistic: 1933 on 1 and 1361 DF, p-value: < 2.2e-16
summary(modelo3)
##
## Call:
## lm(formula = log(Y) ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.98857 -0.13188 -0.01249 0.15595 0.66387
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.5512586 0.0194001 234.60 <2e-16 ***
## X 0.0094530 0.0002463 38.38 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2051 on 1361 degrees of freedom
## Multiple R-squared: 0.5198, Adjusted R-squared: 0.5195
## F-statistic: 1473 on 1 and 1361 DF, p-value: < 2.2e-16
summary(modelo4)
##
## Call:
## lm(formula = log(Y) ~ log(X))
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.8890 -0.1119 0.0028 0.1343 0.7538
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.48373 0.08703 17.05 <2e-16 ***
## log(X) 0.88175 0.02026 43.52 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1914 on 1361 degrees of freedom
## Multiple R-squared: 0.5819, Adjusted R-squared: 0.5816
## F-statistic: 1894 on 1 and 1361 DF, p-value: < 2.2e-16
summary(modelo5_trans)
##
## Call:
## lm(formula = ((Y^lambda - 1)/lambda) ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.83962 -0.11213 -0.01031 0.13361 0.56337
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.2590869 0.0165365 257.56 <2e-16 ***
## X 0.0080294 0.0002099 38.25 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1748 on 1361 degrees of freedom
## Multiple R-squared: 0.5181, Adjusted R-squared: 0.5177
## F-statistic: 1463 on 1 and 1361 DF, p-value: < 2.2e-16
El modelo de regresión logarítmica (Lin-Log) ha demostrado ser el mejor ajuste para los datos, con un coeficiente de determinación (R-cuadrado) de 0.5868. Esto significa que el 58.68% de la variabilidad en la variable de respuesta (precio de la vivienda en millones COP) se puede explicar utilizando este modelo. Sin embargo, los test de normalidad, homocedasticidad y autocorrelación mostrados en el punto 8.1, nos indica que a pesar de ser el mejor modelo no se comporta como una normal, no es homocedastico (heterocedastico) y presenta autocorrelación.