Cargue de librerias

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'ggplot2' was built under R version 4.2.2
## Warning: package 'tidyr' was built under R version 4.2.2
## Warning: package 'readr' was built under R version 4.2.2
## Warning: package 'purrr' was built under R version 4.2.2
## Warning: package 'dplyr' was built under R version 4.2.2
## Warning: package 'stringr' was built under R version 4.2.2
## Warning: package 'forcats' was built under R version 4.2.2
## Warning: package 'lubridate' was built under R version 4.2.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.0     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.1     ✔ tibble    3.1.8
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(Hmisc)
## Warning: package 'Hmisc' was built under R version 4.2.2
## 
## Attaching package: 'Hmisc'
## 
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## 
## The following objects are masked from 'package:base':
## 
##     format.pval, units
library("dplyr")

Carge de datos

data = read.csv("C:/Users/franc/OneDrive/Escritorio/Maestria_Ciencia_Datos/Metodos_Estadisticos/ActividadMLM/datos_vivienda.csv")
summary(data)
##        X              id           zona                piso       
##  Min.   :   1   Min.   :   1   Length:8322        Min.   : 1.000  
##  1st Qu.:2081   1st Qu.:2080   Class :character   1st Qu.: 2.000  
##  Median :4162   Median :4160   Mode  :character   Median : 3.000  
##  Mean   :4162   Mean   :4160                      Mean   : 3.771  
##  3rd Qu.:6242   3rd Qu.:6240                      3rd Qu.: 5.000  
##  Max.   :8322   Max.   :8319                      Max.   :12.000  
##                 NA's   :3                         NA's   :2638    
##     estrato         preciom         areaconst       parqueaderos   
##  Min.   :3.000   Min.   :  58.0   Min.   :  30.0   Min.   : 1.000  
##  1st Qu.:4.000   1st Qu.: 220.0   1st Qu.:  80.0   1st Qu.: 1.000  
##  Median :5.000   Median : 330.0   Median : 123.0   Median : 2.000  
##  Mean   :4.634   Mean   : 433.9   Mean   : 174.9   Mean   : 1.835  
##  3rd Qu.:5.000   3rd Qu.: 540.0   3rd Qu.: 229.0   3rd Qu.: 2.000  
##  Max.   :6.000   Max.   :1999.0   Max.   :1745.0   Max.   :10.000  
##  NA's   :3       NA's   :2        NA's   :3        NA's   :1605    
##      banios        habitaciones        tipo              barrio         
##  Min.   : 0.000   Min.   : 0.000   Length:8322        Length:8322       
##  1st Qu.: 2.000   1st Qu.: 3.000   Class :character   Class :character  
##  Median : 3.000   Median : 3.000   Mode  :character   Mode  :character  
##  Mean   : 3.111   Mean   : 3.605                                        
##  3rd Qu.: 4.000   3rd Qu.: 4.000                                        
##  Max.   :10.000   Max.   :10.000                                        
##  NA's   :3        NA's   :3                                             
##     longitud         latitud     
##  Min.   :-76.59   Min.   :3.333  
##  1st Qu.:-76.54   1st Qu.:3.381  
##  Median :-76.53   Median :3.416  
##  Mean   :-76.53   Mean   :3.418  
##  3rd Qu.:-76.52   3rd Qu.:3.452  
##  Max.   :-76.46   Max.   :3.498  
##  NA's   :3        NA's   :3

Casteo de variables categóricas, se convierte la varibale “Estrato” de numerico a factor

data$estrato = as.factor(data$estrato)
data$piso = as.factor(data$piso)
str(data)
## 'data.frame':    8322 obs. of  14 variables:
##  $ X           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ id          : int  1147 1169 1350 5992 1212 1724 2326 4386 1209 1592 ...
##  $ zona        : chr  "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : Factor w/ 12 levels "1","2","3","4",..: NA NA NA 2 1 1 1 1 2 2 ...
##  $ estrato     : Factor w/ 4 levels "3","4","5","6": 1 1 1 2 3 3 2 3 3 3 ...
##  $ preciom     : int  250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num  70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: int  1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : int  3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: int  6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr  "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr  "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num  -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num  3.43 3.43 3.44 3.44 3.46 ...

Se procede a ver comportamiento en registros con NAs en cada una de las variables

describe(data)
## data 
## 
##  14  Variables      8322  Observations
## --------------------------------------------------------------------------------
## X 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8322        0     8322        1     4162     2774    417.1    833.1 
##      .25      .50      .75      .90      .95 
##   2081.2   4161.5   6241.8   7489.9   7905.9 
## 
## lowest :    1    2    3    4    5, highest: 8318 8319 8320 8321 8322
## --------------------------------------------------------------------------------
## id 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8319        3     8319        1     4160     2773    416.9    832.8 
##      .25      .50      .75      .90      .95 
##   2080.5   4160.0   6239.5   7487.2   7903.1 
## 
## lowest :    1    2    3    4    5, highest: 8315 8316 8317 8318 8319
## --------------------------------------------------------------------------------
## zona 
##        n  missing distinct 
##     8319        3        5 
## 
## lowest : Zona Centro  Zona Norte   Zona Oeste   Zona Oriente Zona Sur    
## highest: Zona Centro  Zona Norte   Zona Oeste   Zona Oriente Zona Sur    
##                                                                            
## Value       Zona Centro   Zona Norte   Zona Oeste Zona Oriente     Zona Sur
## Frequency           124         1920         1198          351         4726
## Proportion        0.015        0.231        0.144        0.042        0.568
## --------------------------------------------------------------------------------
## piso 
##        n  missing distinct 
##     5684     2638       12 
## 
## lowest : 1  2  3  4  5 , highest: 8  9  10 11 12
##                                                                             
## Value          1     2     3     4     5     6     7     8     9    10    11
## Frequency    860  1450  1097   607   567   245   204   211   146   130    84
## Proportion 0.151 0.255 0.193 0.107 0.100 0.043 0.036 0.037 0.026 0.023 0.015
##                 
## Value         12
## Frequency     83
## Proportion 0.015
## --------------------------------------------------------------------------------
## estrato 
##        n  missing distinct 
##     8319        3        4 
##                                   
## Value          3     4     5     6
## Frequency   1453  2129  2750  1987
## Proportion 0.175 0.256 0.331 0.239
## --------------------------------------------------------------------------------
## preciom 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8320        2      539        1    433.9    326.7      121      145 
##      .25      .50      .75      .90      .95 
##      220      330      540      870     1200 
## 
## lowest :   58   62   65   69   70, highest: 1850 1900 1940 1950 1999
## --------------------------------------------------------------------------------
## areaconst 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8319        3      652        1    174.9    135.7       57       60 
##      .25      .50      .75      .90      .95 
##       80      123      229      350      450 
## 
## lowest :   30   35   40   42   43, highest: 1440 1500 1586 1600 1745
## --------------------------------------------------------------------------------
## parqueaderos 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     6717     1605       10    0.846    1.835    1.039        1        1 
##      .25      .50      .75      .90      .95 
##        1        2        2        3        4 
## 
## lowest :  1  2  3  4  5, highest:  6  7  8  9 10
##                                                                       
## Value          1     2     3     4     5     6     7     8     9    10
## Frequency   3155  2475   520   384    68    68    18    17     4     8
## Proportion 0.470 0.368 0.077 0.057 0.010 0.010 0.003 0.003 0.001 0.001
## --------------------------------------------------------------------------------
## banios 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8319        3       11    0.935    3.111    1.525        1        2 
##      .25      .50      .75      .90      .95 
##        2        3        4        5        6 
## 
## lowest :  0  1  2  3  4, highest:  6  7  8  9 10
##                                                                             
## Value          0     1     2     3     4     5     6     7     8     9    10
## Frequency     45   496  2946  1993  1456   890   314   107    48    15     9
## Proportion 0.005 0.060 0.354 0.240 0.175 0.107 0.038 0.013 0.006 0.002 0.001
## --------------------------------------------------------------------------------
## habitaciones 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8319        3       11     0.87    3.605      1.4        2        2 
##      .25      .50      .75      .90      .95 
##        3        3        4        5        7 
## 
## lowest :  0  1  2  3  4, highest:  6  7  8  9 10
##                                                                             
## Value          0     1     2     3     4     5     6     7     8     9    10
## Frequency     66    59   926  4097  1729   679   318   173   138    83    51
## Proportion 0.008 0.007 0.111 0.492 0.208 0.082 0.038 0.021 0.017 0.010 0.006
## --------------------------------------------------------------------------------
## tipo 
##        n  missing distinct 
##     8319        3        2 
##                                   
## Value      Apartamento        Casa
## Frequency         5100        3219
## Proportion       0.613       0.387
## --------------------------------------------------------------------------------
## barrio 
##        n  missing distinct 
##     8319        3      436 
## 
## lowest : 20 de julio      3 de julio       acopi            agua blanca      aguablanca      
## highest: zona norte los   zona oeste       zona oriente     zona residencial zona sur        
## --------------------------------------------------------------------------------
## longitud 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8319        3     2928        1   -76.53   0.0193   -76.55   -76.55 
##      .25      .50      .75      .90      .95 
##   -76.54   -76.53   -76.52   -76.50   -76.50 
## 
## lowest : -76.58915 -76.58876 -76.58744 -76.58732 -76.58530
## highest: -76.46498 -76.46478 -76.46438 -76.46400 -76.46300
## --------------------------------------------------------------------------------
## latitud 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##     8319        3     3679        1    3.418  0.04911    3.351    3.365 
##      .25      .50      .75      .90      .95 
##    3.381    3.416    3.452    3.477    3.486 
## 
## lowest : 3.33300 3.33308 3.33324 3.33333 3.33367
## highest: 3.49659 3.49666 3.49684 3.49700 3.49770
## --------------------------------------------------------------------------------

Se puede ver que las variables “piso” y “parqueaderos” tienen datos faltantes en2638 y 1605 registros respectivamente.

PASOS REQUERIDOS PARA LA OBTENCION DE LOS RESULTADOS

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

Solución:

Se realiza filtro por “tipo” == “Casa” y por “zona” == “Zona Norte”

data1 <- filter(data, tipo == "Casa" & zona == "Zona Norte")

#Datos de los 3 primeros registros filtrados

data_casas_3 = data1[0:3,]
head(data_casas_3)
##    X   id       zona piso estrato preciom areaconst parqueaderos banios
## 1  9 1209 Zona Norte    2       5     320       150            2      4
## 2 10 1592 Zona Norte    2       5     780       380            2      3
## 3 11 4057 Zona Norte    2       6     750       445           NA      7
##   habitaciones tipo barrio  longitud latitud
## 1            6 Casa  acopi -76.51341 3.47968
## 2            3 Casa  acopi -76.51674 3.48721
## 3            6 Casa  acopi -76.52950 3.38527

Construcción de análisis georeferenciado con la libreria “leaflet”

require(leaflet)
## Loading required package: leaflet
## Warning: package 'leaflet' was built under R version 4.2.2
leaflet() %>% addTiles() %>% 
  addCircleMarkers(lng = data_casas_3$longitud,
                   lat = data_casas_3$latitud)

Se evidencia que el tercer registro (id= 4057) aparece en la zona sur de la ciudad de Cali, despues de haber corroborado su ubicación en google maps, se puede ver que el error se debe a una mala clasificación de la zona para esta casa.

2. Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apartamento) 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.

Solución:

construcción de datos con las variables a analizar y filtrando por tipo == “Casa”

data2 <- subset(data, tipo == "Casa"  ,select = c(preciom,areaconst,estrato,banios,habitaciones,zona,parqueaderos))
data2$estrato = as.factor(data2$estrato)
data2$zona = as.factor(data2$zona)
head(data2,10)
##    preciom areaconst estrato banios habitaciones         zona parqueaderos
## 1      250        70       3      3            6 Zona Oriente            1
## 2      320       120       3      2            3 Zona Oriente            1
## 3      350       220       3      2            4 Zona Oriente            2
## 4      400       280       4      5            3     Zona Sur            3
## 9      320       150       5      4            6   Zona Norte            2
## 10     780       380       5      3            3   Zona Norte            2
## 11     750       445       6      7            6   Zona Norte           NA
## 12     625       355       4      5            5   Zona Norte            3
## 13     750       237       5      6            6   Zona Norte            2
## 15     600       160       4      4            5   Zona Norte            1
str(data2)
## 'data.frame':    3219 obs. of  7 variables:
##  $ preciom     : int  250 320 350 400 320 780 750 625 750 600 ...
##  $ areaconst   : num  70 120 220 280 150 380 445 355 237 160 ...
##  $ estrato     : Factor w/ 4 levels "3","4","5","6": 1 1 1 2 3 3 4 2 3 2 ...
##  $ banios      : int  3 2 2 5 4 3 7 5 6 4 ...
##  $ habitaciones: int  6 3 4 3 6 3 6 5 6 5 ...
##  $ zona        : Factor w/ 5 levels "Zona Centro",..: 4 4 4 5 2 2 2 2 2 2 ...
##  $ parqueaderos: int  1 1 2 3 2 2 NA 3 2 1 ...

Se procede graficar la variable “preciom” contra cada una de las variables predictoras con el objetivo de ver posibles correlaciones.

Preciom vs areaconst

library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:Hmisc':
## 
##     subplot
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
gprecio_estrato <- plot_ly(data=data2, x= ~areaconst, y= ~preciom)
gprecio_estrato
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
ggplot(data2, aes(x=areaconst,y=preciom)) + geom_point() + geom_smooth(method ="lm")
## `geom_smooth()` using formula = 'y ~ x'

library(PerformanceAnalytics)
## Warning: package 'PerformanceAnalytics' was built under R version 4.2.3
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Attaching package: 'xts'
## The following object is masked from 'package:leaflet':
## 
##     addLegend
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
dat21 <- data.frame(data2$preciom, data2$areaconst)
chart.Correlation(dat21)
## Warning in par(usr): argument 1 does not name a graphical parameter

Se puede ver que hay una correlación entre la variable “preciom” y “areacost” del 65%, lo cual muestra una relación positiva debil.

Preciom vs estrato

gprecio_estrato <- plot_ly(data=data2, x= ~estrato, y= ~preciom)
gprecio_estrato
## No trace type specified:
##   Based on info supplied, a 'bar' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#bar
#dat22 <- data.frame(data2$preciom, data2$estrato)
#chart.Correlation(dat22)

En el caso del estrato, no se puede determinar una correlación matematica con el precio en millones, ya que el estrato es una variable catégorica, sin embargo, se puede ver en la grafica que a mayor estrato, mayor precio , por ende, se puede decir que el estrato es una variable que explica la variabilidad en el precio final.

Preciom vs banios

gprecio_banios <- plot_ly(data=data2, x= ~banios, y= ~preciom)
gprecio_banios
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
dat23 <- data.frame(data2$preciom, data2$banios)
chart.Correlation(dat23)
## Warning in par(usr): argument 1 does not name a graphical parameter

Se puede ver que hay una correlación entre la variable “preciom” y “banios” del 56%, lo cual muestra una relación positiva debil

Preciom vs habitaciones

gprecio_habitaciones <- plot_ly(data=data2, x= ~habitaciones, y= ~preciom)
gprecio_habitaciones
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
dat24 <- data.frame(data2$preciom, data2$habitaciones)
chart.Correlation(dat24)
## Warning in par(usr): argument 1 does not name a graphical parameter

Se puede ver que hay una correlación entre la variable “preciom” y “estrato” del 9.7%, lo cual muestra una relación inexistente

Preciom vs parqueaderos

gprecio_parqueaderos <- plot_ly(data=data2, x= ~parqueaderos, y= ~preciom)
gprecio_parqueaderos
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
## Warning: Ignoring 733 observations
dat25 <- data.frame(data2$preciom, data2$parqueaderos)
chart.Correlation(dat25)
## Warning in par(usr): argument 1 does not name a graphical parameter

Se puede ver que existe una correlación positiva debil entre el precio de la vivienda y la cantidad de parqueaderos (64%)

Preciom vs zona

gprecio_zona <- plot_ly(data=data2, x= ~zona, y= ~preciom)
gprecio_zona
## No trace type specified:
##   Based on info supplied, a 'bar' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#bar

No se puede establecer una correlación de person entre una variable númerica y una variable categoríca, sin embargo, se puede ver que el precio en millones de las casas en la zona sur tiende a ser mas alto que en las otras zonas de la ciudad.

Se realizará un análisis del comportamiento de las variables predictoras, buscando posibles relaciones lineales entre dichas variables, con el objetivo de evitar problemar de multicolinealidad

library(GGally)
## Warning: package 'GGally' was built under R version 4.2.2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
data_cuanti <- select(data2,areaconst,banios,habitaciones,parqueaderos,preciom)
ggpairs(data_cuanti)
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 733 rows containing missing values
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 733 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 733 rows containing missing values
## Warning: Removed 733 rows containing missing values (`geom_point()`).
## Removed 733 rows containing missing values (`geom_point()`).
## Removed 733 rows containing missing values (`geom_point()`).
## Warning: Removed 733 rows containing non-finite values (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 733 rows containing missing values
## Warning: Removed 733 rows containing missing values (`geom_point()`).

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

3.1 Creación del modelo de regresión lineal multiple para variables categóricas

3.1.1 Creación de modelo LM para preciom vs estrato

mod_p_estr = lm(preciom~estrato,data=data2)
summary(mod_p_estr)
## 
## Call:
## lm(formula = preciom ~ estrato, data = data2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -711.83 -134.18  -47.09   85.82 1453.71 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  274.182      8.887   30.85   <2e-16 ***
## estrato4     132.904     12.948   10.27   <2e-16 ***
## estrato5     271.104     12.013   22.57   <2e-16 ***
## estrato6     707.653     13.090   54.06   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 253.5 on 3215 degrees of freedom
## Multiple R-squared:  0.4995, Adjusted R-squared:  0.499 
## F-statistic:  1069 on 3 and 3215 DF,  p-value: < 2.2e-16

Se puede ver el intercepto del modelo de regresión lineal de preciom vs estrato esta en el estrato == “3”, con un valor de 274, de tal manera que cuando el estrato es 4, el intercepto subre a 406 (274+132), y así susesivamente con los demas valores de esta variable.

Adicionalmente, el R2 de este modelo es del 49%, por lo tanto, este modelo no explica a cabalidad el comportamiento de la variable objetivo

Para determinar la significancia de una variable categórica a la hora de explicar la variabilidad de la variable objetivo se utiliza la prueba ANOVA, la cual compara las medias de los diferentes grupos y determina si existen diferencias estadísticamente significativas. Se tiene por H0: no existe diferencia entre medias.

anova(mod_p_estr)
## Analysis of Variance Table
## 
## Response: preciom
##             Df    Sum Sq  Mean Sq F value    Pr(>F)    
## estrato      3 206223906 68741302  1069.3 < 2.2e-16 ***
## Residuals 3215 206675207    64285                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

el estadístico P-value de la prueba ANOVA es de 2e-16, el cual es inferior a la significancia de la prueba del 5%, por ende se rechaza la hipotesis nula y se determina que hay diferencias estadísticamente significativas entre las medias de precios totales para cada una de las categorias de los estratos.

Prueba PosANOVA

require(agricolae)
## Loading required package: agricolae
## Warning: package 'agricolae' was built under R version 4.2.3
## 
## Attaching package: 'agricolae'
## The following objects are masked from 'package:PerformanceAnalytics':
## 
##     kurtosis, skewness
comparacion1 = LSD.test(mod_p_estr,"estrato")
comparacion1
## $statistics
##    MSerror   Df     Mean      CV
##   64284.67 3215 539.9935 46.9532
## 
## $parameters
##         test p.ajusted  name.t ntr alpha
##   Fisher-LSD      none estrato   4  0.05
## 
## $means
##    preciom      std   r      LCL       UCL Min  Max Q25 Q50  Q75
## 3 274.1818 143.8472 814 256.7576  291.6060  77 1600 180 250  330
## 4 407.0855 186.3038 725 388.6228  425.5483 125 1800 300 360  460
## 5 545.2856 256.3909 984 529.4378  561.1333 125 1999 380 480  650
## 6 981.8348 379.5196 696 962.9913 1000.6782 270 1950 700 890 1250
## 
## $comparison
## NULL
## 
## $groups
##    preciom groups
## 6 981.8348      a
## 5 545.2856      b
## 4 407.0855      c
## 3 274.1818      d
## 
## attr(,"class")
## [1] "group"

Se puever ver que la agrupación del metodo PosANOVA no agrega ninguno de los estratos, por lo tanto, cada nivel es estadísticamente diferente a los demas.

sin embargo, este modelo tiene un R2 de 49%, por lo tanto no explica a cabalidad el comportamiento de la variables objetivo.

3.1.2 Creación de modelo LM para preciom vs zona

mod_p_zona = lm(preciom~zona,data=data2)
summary(mod_p_zona)
## 
## Call:
## lm(formula = preciom ~ zona, data = data2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -601.36 -237.26  -82.26  124.09 1494.09 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        339.24      33.50  10.127  < 2e-16 ***
## zonaZona Norte     106.67      35.74   2.984  0.00286 ** 
## zonaZona Oeste     397.12      42.26   9.396  < 2e-16 ***
## zonaZona Oriente   -94.42      38.86  -2.429  0.01517 *  
## zonaZona Sur       273.02      34.35   7.948  2.6e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 335 on 3214 degrees of freedom
## Multiple R-squared:  0.1265, Adjusted R-squared:  0.1254 
## F-statistic: 116.4 on 4 and 3214 DF,  p-value: < 2.2e-16

Se puede ver el intercepto del modelo de regresión lineal de preciom vs zona esta en zona == “Zona Centro”, con un valor de 339, de tal manera que cuando la zona es “Zona Norte”, el intercepto sube a 445 (339+106), y así susesivamente con los demas valores de esta variable.

Prueba ANOVA

anova(mod_p_zona)
## Analysis of Variance Table
## 
## Response: preciom
##             Df    Sum Sq  Mean Sq F value    Pr(>F)    
## zona         4  52244372 13061093  116.39 < 2.2e-16 ***
## Residuals 3214 360654741   112214                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

el estadístico P-value de la prueba ANOVA es de 2e-16, el cual es inferior a la significancia de la prueba del 5%, por ende se rechaza la hipotesis nula y se determina que hay diferencias estadísticamente significativas entre las medias de precios en millones para cada una de las categorias de las zonas.

comparacion2 = LSD.test(mod_p_zona,"zona")
comparacion2
## $statistics
##    MSerror   Df     Mean       CV
##   112213.7 3214 539.9935 62.03466
## 
## $parameters
##         test p.ajusted name.t ntr alpha
##   Fisher-LSD      none   zona   5  0.05
## 
## $means
##               preciom      std    r      LCL      UCL Min  Max    Q25 Q50   Q75
## Zona Centro  339.2400 161.8457  100 273.5598 404.9202 148 1100 238.75 310 382.5
## Zona Norte   445.9058 268.3646  722 421.4622 470.3495  89 1940 261.25 390 550.0
## Zona Oeste   736.3550 397.7289  169 685.8318 786.8783 135 1999 430.00 680 930.0
## Zona Oriente 244.8201 103.9378  289 206.1846 283.4555  80  750 160.00 235 310.0
## Zona Sur     612.2610 377.6854 1939 597.3452 627.1767  77 1900 350.00 480 780.0
## 
## $comparison
## NULL
## 
## $groups
##               preciom groups
## Zona Oeste   736.3550      a
## Zona Sur     612.2610      b
## Zona Norte   445.9058      c
## Zona Centro  339.2400      d
## Zona Oriente 244.8201      e
## 
## attr(,"class")
## [1] "group"

El análisis PosANOVA muestra que hay diferencias de clasificación para el precio en millones según las diferentes zonas de la ciudad.

sin embargo, este modelo tiene un R2 de 12%, por lo tanto no explica a cabalidad el comportamiento de la variables objetivo.

3.1.3 Modelo cruzado de estrato y zona

mod_p_estr_zona = lm(preciom ~ estrato + zona + estrato*zona, data = data2)
summary(mod_p_estr_zona)
## 
## Call:
## lm(formula = preciom ~ estrato + zona + estrato * zona, data = data2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -723.60 -133.66  -43.66   81.75 1390.47 
## 
## Coefficients: (1 not defined because of singularities)
##                           Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                314.000     26.286  11.945  < 2e-16 ***
## estrato4                   214.571     98.354   2.182  0.02921 *  
## estrato5                   336.000    252.130   1.333  0.18274    
## estrato6                   686.000    252.130   2.721  0.00655 ** 
## zonaZona Norte             -69.847     30.960  -2.256  0.02414 *  
## zonaZona Oeste             170.880     56.622   3.018  0.00257 ** 
## zonaZona Oriente           -70.454     30.232  -2.330  0.01984 *  
## zonaZona Sur                -2.221     32.224  -0.069  0.94505    
## estrato4:zonaZona Norte    -19.954    101.645  -0.196  0.84438    
## estrato5:zonaZona Norte    -30.626    253.118  -0.121  0.90370    
## estrato6:zonaZona Norte   -111.899    254.912  -0.439  0.66071    
## estrato4:zonaZona Oeste   -230.259    120.860  -1.905  0.05685 .  
## estrato5:zonaZona Oeste   -142.049    259.134  -0.548  0.58361    
## estrato6:zonaZona Oeste   -152.711    259.134  -0.589  0.55569    
## estrato4:zonaZona Oriente -137.284    142.746  -0.962  0.33625    
## estrato5:zonaZona Oriente -431.546    355.908  -1.213  0.22540    
## estrato6:zonaZona Oriente       NA         NA      NA       NA    
## estrato4:zonaZona Sur     -132.691    100.701  -1.318  0.18771    
## estrato5:zonaZona Sur     -115.893    253.008  -0.458  0.64694    
## estrato6:zonaZona Sur       -4.180    253.032  -0.017  0.98682    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 250.8 on 3200 degrees of freedom
## Multiple R-squared:  0.5127, Adjusted R-squared:  0.5099 
## F-statistic:   187 on 18 and 3200 DF,  p-value: < 2.2e-16

medelo ANOVA

anova(mod_p_estr_zona)
## Analysis of Variance Table
## 
## Response: preciom
##                Df    Sum Sq  Mean Sq   F value    Pr(>F)    
## estrato         3 206223906 68741302 1093.2421 < 2.2e-16 ***
## zona            4   2477143   619286    9.8489 6.433e-08 ***
## estrato:zona   11   2987218   271565    4.3189 1.962e-06 ***
## Residuals    3200 201210845    62878                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El modelo ANOVA para estrato|zona arroja que las variables “estrato”, “zona” y el cruce entre estrato|zona son estadísticamente significativas para explicar la varianza del precio de las viviendas

sin embargo, este modelo tiene un R2 de 51%, por lo tanto no explica a cabalidad el comportamiento de la variables objetivo.

3.2 Modelos de regresión lineal para variables númericas

3.2.1 Modelo de regresión lineal precio vs área construida

mod_p_area = lm(preciom ~ areaconst, data= data2)
summary(mod_p_area)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = data2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2292.81  -152.75   -57.09    86.26  1296.44 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 166.9621     9.0041   18.54   <2e-16 ***
## areaconst     1.3644     0.0279   48.90   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 271.3 on 3217 degrees of freedom
## Multiple R-squared:  0.4263, Adjusted R-squared:  0.4262 
## F-statistic:  2391 on 1 and 3217 DF,  p-value: < 2.2e-16

El modelo tiene un R2 de 42%, por lo cual no explica a cabalidad el comportamiento de la variable objetivo

3.2.2 Modelo de regresión lineal precio vs parqueaderos

mod_p_par = lm(preciom ~ parqueaderos, data= data2)
summary(mod_p_par)
## 
## Call:
## lm(formula = preciom ~ parqueaderos, data = data2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1457.60  -158.81   -48.81   105.87  1421.19 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   220.054     10.425   21.11   <2e-16 ***
## parqueaderos  158.755      3.833   41.42   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 280.3 on 2484 degrees of freedom
##   (733 observations deleted due to missingness)
## Multiple R-squared:  0.4085, Adjusted R-squared:  0.4083 
## F-statistic:  1716 on 1 and 2484 DF,  p-value: < 2.2e-16

El modelo tiene un R2 de 40%, por lo cual no explica a cabalidad el comportamiento de la variable objetivo

3.2.3 Modelo de regresión lineal precio vs habitaciones

mod_p_hab = lm(preciom ~ habitaciones, data= data2)
summary(mod_p_hab)
## 
## Call:
## lm(formula = preciom ~ habitaciones, data = data2)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -456.4 -237.6 -117.2  122.4 1451.4 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   449.700     17.528  25.656  < 2e-16 ***
## habitaciones   19.587      3.549   5.518 3.69e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 356.6 on 3217 degrees of freedom
## Multiple R-squared:  0.009377,   Adjusted R-squared:  0.009069 
## F-statistic: 30.45 on 1 and 3217 DF,  p-value: 3.694e-08

En el caso de la variable Habitaciones, no se realiza el análisis por ANOVA y PosANOVA, ya que es una variable númerica, el R2 de esta prueba es de 0.9%

3.3 Modelos de regresión lineal mixtos

3.3.1 Modelo de regresión lineal precio vs areaconst + estrato + zona

mod_area_es = lm(preciom~areaconst:estrato + areaconst:zona , data= data2)
summary(mod_area_es)
## 
## Call:
## lm(formula = preciom ~ areaconst:estrato + areaconst:zona, data = data2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1349.20  -108.07   -40.13    60.19  1187.91 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                266.21673    7.67810  34.672  < 2e-16 ***
## areaconst:estrato3           0.32646    0.09431   3.462 0.000544 ***
## areaconst:estrato4           0.68604    0.10206   6.722 2.12e-11 ***
## areaconst:estrato5           1.00458    0.10059   9.987  < 2e-16 ***
## areaconst:estrato6           1.62822    0.09945  16.372  < 2e-16 ***
## areaconst:zonaZona Norte    -0.11623    0.09772  -1.189 0.234370    
## areaconst:zonaZona Oeste     0.18044    0.10484   1.721 0.085313 .  
## areaconst:zonaZona Oriente  -0.30152    0.10153  -2.970 0.003002 ** 
## areaconst:zonaZona Sur       0.04864    0.09693   0.502 0.615822    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 216.6 on 3210 degrees of freedom
## Multiple R-squared:  0.6353, Adjusted R-squared:  0.6344 
## F-statistic: 698.9 on 8 and 3210 DF,  p-value: < 2.2e-16

Este modelo tiene un R2 de 63%, por lo cual presenta un mejor desempeño a la hora de explicar el comportamiento de la variable objetivo.

3.3.2 Modelo de regresión lineal precio vs areaconst + habitaciones + estrato + zona

mod_completo = lm(preciom~areaconst:estrato + areaconst:zona + habitaciones , data= data2)
summary(mod_area_es)
## 
## Call:
## lm(formula = preciom ~ areaconst:estrato + areaconst:zona, data = data2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1349.20  -108.07   -40.13    60.19  1187.91 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                266.21673    7.67810  34.672  < 2e-16 ***
## areaconst:estrato3           0.32646    0.09431   3.462 0.000544 ***
## areaconst:estrato4           0.68604    0.10206   6.722 2.12e-11 ***
## areaconst:estrato5           1.00458    0.10059   9.987  < 2e-16 ***
## areaconst:estrato6           1.62822    0.09945  16.372  < 2e-16 ***
## areaconst:zonaZona Norte    -0.11623    0.09772  -1.189 0.234370    
## areaconst:zonaZona Oeste     0.18044    0.10484   1.721 0.085313 .  
## areaconst:zonaZona Oriente  -0.30152    0.10153  -2.970 0.003002 ** 
## areaconst:zonaZona Sur       0.04864    0.09693   0.502 0.615822    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 216.6 on 3210 degrees of freedom
## Multiple R-squared:  0.6353, Adjusted R-squared:  0.6344 
## F-statistic: 698.9 on 8 and 3210 DF,  p-value: < 2.2e-16

Este modelo tiene un R2 de 63%, que comparado con el modelo de area + estrato + zona, solo da un incremento marginal de la explicabilidad del modelo del 1%, por ende, se decide quitar del modelo, este comportamiento se puede explicar al ver que a mayor área, se va a tender a tener un mayor número de habitaciones, lo cual se pudó ver en el análisis de correlaciones, en el cual la correlación entre el área construida y las habitaciones fue del 51%.

3.3.3 Modelo de regresión lineal precio vs areaconst + estrato + zona + parqueaderos

mod_area_es = lm(preciom~areaconst:estrato + areaconst:zona +parqueaderos , data= data2)
summary(mod_area_es)
## 
## Call:
## lm(formula = preciom ~ areaconst:estrato + areaconst:zona + parqueaderos, 
##     data = data2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1131.14   -96.44   -32.32    60.05  1125.65 
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                197.7286     9.9114  19.950  < 2e-16 ***
## parqueaderos                71.0035     3.4443  20.615  < 2e-16 ***
## areaconst:estrato3           0.2741     0.1240   2.210   0.0272 *  
## areaconst:estrato4           0.5519     0.1395   3.957 7.80e-05 ***
## areaconst:estrato5           0.8493     0.1364   6.225 5.65e-10 ***
## areaconst:estrato6           1.3815     0.1360  10.156  < 2e-16 ***
## areaconst:zonaZona Norte    -0.2642     0.1333  -1.982   0.0475 *  
## areaconst:zonaZona Oeste     0.1026     0.1392   0.737   0.4612    
## areaconst:zonaZona Oriente  -0.2748     0.1346  -2.042   0.0413 *  
## areaconst:zonaZona Sur      -0.1057     0.1326  -0.798   0.4252    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 206.7 on 2476 degrees of freedom
##   (733 observations deleted due to missingness)
## Multiple R-squared:  0.6795, Adjusted R-squared:  0.6783 
## F-statistic: 583.3 on 9 and 2476 DF,  p-value: < 2.2e-16

este modelo tiene un R2 de 67%, el cual muestra el mejor desempeño en terminos de explicabilidad de la variable objetivo.

Adicionalmente, si se grafican “preciom” vs “areaconst”, categorizando las observaciones por las variables “estrato” y “zona” respectivamente, se puede evidenciar que estas 3 variables dan una buena explicación a la variable objetivo.

ggplot(data2, aes(x=areaconst, y = preciom, color=estrato)) + geom_point()+geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data2, aes(x=areaconst, y = preciom, color=zona)) + geom_point()+geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'

####CONCLUSIONES MOLDELOS DE REGRESIÓN LINEAL

1.Debido a la alta correlación entre la variables “banios” y “areacosnt”, se decidió quitar del análisis a la variable “banios” con el objetivo de evitar problemas de multicolinealidad 2.El modelo que mejor desempeño, según el R2 (67%), fue el de precio ~ areaconst + estrato + zona + parqueaderos, esto tiene sentido, ya que las variables categóricas “estrato” y “zona” ayudan a complementar la explicación que el área en metros cuadrados da al precio de las viviendas. 3.Se decide quitar del modelo la variable “habitaciones”, debido a que su aporte marginal en la explicacón del comportamiento de la variable objetivo es del 1%.

3.1.7 Creación del modelo de regresión lineal para caso de estudio

El enunciado dicta que se quiere hacer un modelo para predecir el valor por metro cuadrado de una vivienda tipo “Casa”, con un área construida de 200 m2, en estrato 4-5 en la zona norte

#Creación del modelo de regresión lineal

mod_final = lm(preciom ~ areaconst:estrato + areaconst:zona + parqueaderos, data= data2)
summary(mod_final)
## 
## Call:
## lm(formula = preciom ~ areaconst:estrato + areaconst:zona + parqueaderos, 
##     data = data2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1131.14   -96.44   -32.32    60.05  1125.65 
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                197.7286     9.9114  19.950  < 2e-16 ***
## parqueaderos                71.0035     3.4443  20.615  < 2e-16 ***
## areaconst:estrato3           0.2741     0.1240   2.210   0.0272 *  
## areaconst:estrato4           0.5519     0.1395   3.957 7.80e-05 ***
## areaconst:estrato5           0.8493     0.1364   6.225 5.65e-10 ***
## areaconst:estrato6           1.3815     0.1360  10.156  < 2e-16 ***
## areaconst:zonaZona Norte    -0.2642     0.1333  -1.982   0.0475 *  
## areaconst:zonaZona Oeste     0.1026     0.1392   0.737   0.4612    
## areaconst:zonaZona Oriente  -0.2748     0.1346  -2.042   0.0413 *  
## areaconst:zonaZona Sur      -0.1057     0.1326  -0.798   0.4252    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 206.7 on 2476 degrees of freedom
##   (733 observations deleted due to missingness)
## Multiple R-squared:  0.6795, Adjusted R-squared:  0.6783 
## F-statistic: 583.3 on 9 and 2476 DF,  p-value: < 2.2e-16

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).

Se procede a realizar la validación de los siguientes supuestos para el modelo:

  • 1.Los errores son variables aleatorias normales
  • 2.Los errores tienen media cero
  • 3.Los errores tienen varianza constante
  • 4.Los errores son mutuamente independientes

4.1 Validación de distribución normal de los errores

Se utilizará la prueba de Shapiro-Wilks y Cramer Von Mises para validar la distribución normal de los errores

## Ploteo de los valores predichos por el modelo RL vs los errores de cada predicción
plot(mod_final$residuals)

##Prueba Shapiro-Wilks para los residuos del modelo final

muestra = sample(mod_final$residuals)
shapiro.test(muestra)
## 
##  Shapiro-Wilk normality test
## 
## data:  muestra
## W = 0.855, p-value < 2.2e-16
#cvm.test(mod_final$residuals, 'pnorm')

En el Shapiro-Wilk, con un P-Value del 2.2e-16 < 5%, por ende, los errores del modelo no se distribuyen normal. En el Cramer test, con P-value del 2.2e-16, tambien se muestra que los errores no se distribuyen normal

4.2 Validación de errores tienen media cero

mean(mod_final$residuals)
## [1] -1.677893e-14

La media de los errores tienden a cero

4.3 Validación de errores tienen varianza constante

Para validar el supuesto varianza constante en los errores se utilizará la prueba de Goldfeld-Quandt, la cual tiene por hipotesis nula que hay homocedasticidad en los errores, lo cual quiere decir que la varianza en los datos es homogenea de manera trasversal, esto indica que no existe una dispersión heterogenea de los residuos (heterocedasticidad)

library(lmtest)
## Warning: package 'lmtest' was built under R version 4.2.2
gqtest(mod_final)
## 
##  Goldfeld-Quandt test
## 
## data:  mod_final
## GQ = 1.3954, df1 = 1233, df2 = 1233, p-value = 2.686e-09
## alternative hypothesis: variance increases from segment 1 to 2

Se puede ver que el P-Value de la prueba es inferior a la significancia del 5%, por ende, se rechaza la hipotesis nula, y se podría afirmar que hay problemas de heterocedasticidad en los errores

4.4 Validación de errores mutuamente independientes

Para validar la independencia de los errores se utilizará la prueba de Durbin-Watson, la cual tiene por hipotesis nula que los datos no estan autocorrelacionados.

dwtest(mod_final)
## 
##  Durbin-Watson test
## 
## data:  mod_final
## DW = 1.7418, p-value = 3.532e-11
## alternative hypothesis: true autocorrelation is greater than 0

Se puede ver que el P-Value de la prueba es inferior a la significancia del 5%, por ende, se rechaza la hipotesis nula, y se podría afirmar que hay problemas de autocorrelación en los errores

SUGERENCIAS:

Para subsanar estos problemas encontrados en este modelo, se deben abordar diferentes técnicas, en primer lugar, se podrian hacer transformaciones a las relaciones entre la variable “areaconst” y “preciom”, con el objetivo de identificar si con dicha transformación se puede llegar a una relación lineal.

5. Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.

prediccion1 = predict(mod_final,list(areaconst=200,parqueaderos=1, zona ="Zona Norte", estrato ="4"))
prediccion2 = predict(mod_final,list(areaconst=200,parqueaderos=1, zona ="Zona Norte", estrato ="5"))

prediccion1
##        1 
## 326.2699
prediccion2
##        1 
## 385.7566

Una vivienda tipo “casa”, con 1 parqueadero, en la “Zona Norte”,va a costar alrededor de 326 millones para estrato 4 y 385 millones para estrato 5

6. Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 1. Tenga encuentra que la empresa tiene crédito preaprobado de máximo 350 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.

Teniendo en cuenta que se tiene preaprobado un máximo de 350 millones, María podría ofrecerle la vivienda en estrato 4 por 353 millones, obteniendo así una posible ganancia de 24 millones (7% sobre la compra), sin embargo, la venta de la vivienda en estrato 5 no le generaría ganancia, ya que esta en 385 millones.

7. Realice los pasos del 1 al 6. Para la segunda solicitud se tiene un crédito preaprobado por valor de $850 millones.

7.1 Filtro

data1 <- filter(data, tipo == "Apartamento" & zona == "Zona Sur")

#Datos de los 3 primeros registros filtrados

data_apto_3 = data1[0:3,]
head(data_apto_3)
##     X   id     zona piso estrato preciom areaconst parqueaderos banios
## 1  24 5098 Zona Sur    5       4     290        96            1      2
## 2 164  698 Zona Sur    2       3      78        40            1      1
## 3 264 8199 Zona Sur <NA>       6     875       194            2      5
##   habitaciones        tipo     barrio  longitud latitud
## 1            3 Apartamento      acopi -76.53464 3.44987
## 2            2 Apartamento aguablanca -76.50100 3.40000
## 3            3 Apartamento  aguacatal -76.55700 3.45900
require(leaflet)

leaflet() %>% addTiles() %>% 
  addCircleMarkers(lng = data_apto_3$longitud,
                   lat = data_apto_3$latitud)

Se evidencia que hay udos registros que a pesar de estar etiquetados como “Zona NSur”, espacialmente estan en otra zona

7.2 Análisis Exploratorio

data3 <- subset(data, tipo == "Apartamento"  ,select = c(preciom,areaconst,estrato,banios,habitaciones,zona,parqueaderos,piso,tipo))
data3$estrato = as.factor(data3$estrato)
data3$zona = as.factor(data3$zona)
head(data3,10)
##    preciom areaconst estrato banios habitaciones       zona parqueaderos piso
## 5      260        90       5      2            3 Zona Norte            1    1
## 6      240        87       5      3            3 Zona Norte            1    1
## 7      220        52       4      2            3 Zona Norte            2    1
## 8      310       137       5      3            4 Zona Norte            2    1
## 14     520        98       6      2            2 Zona Norte            2    2
## 18     320       108       4      3            3 Zona Norte            2    3
## 19     385       103       5      2            3 Zona Norte            2    3
## 20     100        49       3      1            2 Zona Norte           NA    3
## 21     175        80       3      2            3 Zona Norte            1    4
## 22     820       377       6      4            4 Zona Norte            1    5
##           tipo
## 5  Apartamento
## 6  Apartamento
## 7  Apartamento
## 8  Apartamento
## 14 Apartamento
## 18 Apartamento
## 19 Apartamento
## 20 Apartamento
## 21 Apartamento
## 22 Apartamento

Previo vs área

gprecio_area <- plot_ly(data=data3, x= ~areaconst, y= ~preciom)
gprecio_area
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
ggplot(data3, aes(x=areaconst,y=preciom)) + geom_point() + geom_smooth(method ="lm")
## `geom_smooth()` using formula = 'y ~ x'

library(PerformanceAnalytics)
dat31 <- data.frame(data3$preciom, data3$areaconst)
chart.Correlation(dat31)
## Warning in par(usr): argument 1 does not name a graphical parameter

Se puede ver que hay una correlación entre la variable “preciom” y “areacost” del 83%, lo cual muestra una relación positiva fuerte.

Previo vs estrato

gprecio_estrato2 <- plot_ly(data=data3, x= ~estrato, y= ~preciom)
gprecio_estrato2
## No trace type specified:
##   Based on info supplied, a 'bar' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#bar

En el caso del estrato, no se puede determinar una correlación matematica con el precio en millones, ya que el estrato es una variable catégorica, sin embargo, se puede ver en la grafica que a mayor estrato, mayor precio , por ende, se puede decir que el estrato es una variable que explica la variabilidad en el precio final.

Precio vs Banios

gprecio_banios <- plot_ly(data=data2, x= ~banios, y= ~preciom)
gprecio_banios
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
dat33 <- data.frame(data3$preciom, data3$banios)
chart.Correlation(dat33)
## Warning in par(usr): argument 1 does not name a graphical parameter

correlación entre la variable “preciom” y “banios” del 74%, lo cual muestra una relación positiva fuerte

precio vs habitaciones

gprecio_habitaciones2 <- plot_ly(data=data3, x= ~habitaciones, y= ~preciom)
gprecio_habitaciones2
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
dat34 <- data.frame(data3$preciom, data3$habitaciones)
chart.Correlation(dat34)
## Warning in par(usr): argument 1 does not name a graphical parameter

correlación entre la variable “preciom” y “estrato” del 30%, lo cual muestra una relación inexistente

Preciom vs parqueaderos

gprecio_parqueaderos2 <- plot_ly(data=data3, x= ~parqueaderos, y= ~preciom)
gprecio_parqueaderos2
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
## Warning: Ignoring 869 observations
dat35 <- data.frame(data3$preciom, data3$parqueaderos)
chart.Correlation(dat35)
## Warning in par(usr): argument 1 does not name a graphical parameter

correlación positiva fuerte entre el precio de la vivienda y la cantidad de parqueaderos (74%)

Preciom vs zona

gprecio_zona2 <- plot_ly(data=data3, x= ~zona, y= ~preciom)
gprecio_zona2
## No trace type specified:
##   Based on info supplied, a 'bar' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#bar

No se puede establecer una correlación de person entre una variable númerica y una variable categoríca, sin embargo, se puede ver que el precio en millones de las casas en la zona sur tiende a ser mas alto que en las otras zonas de la ciudad.

Se realizará un análisis del comportamiento de las variables predictoras, buscando posibles relaciones lineales entre dichas variables, con el objetivo de evitar problemar de multicolinealidad

library(GGally)
data_cuanti2 <- select(data3,areaconst,banios,habitaciones,parqueaderos,preciom)
ggpairs(data_cuanti2)
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 869 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 869 rows containing missing values

## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 869 rows containing missing values
## Warning: Removed 869 rows containing missing values (`geom_point()`).
## Removed 869 rows containing missing values (`geom_point()`).
## Removed 869 rows containing missing values (`geom_point()`).
## Warning: Removed 869 rows containing non-finite values (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 869 rows containing missing values
## Warning: Removed 869 rows containing missing values (`geom_point()`).

Se evidencia que la variable baños y área construida esta fuertemente correlacionadas (72%), por ende, se quita baños del análisis para evitar problemas de multicolinealidad

7.3 Modelos de Regresión Lineal

7.3.1.1 Creación de modelo LM para preciom vs estrato

mod_p_estr2 = lm(preciom~estrato,data=data3)
summary(mod_p_estr2)
## 
## Call:
## lm(formula = preciom ~ estrato, data = data3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -574.41  -77.49  -23.98   38.06 1564.99 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  128.977      7.979  16.165  < 2e-16 ***
## estrato4      77.968      9.625   8.101 6.77e-16 ***
## estrato5     206.034      9.311  22.128  < 2e-16 ***
## estrato6     573.438      9.756  58.781  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 201.7 on 5096 degrees of freedom
## Multiple R-squared:  0.514,  Adjusted R-squared:  0.5137 
## F-statistic:  1796 on 3 and 5096 DF,  p-value: < 2.2e-16

Adicionalmente, el R2 de este modelo es del 51%, por lo tanto, este modelo no explica a cabalidad el comportamiento de la variable objetivo

anova(mod_p_estr2)
## Analysis of Variance Table
## 
## Response: preciom
##             Df    Sum Sq  Mean Sq F value    Pr(>F)    
## estrato      3 219218319 73072773  1796.3 < 2.2e-16 ***
## Residuals 5096 207302072    40679                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

el estadístico P-value de la prueba ANOVA es de 2e-16, el cual es inferior a la significancia de la prueba del 5%, por ende se rechaza la hipotesis nula y se determina que hay diferencias estadísticamente significativas entre las medias de precios totales para cada una de las categorias de los estratos.

require(agricolae)
comparacion21 = LSD.test(mod_p_estr2,"estrato")
comparacion21
## $statistics
##    MSerror   Df     Mean       CV
##   40679.37 5096 366.9435 54.96521
## 
## $parameters
##         test p.ajusted  name.t ntr alpha
##   Fisher-LSD      none estrato   4  0.05
## 
## $means
##    preciom       std    r      LCL      UCL Min  Max Q25   Q50    Q75
## 3 128.9765  50.50141  639 113.3347 144.6184  58  580 105 120.0 140.00
## 4 206.9444  80.26785 1404 196.3920 217.4969  78 1350 155 189.5 240.00
## 5 335.0108 160.03434 1766 325.6018 344.4197  89 1900 250 300.0 379.75
## 6 702.4144 342.62111 1291 691.4098 713.4190 128 1950 450 610.0 870.00
## 
## $comparison
## NULL
## 
## $groups
##    preciom groups
## 6 702.4144      a
## 5 335.0108      b
## 4 206.9444      c
## 3 128.9765      d
## 
## attr(,"class")
## [1] "group"

Se puever ver que la agrupación del metodo PosANOVA no agrega ninguno de los estratos, por lo tanto, cada nivel es estadísticamente diferente a los demas.

7.3.1.2 Creación de modelo LM para preciom vs zona

mod_p_zona2 = lm(preciom~zona,data=data3)
summary(mod_p_zona2)
## 
## Call:
## lm(formula = preciom ~ zona, data = data3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -582.93 -141.29  -52.29   57.71 1452.71 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        186.58      50.20   3.717 0.000204 ***
## zonaZona Norte      98.58      50.70   1.944 0.051906 .  
## zonaZona Oeste     481.34      50.78   9.479  < 2e-16 ***
## zonaZona Oriente   -33.99      59.12  -0.575 0.565415    
## zonaZona Sur       110.71      50.41   2.196 0.028140 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 245.9 on 5095 degrees of freedom
## Multiple R-squared:  0.2776, Adjusted R-squared:  0.277 
## F-statistic: 489.3 on 4 and 5095 DF,  p-value: < 2.2e-16
anova(mod_p_zona2)
## Analysis of Variance Table
## 
## Response: preciom
##             Df    Sum Sq  Mean Sq F value    Pr(>F)    
## zona         4 118380819 29595205  489.35 < 2.2e-16 ***
## Residuals 5095 308139573    60479                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

el estadístico P-value de la prueba ANOVA es de 2e-16, el cual es inferior a la significancia de la prueba del 5%, por ende se rechaza la hipotesis nula y se determina que hay diferencias estadísticamente significativas entre las medias de precios en millones para cada una de las categorias de las zonas. R2 = 27%

comparacion22 = LSD.test(mod_p_zona2,"zona")
comparacion22
## $statistics
##    MSerror   Df     Mean       CV
##   60478.82 5095 366.9435 67.01969
## 
## $parameters
##         test p.ajusted name.t ntr alpha
##   Fisher-LSD      none   zona   5  0.05
## 
## $means
##               preciom       std    r       LCL      UCL Min  Max    Q25   Q50
## Zona Centro  186.5833  90.80601   24  88.17151 284.9952 100  400 120.00 152.5
## Zona Norte   285.1619 199.76693 1198 271.23279 299.0911  65 1580 138.25 250.0
## Zona Oeste   667.9271 389.91315 1029 652.89759 682.9566  85 1950 385.00 570.0
## Zona Oriente 152.5968 165.43123   62  91.36779 213.8258  58 1350  99.00 115.0
## Zona Sur     297.2917 191.55058 2787 288.15932 306.4241  75 1750 175.00 245.0
##              Q75
## Zona Centro  210
## Zona Norte   360
## Zona Oeste   900
## Zona Oriente 150
## Zona Sur     335
## 
## $comparison
## NULL
## 
## $groups
##               preciom groups
## Zona Oeste   667.9271      a
## Zona Sur     297.2917      b
## Zona Norte   285.1619     bc
## Zona Centro  186.5833     cd
## Zona Oriente 152.5968      d
## 
## attr(,"class")
## [1] "group"

7.3.1.3 Modelo cruzado de estrato y zona

mod_p_estr_zona2 = lm(preciom ~ estrato + zona + estrato*zona, data = data3)
summary(mod_p_estr_zona2)
## 
## Call:
## lm(formula = preciom ~ estrato + zona + estrato * zona, data = data3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -616.27  -68.60  -18.71   41.40 1405.67 
## 
## Coefficients: (1 not defined because of singularities)
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                140.7857    51.5146   2.733  0.00630 ** 
## estrato4                    95.2143    89.2260   1.067  0.28597    
## estrato5                   144.2143   122.6294   1.176  0.23964    
## estrato6                   453.3784    16.2867  27.837  < 2e-16 ***
## zonaZona Norte             -21.1210    52.5738  -0.402  0.68789    
## zonaZona Oeste               6.5246    62.7286   0.104  0.91716    
## zonaZona Oriente           -11.8030    57.3962  -0.206  0.83708    
## zonaZona Sur                 0.3337    53.2785   0.006  0.99500    
## estrato4:zonaZona Norte      0.1414    90.6783   0.002  0.99876    
## estrato5:zonaZona Norte     83.6672   123.3808   0.678  0.49773    
## estrato6:zonaZona Norte     70.7518    26.3257   2.688  0.00722 ** 
## estrato4:zonaZona Oeste    -12.3522    99.4131  -0.124  0.90112    
## estrato5:zonaZona Oeste    202.8044   128.3741   1.580  0.11422    
## estrato6:zonaZona Oeste    180.5841    39.9829   4.517 6.43e-06 ***
## estrato4:zonaZona Oriente   38.3030   164.8580   0.232  0.81628    
## estrato5:zonaZona Oriente -168.1970   229.8503  -0.732  0.46434    
## estrato6:zonaZona Oriente  767.6388   195.0857   3.935 8.43e-05 ***
## estrato4:zonaZona Sur      -32.7333    90.4443  -0.362  0.71743    
## estrato5:zonaZona Sur        8.3749   123.5264   0.068  0.94595    
## estrato6:zonaZona Sur            NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 192.8 on 5081 degrees of freedom
## Multiple R-squared:  0.5574, Adjusted R-squared:  0.5558 
## F-statistic: 355.5 on 18 and 5081 DF,  p-value: < 2.2e-16
anova(mod_p_estr_zona2)
## Analysis of Variance Table
## 
## Response: preciom
##                Df    Sum Sq  Mean Sq   F value    Pr(>F)    
## estrato         3 219218319 73072773 1966.8271 < 2.2e-16 ***
## zona            4  15620096  3905024  105.1076 < 2.2e-16 ***
## estrato:zona   11   2909536   264503    7.1194 3.951e-12 ***
## Residuals    5081 188772441    37153                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El modelo ANOVA para estrato|zona arroja que las variables “estrato”, “zona” y el cruce entre estrato|zona son estadísticamente significativas para explicar la varianza del precio de las viviendas

sin embargo, este modelo tiene un R2 de 55%, por lo tanto no explica a cabalidad el comportamiento de la variables objetivo.

7.3.1.4 Modelo de regresión lineal precio vs área construida

mod_p_area2 = lm(preciom ~ areaconst, data= data3)
summary(mod_p_area2)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = data3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2898.98   -60.08   -14.98    44.76  1020.85 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -22.80585    4.32723   -5.27 1.42e-07 ***
## areaconst     3.45578    0.03268  105.73  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 161.9 on 5098 degrees of freedom
## Multiple R-squared:  0.6868, Adjusted R-squared:  0.6868 
## F-statistic: 1.118e+04 on 1 and 5098 DF,  p-value: < 2.2e-16

El modelo tiene un R2 de 68%, por lo cual no explica a cabalidad el comportamiento de la variable objetivo

7.3.1.5 Modelo de regresión lineal precio vs parqueaderos

mod_p_par2 = lm(preciom ~ parqueaderos, data= data3)
summary(mod_p_par2)
## 
## Call:
## lm(formula = preciom ~ parqueaderos, data = data3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2698.4  -103.9   -14.0    66.0  1321.1 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -60.934      7.181  -8.485   <2e-16 ***
## parqueaderos  294.931      4.140  71.241   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 199.9 on 4229 degrees of freedom
##   (869 observations deleted due to missingness)
## Multiple R-squared:  0.5455, Adjusted R-squared:  0.5454 
## F-statistic:  5075 on 1 and 4229 DF,  p-value: < 2.2e-16

El modelo tiene un R2 de 54%, por lo cual no explica a cabalidad el comportamiento de la variable objetivo

7.3.1.6 Modelo de regresión lineal precio vs habitaciones

mod_p_hab2 = lm(preciom ~ habitaciones, data= data3)
summary(mod_p_hab2)
## 
## Call:
## lm(formula = preciom ~ habitaciones, data = data3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -894.31 -171.62  -80.59   69.41 1556.70 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -11.276     17.434  -0.647    0.518    
## habitaciones  127.288      5.721  22.248   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 276.2 on 5098 degrees of freedom
## Multiple R-squared:  0.0885, Adjusted R-squared:  0.08832 
## F-statistic:   495 on 1 and 5098 DF,  p-value: < 2.2e-16

Modelo con R2= 8%, explicación no significativa

7.3.1.7 Modelo de regresión lineal precio vs piso

mod_p_piso = lm(preciom ~ piso, data= data3)
summary(mod_p_piso)
## 
## Call:
## lm(formula = preciom ~ piso, data = data3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -372.40 -168.78  -83.78   64.24 1588.90 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  311.105     13.086  23.775  < 2e-16 ***
## piso2         24.653     17.749   1.389    0.165    
## piso3         20.138     17.313   1.163    0.245    
## piso4          4.859     17.502   0.278    0.781    
## piso5        -22.328     17.372  -1.285    0.199    
## piso6        131.809     21.777   6.053 1.57e-09 ***
## piso7        111.695     23.225   4.809 1.57e-06 ***
## piso8        128.431     22.808   5.631 1.92e-08 ***
## piso9        184.642     25.991   7.104 1.45e-12 ***
## piso10       145.606     27.321   5.329 1.04e-07 ***
## piso11       201.300     32.369   6.219 5.56e-10 ***
## piso12       178.522     32.532   5.488 4.35e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 271.3 on 3707 degrees of freedom
##   (1381 observations deleted due to missingness)
## Multiple R-squared:  0.05775,    Adjusted R-squared:  0.05495 
## F-statistic: 20.65 on 11 and 3707 DF,  p-value: < 2.2e-16

Modelo con R2= 3%, explicación no significativa

7.3.1.8 Modelo de regresión lineal precio vs areaconst + estrato + zona

mod_area_es2 = lm(preciom~areaconst:estrato + areaconst:zona , data= data3)
summary(mod_area_es2)
## 
## Call:
## lm(formula = preciom ~ areaconst:estrato + areaconst:zona, data = data3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1526.67   -46.63   -11.90    37.05   870.74 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                1.155e+02  4.425e+00  26.103  < 2e-16 ***
## areaconst:estrato3         2.491e-01  2.723e-01   0.915   0.3604    
## areaconst:estrato4         1.231e+00  2.700e-01   4.558 5.28e-06 ***
## areaconst:estrato5         1.832e+00  2.681e-01   6.834 9.21e-12 ***
## areaconst:estrato6         2.982e+00  2.680e-01  11.124  < 2e-16 ***
## areaconst:zonaZona Norte   4.897e-02  2.676e-01   0.183   0.8548    
## areaconst:zonaZona Oeste   5.193e-01  2.680e-01   1.938   0.0527 .  
## areaconst:zonaZona Oriente 2.156e-01  3.029e-01   0.712   0.4766    
## areaconst:zonaZona Sur     2.693e-03  2.670e-01   0.010   0.9920    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 128.6 on 5091 degrees of freedom
## Multiple R-squared:  0.8025, Adjusted R-squared:  0.8022 
## F-statistic:  2585 on 8 and 5091 DF,  p-value: < 2.2e-16

Modelo con R2 del 80%

7.3.1.9 Modelo de regresión lineal precio vs areaconst + habitaciones + estrato + zona

mod_completo2 = lm(preciom~areaconst:estrato + areaconst:zona + habitaciones , data= data3)
summary(mod_area_es2)
## 
## Call:
## lm(formula = preciom ~ areaconst:estrato + areaconst:zona, data = data3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1526.67   -46.63   -11.90    37.05   870.74 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                1.155e+02  4.425e+00  26.103  < 2e-16 ***
## areaconst:estrato3         2.491e-01  2.723e-01   0.915   0.3604    
## areaconst:estrato4         1.231e+00  2.700e-01   4.558 5.28e-06 ***
## areaconst:estrato5         1.832e+00  2.681e-01   6.834 9.21e-12 ***
## areaconst:estrato6         2.982e+00  2.680e-01  11.124  < 2e-16 ***
## areaconst:zonaZona Norte   4.897e-02  2.676e-01   0.183   0.8548    
## areaconst:zonaZona Oeste   5.193e-01  2.680e-01   1.938   0.0527 .  
## areaconst:zonaZona Oriente 2.156e-01  3.029e-01   0.712   0.4766    
## areaconst:zonaZona Sur     2.693e-03  2.670e-01   0.010   0.9920    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 128.6 on 5091 degrees of freedom
## Multiple R-squared:  0.8025, Adjusted R-squared:  0.8022 
## F-statistic:  2585 on 8 and 5091 DF,  p-value: < 2.2e-16

Este modelo tiene un R2 de 80%, que comparado con el modelo de area + estrato + zona, solo da un incremento marginal de la explicabilidad del modelo del 0%, por ende, se decide quitar habitaciones del modelo, este comportamiento se puede explicar al ver que a mayor área, se va a tender a tener un mayor número de habitaciones, lo cual se pudó ver en el análisis de correlaciones, en el cual la correlación entre el área construida y las habitaciones fue del 72%.

7.3.1.10 Modelo de regresión lineal precio vs areaconst + estrato + zona + parqueaderos

mod_area_es2 = lm(preciom~areaconst:estrato + areaconst:zona +parqueaderos , data= data3)
summary(mod_area_es2)
## 
## Call:
## lm(formula = preciom ~ areaconst:estrato + areaconst:zona + parqueaderos, 
##     data = data3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1094.03   -49.46    -4.69    43.31   913.43 
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                37.14580    5.94604   6.247 4.59e-10 ***
## parqueaderos               87.81114    3.78249  23.215  < 2e-16 ***
## areaconst:estrato3          0.36744    0.38044   0.966 0.334173    
## areaconst:estrato4          1.21389    0.36755   3.303 0.000966 ***
## areaconst:estrato5          1.54943    0.36662   4.226 2.43e-05 ***
## areaconst:estrato6          2.58732    0.36692   7.051 2.06e-12 ***
## areaconst:zonaZona Norte   -0.04211    0.36651  -0.115 0.908523    
## areaconst:zonaZona Oeste    0.30790    0.36629   0.841 0.400630    
## areaconst:zonaZona Oriente -0.12002    0.42598  -0.282 0.778154    
## areaconst:zonaZona Sur     -0.18883    0.36539  -0.517 0.605329    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 127.1 on 4221 degrees of freedom
##   (869 observations deleted due to missingness)
## Multiple R-squared:  0.8168, Adjusted R-squared:  0.8164 
## F-statistic:  2091 on 9 and 4221 DF,  p-value: < 2.2e-16

este modelo tiene un R2 de 81%, el cual tiene un aumento marginal en la explicabilidad de solo el 1%, por ende no se incluye la variable parqueaderos en el modelo final.

7.3.1.11 Modelo de regresión lineal precio vs areaconst + estrato + zona + piso

mod_area_es_piso = lm(preciom~areaconst:estrato + areaconst:zona +piso , data= data3)
summary(mod_area_es_piso)
## 
## Call:
## lm(formula = preciom ~ areaconst:estrato + areaconst:zona + piso, 
##     data = data3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1439.31   -43.09   -10.36    35.17   885.74 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                120.74276    7.49021  16.120  < 2e-16 ***
## piso2                      -10.43543    8.09309  -1.289 0.197331    
## piso3                       -6.83438    7.89349  -0.866 0.386642    
## piso4                      -11.42479    7.98436  -1.431 0.152544    
## piso5                      -11.01449    7.92796  -1.389 0.164819    
## piso6                       14.59073    9.99871   1.459 0.144578    
## piso7                       13.76788   10.66743   1.291 0.196907    
## piso8                       24.46754   10.44685   2.342 0.019228 *  
## piso9                       53.69111   11.92827   4.501 6.97e-06 ***
## piso10                      36.60069   12.50516   2.927 0.003445 ** 
## piso11                      67.75824   14.90992   4.545 5.68e-06 ***
## piso12                      46.28130   14.93743   3.098 0.001961 ** 
## areaconst:estrato3          -0.01306    0.35969  -0.036 0.971033    
## areaconst:estrato4           0.82653    0.36158   2.286 0.022318 *  
## areaconst:estrato5           1.40075    0.36013   3.890 0.000102 ***
## areaconst:estrato6           2.59702    0.35985   7.217 6.42e-13 ***
## areaconst:zonaZona Norte     0.34316    0.35933   0.955 0.339636    
## areaconst:zonaZona Oeste     0.82642    0.35995   2.296 0.021734 *  
## areaconst:zonaZona Oriente   0.33022    0.39206   0.842 0.399691    
## areaconst:zonaZona Sur       0.32007    0.35906   0.891 0.372776    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 123.6 on 3699 degrees of freedom
##   (1381 observations deleted due to missingness)
## Multiple R-squared:  0.805,  Adjusted R-squared:  0.804 
## F-statistic: 803.9 on 19 and 3699 DF,  p-value: < 2.2e-16

El modelo incluyendo piso no tiene un aumento marginal en la explicabilidad del modelo al incluir la variable “piso”, por ende se quita del modelo final

Adicionalmente, si se grafican “preciom” vs “areaconst”, categorizando las observaciones por las variables “estrato” y “zona” respectivamente, se puede evidenciar que estas 3 variables dan una buena explicación a la variable objetivo.

ggplot(data3, aes(x=areaconst, y = preciom, color=estrato)) + geom_point()+geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data3, aes(x=areaconst, y = preciom, color=zona)) + geom_point()+geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'

####CONCLUSIONES MOLDELOS DE REGRESIÓN LINEAL APARTAMENTOS

  • 1.Debido a la alta correlación entre la variables “banios” y “areacosnt”, se decidió quitar del análisis a la variable “banios” con el objetivo de evitar problemas de multicolinealidad
  • 2.El modelo que mejor desempeño, según el R2 (80%), fue el de precio ~ areaconst + estrato + zona , esto tiene sentido, ya que las variables categóricas “estrato” y “zona” ayudan a complementar la explicación que el área en metros cuadrados da al precio de las viviendas.
  • 3.Se decide quitar del modelo la variable “habitaciones”, “piso” y “Parqueaderos”, debido a que sus aportes marginales en la explicacón del comportamiento de la variable objetivo no es significativo.
mod_final2 = lm(preciom~areaconst:estrato + areaconst:zona , data= data3)
summary(mod_final2)
## 
## Call:
## lm(formula = preciom ~ areaconst:estrato + areaconst:zona, data = data3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1526.67   -46.63   -11.90    37.05   870.74 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                1.155e+02  4.425e+00  26.103  < 2e-16 ***
## areaconst:estrato3         2.491e-01  2.723e-01   0.915   0.3604    
## areaconst:estrato4         1.231e+00  2.700e-01   4.558 5.28e-06 ***
## areaconst:estrato5         1.832e+00  2.681e-01   6.834 9.21e-12 ***
## areaconst:estrato6         2.982e+00  2.680e-01  11.124  < 2e-16 ***
## areaconst:zonaZona Norte   4.897e-02  2.676e-01   0.183   0.8548    
## areaconst:zonaZona Oeste   5.193e-01  2.680e-01   1.938   0.0527 .  
## areaconst:zonaZona Oriente 2.156e-01  3.029e-01   0.712   0.4766    
## areaconst:zonaZona Sur     2.693e-03  2.670e-01   0.010   0.9920    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 128.6 on 5091 degrees of freedom
## Multiple R-squared:  0.8025, Adjusted R-squared:  0.8022 
## F-statistic:  2585 on 8 and 5091 DF,  p-value: < 2.2e-16

7.4 Validacion supuestos

Validación de distribución normal de los errores

plot(mod_final2$residuals)

muestra2 = sample(mod_final2$residuals, 4000)
shapiro.test(muestra2)
## 
##  Shapiro-Wilk normality test
## 
## data:  muestra2
## W = 0.78839, p-value < 2.2e-16

En el Shapiro-Wilk, con un P-Value del 2.2e-16 < 5%, por ende, los errores del modelo no se distribuyen normal. En el Cramer test, con P-value del 2.2e-16, tambien se muestra que los errores no se distribuyen normal

Validación de errores tienen media cero

mean(mod_final2$residuals)
## [1] -3.928764e-15

La media de los errores tienden a cero

Validación de errores tienen varianza constante

library(lmtest)
gqtest(mod_final2)
## 
##  Goldfeld-Quandt test
## 
## data:  mod_final2
## GQ = 1.6177, df1 = 2541, df2 = 2541, p-value < 2.2e-16
## alternative hypothesis: variance increases from segment 1 to 2

Se puede ver que el P-Value de la prueba es inferior a la significancia del 5%, por ende, se rechaza la hipotesis nula, y se podría afirmar que hay problemas de heterocedasticidad en los errores

Validación de errores mutuamente independientes

dwtest(mod_final2)
## 
##  Durbin-Watson test
## 
## data:  mod_final2
## DW = 1.8028, p-value = 6.583e-13
## alternative hypothesis: true autocorrelation is greater than 0

Se puede ver que el P-Value de la prueba es inferior a la significancia del 5%, por ende, se rechaza la hipotesis nula, y se podría afirmar que hay problemas de autocorrelación en los errores

SUGERENCIAS:

Para subsanar estos problemas encontrados en este modelo, se deben abordar diferentes técnicas, en primer lugar, se podrian hacer transformaciones a las relaciones entre la variable “areaconst” y “preciom”, con el objetivo de identificar si con dicha transformación se puede llegar a una relación lineal.

7.5 Predicción de precio

prediccion21 = predict(mod_final2,list(areaconst=300, zona ="Zona Sur", estrato ="4"))
prediccion22 = predict(mod_final2,list(areaconst=300, zona ="Zona Sur", estrato ="5"))

prediccion21
##        1 
## 485.5011
prediccion22
##        1 
## 665.9959

Una vivienda tipo “Apartamento”, con 1 parqueadero, en la “Zona Norte”,va a costar alrededor de 485 millones para estrato 4 y 665 millones para estrato 5

7.6 Sugerencias de estrategia

Teniendo en cuenta que se tiene preaprobado un máximo de 850 millones, el María podría ofrecerle la vivienda en estrato 4 por 582 millones, obteniendo así una posible ganancia de 97 millones (20% sobre la compra), para la compra del apartamento en estrato 5, se sugiere venderlo en 798 para así optener el mismo margen del 20% sobre el precio estimado por el modelo.