Modelo Lineal Caso Inmobiliaria A&C

Wladimir Avila

2023-10-12

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.

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

Punto 1

Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados) - incluir gráficos e indicadores apropiados interpretados.


if (!require("devtools")) install.packages("devtools",repos = "http://cran.us.r-project.org")
#> Loading required package: devtools
#> Loading required package: usethis
if (!require("rmarkdown")) install.packages("rmarkdown")
#> Loading required package: rmarkdown
if (!require("ggplot2")) install.packages("ggplot2")
#> Loading required package: ggplot2
if (!require("dplyr")) install.packages("dplyr",repos = "http://cran.us.r-project.org")
#> Loading required package: dplyr
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
if (!require("ggcorrplot")) install.packages("ggcorrplot")
#> Loading required package: ggcorrplot
if (!require("olsrr")) install.packages("olsrr")
#> Loading required package: olsrr
#> 
#> Attaching package: 'olsrr'
#> The following object is masked from 'package:datasets':
#> 
#>     rivers
devtools::install_github("dgonxalex80/paqueteMETODOS",force = TRUE)
#> Downloading GitHub repo dgonxalex80/paqueteMETODOS@HEAD
#> 
#> ── R CMD build ─────────────────────────────────────────────────────────────────
#>   
   checking for file ‘/private/var/folders/vh/c65wsrm94x92d8rfk33vvpwr0000gn/T/RtmpgMxhxn/remotes5d3011d5eba3/dgonxalex80-paqueteMETODOS-9696ffd/DESCRIPTION’ ...
  
✔  checking for file ‘/private/var/folders/vh/c65wsrm94x92d8rfk33vvpwr0000gn/T/RtmpgMxhxn/remotes5d3011d5eba3/dgonxalex80-paqueteMETODOS-9696ffd/DESCRIPTION’
#> 
  
─  preparing ‘paqueteMETODOS’:
#> 
  
   checking DESCRIPTION meta-information ...
  
✔  checking DESCRIPTION meta-information
#> 
  
─  checking for LF line-endings in source and make files and shell scripts
#> 
  
─  checking for empty or unneeded directories
#> 
  
─  building ‘paqueteMETODOS_0.1.0.tar.gz’
#> 
  
   
#> 
library(paqueteMETODOS)
#> Loading required package: cubature
#> Loading required package: GGally
#> Registered S3 method overwritten by 'GGally':
#>   method from   
#>   +.gg   ggplot2
#> Loading required package: MASS
#> 
#> Attaching package: 'MASS'
#> The following object is masked from 'package:olsrr':
#> 
#>     cement
#> The following object is masked from 'package:dplyr':
#> 
#>     select
#> Loading required package: summarytools
#> Loading required package: psych
#> 
#> Attaching package: 'psych'
#> The following objects are masked from 'package:ggplot2':
#> 
#>     %+%, alpha
#> Loading required package: tidyverse
#> ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
#> ✔ forcats   1.0.0     ✔ stringr   1.5.0
#> ✔ lubridate 1.9.3     ✔ tibble    3.2.1
#> ✔ purrr     1.0.2     ✔ tidyr     1.3.0
#> ✔ readr     2.1.4     
#> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ psych::%+%()    masks ggplot2::%+%()
#> ✖ psych::alpha()  masks ggplot2::alpha()
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag()    masks stats::lag()
#> ✖ MASS::select()  masks dplyr::select()
#> ✖ tibble::view()  masks summarytools::view()
#> ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
data(vivienda4)
home<-vivienda4
summary(home)
#>            zona      estrato     preciom        areaconst     
#>  Zona Centro :   8   3:   0   Min.   : 78.0   Min.   : 40.00  
#>  Zona Norte  : 288   4:1706   1st Qu.:160.0   1st Qu.: 60.00  
#>  Zona Oeste  :  60   5:   0   Median :210.0   Median : 75.00  
#>  Zona Oriente:   6   6:   0   Mean   :225.4   Mean   : 87.63  
#>  Zona Sur    :1344            3rd Qu.:265.0   3rd Qu.: 98.00  
#>                               Max.   :760.0   Max.   :200.00  
#>           tipo     
#>  Apartamento:1363  
#>  Casa       : 343  
#>                    
#>                    
#>                    
#> 

El dataset provisto consta de un total de 1706 registros y para las variables analizadas en este estudio (preciom y areaconst) encontramos los siguientes datos:

library("psych")

# Filtrar solo las columnas numéricas
homeNumeric <- home %>%
  select_if(is.numeric)

homeNumeric <- subset(homeNumeric)

# Calcular las estadísticas por columna
describe(homeNumeric)
#>           vars    n   mean    sd median trimmed   mad min max range skew
#> preciom      1 1706 225.37 85.89    210  214.40 75.61  78 760   682 1.49
#> areaconst    2 1706  87.63 36.35     75   80.97 22.24  40 200   160 1.53
#>           kurtosis   se
#> preciom       3.57 2.08
#> areaconst     1.68 0.88

Frecuencias de Precios

priceCounter <- table(home$preciom)
priceDF <- data.frame(priceCounter)
paged_table(priceDF, options = NULL)
plotPrice <- ggplot(data = home, aes(x = preciom)) +
  geom_histogram(fill = "gray", bins = 20, color='gray50') +
  labs(title = "Histogram of 'preciom'",
       x = "Precio (millions)",
       y = "Frequency")

# Print the histogram
print(plotPrice)

Como se puede observar en el histograma, existe una mayor concentracion de predios que van desde los $120.000,000 hasta los $420,000,000

plotBoxPrice <- ggplot(data = home, aes(x=0, y=preciom)) +
  geom_boxplot() +
  labs(title = "Distribución de Precios ") +
  theme_minimal() +
  scale_fill_discrete(name = "Tipo de Propiedad")

print(plotBoxPrice)

Frecuencias de Area

areaCounter <- table(home$areaconst)
areaDF <- data.frame(areaCounter)
paged_table(areaDF, options = NULL)
plotArea <- ggplot(data = home, aes(x = areaconst)) +
  geom_histogram(fill = "gray", bins = 20, color='gray50') +
  labs(title = "Histogram of 'areaconst'",
       x = "Area (m)",
       y = "Frequency")

# Print the histogram
print(plotArea)

Del mismo modo se puede visualizar en el histograma anterior que existe un mayor numero de predios cuya area se encuentra entre los 60 metros y los 125 metros

plotBoxArea <- ggplot(data = home, aes(x=0, y=areaconst)) +
  geom_boxplot() +
  labs(title = "Distribución de Area ") +
  theme_minimal() 

print(plotBoxArea)

Punto 2

Realice un análisis exploratorio bivariado de datos, enfocado en la relación entre la variable respuesta (precio) en función de la variable predictora (area construida) - incluir gráficos e indicadores apropiados interpretados.

library(ggcorrplot)
par(mfrow = c(1, 2))
df <- subset(home, select = -c(zona, estrato, tipo))
ggcorrplot(cor(df), method = "circle")

Analisis de normalidad

qqnorm(home$preciom, main = "preciom", col = "gray")
qqline(home$preciom)

qqnorm(home$areaconst, main = "areaconst", col = "gray50")
qqline(home$areaconst)

Ambas graficas anteriores muestran que las dos variables analizadas en este estudio (areaconst, preciom) no tienen una distribucion normal, sin embargo al contrastar ambas variables encontramos que existe una correlacion del 76,3% y aqunque se podria decir que ambas variables tienen una asociación alta, esto puede deberse a varios aspectos los cuales seran evaluados mas adelante.

ggpairs(homeNumeric, title="correlación") 

# Representación gráfica

hist(homeNumeric$preciom, breaks = 5, main = "", xlab = "Precio", border = "gray10")

hist(homeNumeric$areaconst, breaks = 5, main = "", xlab = "Area",
     border = "gray50")

# Test de hipótesis para el análisis de normalidad
shapiro.test(homeNumeric$preciom)
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  homeNumeric$preciom
#> W = 0.8896, p-value < 2.2e-16

shapiro.test(homeNumeric$areaconst)
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  homeNumeric$areaconst
#> W = 0.8168, p-value < 2.2e-16

Punto 3

Estime el modelo de regresión lineal simple entre precio=f(area)+ε . Interprete los coeficientes del modelo β0, β1 en caso de ser correcto.

linealModel=lm(preciom  ~  areaconst, data=homeNumeric)
summary(linealModel)
#> 
#> Call:
#> lm(formula = preciom ~ areaconst, data = homeNumeric)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -195.86  -31.95   -8.95   27.87  431.17 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)   67.381      3.510   19.20   <2e-16 ***
#> areaconst      1.803      0.037   48.73   <2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 55.53 on 1704 degrees of freedom
#> Multiple R-squared:  0.5822, Adjusted R-squared:  0.5819 
#> F-statistic:  2374 on 1 and 1704 DF,  p-value: < 2.2e-16

La columna Estimate Std, corresponde a los valores de β0, β1 , para este caso 67,381 y 1,803 respectivamente

El p-value obtenido de < 2.2e-16 en el F-estadistico significa que el valor p es mucho menor que 0,05, lo que significa que podemos rechazar la hipótesis nula de que β = 0. Por lo tanto, existe una relación significativa entre las variables preciom y areaconst en el modelo de regresión lineal.

El modelo lineal generado sigue la ecuación valorPropiedad = 67,381 + 1.803 . Por cada unidad que se incrementa el número de metros, el valor de la propiedad aumenta en promedio 1.803 milones.


ggplot(data = homeNumeric, mapping = aes(x = preciom, y = areaconst)) +
  geom_point(color = "gray50", size = 1) +
  labs(title  =  'Precio ~ area', x  =  'precio en millones' , y = 'area en metros') +
  geom_smooth(method = "lm", se = FALSE, color = "black") +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5))
#> `geom_smooth()` using formula = 'y ~ x'

Punto 4

Construir un intervalo de confianza (95%) para el coeficiente β1, interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipótesis t.

confint(linealModel)
#>                 2.5 %    97.5 %
#> (Intercept) 60.496208 74.265055
#> areaconst    1.730404  1.875547

El intervalo de confianza solicitado para β1 esta entre 1.73 y 1.87, es decir por cada metro construido adicional el valor del predio aumenta entre 1,7 millones y 1,8 millones

Punto 5

Calcule e interprete el indicador de bondad R2.

Aplicando un modelo de regresion lineal sobre ambas variables encontramos un R cuadrado de 0,5822 lo que indica que el modelo no es fiable puesto que este valor es muy lejano a 1, en otras palabras este modelo con estos datos pueden explicar el 58.22% de los datos que existen en el dataset homeNumeric

Punto 6

¿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?.

Este estudio no esta diferenciando por tipo de propiedad (casa o apartamento), sin embargo con los datos estudiados hasta este momento, precio y area podemos concluir lo siguiente:

df110 <- data.frame(areaconst= 110)
predict (linealModel, df110, interval = "confidence", level = 0.95)
#>        fit      lwr      upr
#> 1 265.7079 262.6113 268.8046

Un predio de 110 metros oscila entre un valor de $262 millones y un precio maximo de $265 millones siendo asi el precio de $265 millones el valor estimado con un intervalo de confianza del 95%

Punto 7

Realice la validación de los supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos. Utilice las pruebas de hipótesis para la validación de supuestos y compare los resultados con lo observado en los gráficos asociados.

Tal como muestra el diagrama de dispersión generado con patrón cónico. Esto debe de tenerse en cuenta si se utiliza Pearson puesto que viola una de sus condiciones.

ggplot(data = home, aes(x = preciom, y = areaconst)) + 
  geom_point(colour = "red4") +
    geom_segment(aes(x = 75, y = 20, xend = 750, yend = 200),linetype="dashed") +
    geom_segment(aes(x = 75, y = 50, xend = 300, yend = 200),linetype="dashed") +
  ggtitle("Diagrama de dispersión") +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5))

Una forma cónica es un claro indicativo de falta de homocedasticidad. En algunos libros se menciona el test de Goldfeld-Quandt o el de Breusch-Pagan como test de hipótesis para la homocedasticidad en correlación y regresión.

cor(x = home$areaconst, y = home$preciom, method = "pearson")
#> [1] 0.7630166

Como ya vimos la correlacion entre ambas variables es del 0,763 sin embargo esto se puede mejorar realizando transformaciones de los datos


plot(linealModel)

fligner.test(areaconst ~ preciom,home)
#> 
#>  Fligner-Killeen test of homogeneity of variances
#> 
#> data:  areaconst by preciom
#> Fligner-Killeen:med chi-squared = 579.74, df = 181, p-value < 2.2e-16
anova <- aov(homeNumeric$areaconst ~ homeNumeric$preciom)
summary(anova)
#>                       Df  Sum Sq Mean Sq F value Pr(>F)    
#> homeNumeric$preciom    1 1311347 1311347    2374 <2e-16 ***
#> Residuals           1704  941075     552                   
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(anova)

etaSquare <- 1311347/(1311347 + 941075)
etaSquare
#> [1] 0.5821942

El Eta cuadrado de 0,58 nos muestra que la asociacion entre precio y area es media

Dado el estudio anterior se concluye que existe evidencia significativa que falta homocedasticidad en los datos

Punto 8

De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.

cor(home$preciom,home$areaconst)
#> [1] 0.7630166

cor( log10(home$preciom), log10(home$areaconst))
#> [1] 0.7991767

cor(x = home$areaconst, y = log10(home$preciom), method = "pearson")
#> [1] 0.7555735

cor(x = home$areaconst, y = log10(home$preciom), method = "spearman")
#> [1] 0.8276617

cor(x = log10(home$areaconst), y = log10(home$preciom), method = "spearman")
#> [1] 0.8276617

Por lo anterior se procede a trabajar transformando ambas columnas preciom y areaconst aplicando un logaritmo base 10, puesto que muestran una correlación alta (>0.8).

# Representación gráfica Log(preciom)
#par(mfrow = c(1, 2))
hist(log10(home$preciom), breaks = 10, main = "", xlab = "Log10(preciom)",
     border = "blue")

qqnorm(log10(home$preciom), main = "", col = "blue")
qqline(log10(home$preciom))

shapiro.test(log10(home$preciom))
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  log10(home$preciom)
#> W = 0.97742, p-value = 9.53e-16

La trasformación logarítmica de la variable preciom consigue una distribución mas cercana a una de tipo normal.

# Representación gráfica Log(areaconst)

hist(log10(home$areaconst), breaks = 10, main = "", xlab = "Log10(areaconst)",
     border = "blue")

qqnorm(log10(home$areaconst), main = "", col = "blue")
qqline(log10(home$areaconst))

shapiro.test(log10(home$areaconst))
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  log10(home$areaconst)
#> W = 0.92173, p-value < 2.2e-16
LoglinealModel=lm(log10(preciom)  ~  log10(areaconst), data=home)
summary(LoglinealModel)
#> 
#> Call:
#> lm(formula = log10(preciom) ~ log10(areaconst), data = home)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.37114 -0.05829 -0.00324  0.05992  0.47818 
#> 
#> Coefficients:
#>                  Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)       0.83337    0.02728   30.55   <2e-16 ***
#> log10(areaconst)  0.78022    0.01422   54.88   <2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.09047 on 1704 degrees of freedom
#> Multiple R-squared:  0.6387, Adjusted R-squared:  0.6385 
#> F-statistic:  3012 on 1 and 1704 DF,  p-value: < 2.2e-16

Aplicando un modelo de regresion lineal sobre el nuevo modelo ya transformado encontramos un R cuadrado de 0,6385 lo que indica que el modelo mejora y es un poco mas fiable puesto que este valor es se acerca mas a 1, en otras palabras este modelo con estos datos pueden explicar el 63,8% de los datos que existen en el dataset homeNumeric con ambas variables transformadas

Punto 9

De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.

plot(LoglinealModel)

Al realizar la comparacion de los dos modelos linealModel y LoglinealModel vemos que en el grafico QQ Residuals mas puntos estan sobre la recta

ols_plot_cooksd_bar(linealModel)

ols_plot_cooksd_bar(LoglinealModel)

En la distancia Cook, se encuentra que mejora la diferencia de los betas respecto a cada observación en el modelo ajustado LoglinealModel sobre el modelo inicial linealModel, como se puede evidenciar en las graficas en la escala de magnitud del eje Y

t.test(x = home$preciom, y = log10(home$preciom), alternative = "two.sided",
       mu = 0, paired = TRUE, conf.level = 0.95)
#> 
#>  Paired t-test
#> 
#> data:  home$preciom and log10(home$preciom)
#> t = 107.45, df = 1705, p-value < 2.2e-16
#> alternative hypothesis: true mean difference is not equal to 0
#> 95 percent confidence interval:
#>  218.9775 227.1204
#> sample estimates:
#> mean difference 
#>        223.0489
t.test(x = home$areaconst, y = log10(home$areaconst), alternative = "two.sided",
       mu = 0, paired = TRUE, conf.level = 0.95)
#> 
#>  Paired t-test
#> 
#> data:  home$areaconst and log10(home$areaconst)
#> t = 97.815, df = 1705, p-value < 2.2e-16
#> alternative hypothesis: true mean difference is not equal to 0
#> 95 percent confidence interval:
#>  83.99817 87.43573
#> sample estimates:
#> mean difference 
#>        85.71695
predict (LoglinealModel, df110, interval = "confidence", level = 0.95)
#>        fit      lwr      upr
#> 1 2.426112 2.420513 2.431711

Dando respuesta al ejericio proopuest del costo de un inmueble de 110 metros con el nuevo modelo transformando los valores a logaritmicos el valor del inmueble oscila entre $263,33 y $270,21 millones, con valor sugerido de $266,75 millones en un intervalo de confianza del 95%

Punto 10

Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?

linealModelTipo=lm(log10(preciom)  ~  log10(areaconst)+tipo , data=home)
summary(linealModelTipo)
#> 
#> Call:
#> lm(formula = log10(preciom) ~ log10(areaconst) + tipo, data = home)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.37141 -0.05847 -0.00322  0.05984  0.47875 
#> 
#> Coefficients:
#>                    Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)       0.8311265  0.0349689  23.768   <2e-16 ***
#> log10(areaconst)  0.7814741  0.0187312  41.720   <2e-16 ***
#> tipoCasa         -0.0007399  0.0072006  -0.103    0.918    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.09049 on 1703 degrees of freedom
#> Multiple R-squared:  0.6387, Adjusted R-squared:  0.6383 
#> F-statistic:  1505 on 2 and 1703 DF,  p-value: < 2.2e-16
linealModelZona = lm(log10(preciom) ~  log10(areaconst) + zona , data=home)
summary(linealModelZona)
#> 
#> Call:
#> lm(formula = log10(preciom) ~ log10(areaconst) + zona, data = home)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.35932 -0.05868 -0.00495  0.06166  0.45985 
#> 
#> Coefficients:
#>                  Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)       0.79459    0.04310  18.436   <2e-16 ***
#> log10(areaconst)  0.78288    0.01425  54.921   <2e-16 ***
#> zonaZona Norte    0.02162    0.03241   0.667    0.505    
#> zonaZona Oeste    0.05199    0.03406   1.526    0.127    
#> zonaZona Oriente  0.01319    0.04878   0.270    0.787    
#> zonaZona Sur      0.03576    0.03207   1.115    0.265    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.09032 on 1700 degrees of freedom
#> Multiple R-squared:  0.6407, Adjusted R-squared:  0.6397 
#> F-statistic: 606.4 on 5 and 1700 DF,  p-value: < 2.2e-16

anova(LoglinealModel, linealModelTipo,linealModelZona)
#> Analysis of Variance Table
#> 
#> Model 1: log10(preciom) ~ log10(areaconst)
#> Model 2: log10(preciom) ~ log10(areaconst) + tipo
#> Model 3: log10(preciom) ~ log10(areaconst) + zona
#>   Res.Df    RSS Df Sum of Sq      F  Pr(>F)  
#> 1   1704 13.946                              
#> 2   1703 13.946  1  0.000086 0.0106 0.91801  
#> 3   1700 13.867  3  0.079020 3.2291 0.02166 *
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El resultado de los modelos probados con transformaciones y agregando mas variables se evidencia que el modelo 2 log10(preciom) ~ log10(areaconst) + tipo es el que logra una ligera mejor explicacion de los datos estudiados

Punto 11

Con los resultados obtenidos construya un informe para los directivos de la inmobiliaria, indicando el modelo apropiado y sus principales características. A este informe se deben añadir los anexos como evidencia de la realización de los pasos anteriores.

Se concluye que para el caso propuesto con los datos actualues no es posible generar una prediccion con un accuracy aceptable puesto que para todos los modelos realizados el porcentaje de error es mayor al 35%.

Este resultado se puede ver afectado por la existencia de outliers, o por que con los datos actuales no existe una clara coexistencia de variable dependiente e independiente que explique en un mayor porcentaje toda la poblacion estudiada.

Se realizaron varios modelos y en todos se pudo evidenciar que al realizar la primera transformacion a escala logaritmica este mejoro, pero sin embargo su % de explicabilidad a todo el juego de datos no supera el %63,85 por lo cual se desaconseja que se realicen predicciones de precios o negociaciones con los modelos propuestos.


plot(linealModel, 2, caption = "Modelo linealModel")

plot(LoglinealModel, 2, caption = "Modelo LoglinealModel")

plot(linealModelTipo, 2, caption = "Modelo linealModelTipo")

plot(linealModelZona, 2, caption = "Modelo linealModelZona")

Como vemos en las graficas el modelo LoglinealModel es el que mejor se comporta con un numero menor de variables a una distribucion normal, sin embargo no es recomendable realizar transacciones comerciales con este, puesto que el modelo solo describe un 64% de los datos, sin embargo para futuros estudios se recomienda que se agreguen mas datos, se agregue informacion mas detallada de la ubicacion, año de construccion, estado del inmueble, parqueaderos, esto a fin de encontrar posibles correlaciones y desarrollar un modelo predictivo con una mejor exactitud.

Este trabajo tiene licencia GNU-GPL