R Markdown

Utilizar Base de datos

## Downloading GitHub repo centromagis/paqueteMODELOS@HEAD
## stringi     (1.8.3  -> 1.8.4  ) [CRAN]
## rlang       (1.1.1  -> 1.1.4  ) [CRAN]
## glue        (1.6.2  -> 1.7.0  ) [CRAN]
## cli         (3.6.1  -> 3.6.3  ) [CRAN]
## Rcpp        (1.0.11 -> 1.0.13 ) [CRAN]
## digest      (0.6.34 -> 0.6.37 ) [CRAN]
## curl        (5.2.0  -> 5.2.2  ) [CRAN]
## fastmap     (1.1.1  -> 1.2.0  ) [CRAN]
## xfun        (0.46   -> 0.47   ) [CRAN]
## matrixStats (1.3.0  -> 1.4.0  ) [CRAN]
## htmltools   (0.5.7  -> 0.5.8.1) [CRAN]
## Installing 11 packages: stringi, rlang, glue, cli, Rcpp, digest, curl, fastmap, xfun, matrixStats, htmltools
## Installing packages into 'C:/Users/Usuario/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## 
##   There is a binary version available but the source version is later:
##             binary source needs_compilation
## matrixStats  1.3.0  1.4.0              TRUE
## 
##   Binaries will be installed
## package 'stringi' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'stringi'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\stringi\libs\x64\stringi.dll
## a
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\stringi\libs\x64\stringi.dll:
## Permission denied
## Warning: restored 'stringi'
## package 'rlang' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'rlang'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\rlang\libs\x64\rlang.dll
## a C:\Users\Usuario\AppData\Local\R\win-library\4.3\rlang\libs\x64\rlang.dll:
## Permission denied
## Warning: restored 'rlang'
## package 'glue' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'glue'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\glue\libs\x64\glue.dll
## a C:\Users\Usuario\AppData\Local\R\win-library\4.3\glue\libs\x64\glue.dll:
## Permission denied
## Warning: restored 'glue'
## package 'cli' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'cli'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\cli\libs\x64\cli.dll a
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\cli\libs\x64\cli.dll:
## Permission denied
## Warning: restored 'cli'
## package 'Rcpp' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'Rcpp'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\Rcpp\libs\x64\Rcpp.dll
## a C:\Users\Usuario\AppData\Local\R\win-library\4.3\Rcpp\libs\x64\Rcpp.dll:
## Permission denied
## Warning: restored 'Rcpp'
## package 'digest' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'digest'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\digest\libs\x64\digest.dll
## a C:\Users\Usuario\AppData\Local\R\win-library\4.3\digest\libs\x64\digest.dll:
## Permission denied
## Warning: restored 'digest'
## package 'curl' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'curl'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\curl\libs\x64\curl.dll
## a C:\Users\Usuario\AppData\Local\R\win-library\4.3\curl\libs\x64\curl.dll:
## Permission denied
## Warning: restored 'curl'
## package 'fastmap' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'fastmap'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\fastmap\libs\x64\fastmap.dll
## a
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\fastmap\libs\x64\fastmap.dll:
## Permission denied
## Warning: restored 'fastmap'
## package 'xfun' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'xfun'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\xfun\libs\x64\xfun.dll
## a C:\Users\Usuario\AppData\Local\R\win-library\4.3\xfun\libs\x64\xfun.dll:
## Permission denied
## Warning: restored 'xfun'
## package 'matrixStats' successfully unpacked and MD5 sums checked
## package 'htmltools' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'htmltools'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\00LOCK\htmltools\libs\x64\htmltools.dll
## a
## C:\Users\Usuario\AppData\Local\R\win-library\4.3\htmltools\libs\x64\htmltools.dll:
## Permission denied
## Warning: restored 'htmltools'
## 
## The downloaded binary packages are in
##  C:\Users\Usuario\AppData\Local\Temp\RtmpeEIMq8\downloaded_packages
## ── R CMD build ─────────────────────────────────────────────────────────────────
##   
  
  
✔  checking for file 'C:\Users\Usuario\AppData\Local\Temp\RtmpeEIMq8\remotes47207acf7523\Centromagis-paqueteMODELOS-78ce06f/DESCRIPTION'
## 
  
  
  
─  preparing 'paqueteMODELOS': (2.8s)
##    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 'paqueteMODELOS_0.1.0.tar.gz'
## 
  
   
## 
## Installing package into 'C:/Users/Usuario/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## Loading required package: boot
## Loading required package: broom
## Warning: package 'broom' was built under R version 4.3.3
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.3.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.3
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: gridExtra
## Warning: package 'gridExtra' was built under R version 4.3.2
## Loading required package: knitr
## Warning: package 'knitr' was built under R version 4.3.3
## Loading required package: summarytools
## Warning: package 'summarytools' was built under R version 4.3.2
## Warning: package 'bbmle' was built under R version 4.3.3
data("vivienda")
str(vivienda)
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ id          : num [1:8322] 1147 1169 1350 5992 1212 ...
##  $ zona        : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : chr [1:8322] NA NA NA "02" ...
##  $ estrato     : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
##  - attr(*, "spec")=List of 3
##   ..$ cols   :List of 13
##   .. ..$ id          : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ zona        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ piso        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ estrato     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ preciom     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ areaconst   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ parqueaderos: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ banios      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ habitaciones: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ tipo        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ barrio      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ longitud    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ latitud     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
##   ..$ delim  : chr ";"
##   ..- attr(*, "class")= chr "col_spec"
##  - attr(*, "problems")=<externalptr>

Cantidad de datos faltantes

library(mice)
## Warning: package 'mice' was built under R version 4.3.2
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
md.pattern(vivienda)

##      preciom id zona estrato areaconst banios habitaciones tipo barrio longitud
## 4808       1  1    1       1         1      1            1    1      1        1
## 1909       1  1    1       1         1      1            1    1      1        1
## 876        1  1    1       1         1      1            1    1      1        1
## 726        1  1    1       1         1      1            1    1      1        1
## 1          1  0    0       0         0      0            0    0      0        0
## 2          0  0    0       0         0      0            0    0      0        0
##            2  3    3       3         3      3            3    3      3        3
##      latitud parqueaderos piso     
## 4808       1            1    1    0
## 1909       1            1    0    1
## 876        1            0    1    1
## 726        1            0    0    2
## 1          0            0    0   12
## 2          0            0    0   13
##            3         1605 2638 4275

Se puede evidenciar que para la variable piso faltan 2638 datos, para la variable parqueaderos 1605 datos,mientras que para las demas variables faltan alrededor de 2 o 3 datos.

id, eliminar los registros con N/A que no tengan id

vivienda<-vivienda[c(1:8319),]

Dentro de la variable id hay tres registros sin datos y cuando se observan los demas datos de estos registros la mayoria estan vacias, por lo cual se procede a eliminar los registros con id vacios.

datos faltantes

md.pattern(vivienda)

##      id zona estrato preciom areaconst banios habitaciones tipo barrio longitud
## 4808  1    1       1       1         1      1            1    1      1        1
## 1909  1    1       1       1         1      1            1    1      1        1
## 876   1    1       1       1         1      1            1    1      1        1
## 726   1    1       1       1         1      1            1    1      1        1
##       0    0       0       0         0      0            0    0      0        0
##      latitud parqueaderos piso     
## 4808       1            1    1    0
## 1909       1            1    0    1
## 876        1            0    1    1
## 726        1            0    0    2
##            0         1602 2635 4237

Con estos registros eliminados se puede observar que ya se pudo arreglar los datos faltantes de las demas variables

Variable Piso

Calcular la tabla de frecuencia
tabla_frecuencia <- table(vivienda$piso)
Encontrar el valor o los valores con la frecuencia máxima (moda)
moda <- names(tabla_frecuencia[tabla_frecuencia == max(tabla_frecuencia)])
Imprimir la moda
cat("La moda es:", moda, "\n")
## La moda es: 02
Reemplazar moda 02 para los N/A en variable piso
vivienda$piso[is.na(vivienda$piso)]<-"02"

Varaible parqueaderos

Calcular la tabla de frecuencia
tabla_frecuencia <- table(vivienda$parqueaderos)
Encontrar el valor o los valores con la frecuencia máxima (moda)
moda <- names(tabla_frecuencia[tabla_frecuencia == max(tabla_frecuencia)])
Imprimir la moda
cat("La moda es:", moda, "\n")
## La moda es: 1
Reemplazar moda 02 para los N/A en variable piso
vivienda$parqueaderos[is.na(vivienda$parqueaderos)]<-1
Se procede a realizar imputación de los datos para las variables piso y parqueaderos, donde se calculola moda de estas variables y para la variable piso se encontro que la moda es 02 y para parqueaderos la moda es 1
se procede a multiplicar la variable preciom por un millon para tener los valores en pesos.
vivienda$preciom<-vivienda$preciom*1000000
la variable piso se vuelve numerica
vivienda$piso <- as.numeric(vivienda$piso)
sin datos faltantes
md.pattern(vivienda)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 8319  1    1    1       1       1         1            1      1            1
##       0    0    0       0       0         0            0      0            0
##      tipo barrio longitud latitud  
## 8319    1      1        1       1 0
##         0      0        0       0 0
Al validar nuevamente la cantidad de datos faltantes, se puede observar que ya todas las variables estan completas
Se realiza filtro de solo apartamentos, se muestra los primeros 3 registros para comprobar y tambien se realiza una tabla de frecuencias de la variable tipo para confirmar que solo estan los apartamentos,donde se puede observar que hay 5100 apartamentos.
apartamentos<-vivienda%>%filter(vivienda$tipo=="Apartamento")
head(apartamentos, n=3)
## # A tibble: 3 × 13
##      id zona     piso estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <dbl>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1212 Zona N…     1       5  2.6 e8        90            1      2            3
## 2  1724 Zona N…     1       5  2.40e8        87            1      3            3
## 3  2326 Zona N…     1       4  2.20e8        52            2      2            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
tabla_frecuencia <- table(apartamentos$tipo)
tabla_frecuencia
## 
## Apartamento 
##        5100
Eliminar columnas de un dataframe
borrar <- c("barrio","longitud","latitud","tipo","id")
vivienda2 <- apartamentos[ , !(names(apartamentos) %in% borrar)]
head(vivienda2, n=9)
## # A tibble: 9 × 8
##   zona        piso estrato   preciom areaconst parqueaderos banios habitaciones
##   <chr>      <dbl>   <dbl>     <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1 Zona Norte     1       5 260000000        90            1      2            3
## 2 Zona Norte     1       5 240000000        87            1      3            3
## 3 Zona Norte     1       4 220000000        52            2      2            3
## 4 Zona Norte     1       5 310000000       137            2      3            4
## 5 Zona Norte     2       6 520000000        98            2      2            2
## 6 Zona Norte     3       4 320000000       108            2      3            3
## 7 Zona Norte     3       5 385000000       103            2      2            3
## 8 Zona Norte     3       3 100000000        49            1      1            2
## 9 Zona Norte     4       3 175000000        80            1      2            3

se realiza escalamiento de las variables cuantitativas o numericas.

vivienda2$zona<-as.factor(vivienda2$zona)
vivienda2$estrato<-as.factor(vivienda2$estrato)
vivienda2$areaconst<-scale(vivienda2$areaconst)
vivienda2$parqueaderos<-scale(vivienda2$parqueaderos)
vivienda2$piso<-scale(vivienda2$piso)
vivienda2$banios<-scale(vivienda2$banios)
vivienda2$habitaciones<-scale(vivienda2$habitaciones)

Graficos de dispersión.

se realiza un grafico de dispersión de la variable area construida con el precio, resultando una relación del 82.87%, esto significa que esta variable es muy buena para realizar un modelo de regresión multiple en relación con el precio.
plot(x = vivienda2$areaconst, y = vivienda2$preciom)

result = cor(vivienda2$areaconst, y=vivienda2$preciom, method = "pearson")
result
##           [,1]
## [1,] 0.8287437
se realiza un grafico de dispersión de la variable parqueaderos con el precio, resultando una relación del 73.69%, esto significa que esta variable es muy buena para realizar un modelo de regresión multiple en relación con el precio.
plot(x = vivienda2$parqueaderos, y = vivienda2$preciom)

result2 = cor(vivienda2$parqueaderos, y=vivienda2$preciom, method = "pearson")
result2
##           [,1]
## [1,] 0.7369064
se realiza un grafico de dispersión de la variable piso con el precio, resultando una relación del 11.99%, esto significa que esta variable no es buena para realizar un modelo de regresión multiple en relación con el precio.
plot(x = vivienda2$piso, y = vivienda2$preciom)

result3 = cor(vivienda2$piso, y=vivienda2$preciom, method = "pearson")
result3
##           [,1]
## [1,] 0.1199949
se realiza un grafico de dispersión de la variable baños con el precio, resultando una relación del 74.04%, esto significa que esta variable es muy buena para realizar un modelo de regresión multiple en relación con el precio.
plot(x = vivienda2$banios, y = vivienda2$preciom)

result4 = cor(vivienda2$banios, y=vivienda2$preciom, method = "pearson")
result4
##           [,1]
## [1,] 0.7404732
se realiza un grafico de dispersión de la variable habitaciones con el precio, resultando una relación del 29.74%, esto significa que esta variable no es buena para realizar un modelo de regresión multiple en relación con el precio
plot(x = vivienda2$habitaciones, y = vivienda2$preciom)

result5 = cor(vivienda2$habitaciones, y=vivienda2$preciom, method = "pearson")
result5
##          [,1]
## [1,] 0.297494
se realiza graficos de dispersión y correlación de spearman para verificar de las variables dependientes cuales estan correcionales y poder quitarlas para no tener colinealidad en el modelo.
se obtiene un correlación del 66.43% entre las variables area construida y los parqueaderos
plot(x = vivienda2$areaconst, vivienda2$parqueaderos)

result6 = cor(vivienda2$areaconst, vivienda2$parqueaderos, method = "pearson")
result6
##           [,1]
## [1,] 0.6643946
se obtiene un correlación del 72.67% entre las variables area construida y los baños
plot(x = vivienda2$areaconst, vivienda2$banios)

result7 = cor(vivienda2$areaconst, vivienda2$banios, method = "pearson")
result7
##           [,1]
## [1,] 0.7267377
se obtiene un correlación del 62.38% entre las variables parqueaderos y baños
plot(x = vivienda2$parqueaderos, vivienda2$banios)

result6 = cor(vivienda2$parqueaderos, vivienda2$banios, method = "pearson")
result6
##           [,1]
## [1,] 0.6238342
De acuerdo a este analisis se puede dejar solo la variable area construida ya que con esta se puede lograr predecir las demas.
Se realiza una regresión con el factor zona y se puede encontrar que la zona oriente no es significativa para la predicción del precio, lo que podría estar significando que esta zona no aporta al modelo o a la predicción del precio, , ademas el valor p, nos indica que este modelo tiene al menos una variable significativa, lo que nos indica que las otras variables si son significativas.
dummieszona<-lm(vivienda2$preciom~vivienda2$zona)
summary(dummieszona)
## 
## Call:
## lm(formula = vivienda2$preciom ~ vivienda2$zona)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -582927114 -141291712  -52291712   57708288 1452708288 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                186583333   50199111   3.717 0.000204 ***
## vivienda2$zonaZona Norte    98578603   50699446   1.944 0.051906 .  
## vivienda2$zonaZona Oeste   481343780   50781149   9.479  < 2e-16 ***
## vivienda2$zonaZona Oriente -33986559   59122039  -0.575 0.565415    
## vivienda2$zonaZona Sur     110708378   50414790   2.196 0.028140 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 245900000 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
Se realiza una regresion para el factor estrato, encontrando que todos los estratos son significativos a la hora de predecir el precio, ademas el valor p, nos indica que este modelo tiene al menos una variable significativa.
dummiesestrato<-lm(vivienda2$preciom~vivienda2$estrato)
summary(dummiesestrato)
## 
## Call:
## lm(formula = vivienda2$preciom ~ vivienda2$estrato)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -574414407  -77494180  -23976526   38055556 1564989241 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        128976526    7978784  16.165  < 2e-16 ***
## vivienda2$estrato4  77967919    9624703   8.101 6.77e-16 ***
## vivienda2$estrato5 206034233    9311055  22.128  < 2e-16 ***
## vivienda2$estrato6 573437882    9755560  58.781  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 201700000 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

Modelo de Regresion Multiple

modelofinal<-lm(vivienda2$preciom~vivienda2$areaconst+vivienda2$zona+vivienda2$estrato)
summary(modelofinal)
## 
## Call:
## lm(formula = vivienda2$preciom ~ vivienda2$areaconst + vivienda2$zona + 
##     vivienda2$estrato)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -2.090e+09 -4.506e+07  2.676e+06  3.799e+07  9.520e+08 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                206172253   27903323   7.389 1.72e-13 ***
## vivienda2$areaconst        174378637    2400114  72.654  < 2e-16 ***
## vivienda2$zonaZona Norte    43338524   28113921   1.542    0.123    
## vivienda2$zonaZona Oeste   112377462   28469092   3.947 8.01e-05 ***
## vivienda2$zonaZona Oriente -14061773   32768827  -0.429    0.668    
## vivienda2$zonaZona Sur      35841316   28075937   1.277    0.202    
## vivienda2$estrato4          48012600    7034549   6.825 9.80e-12 ***
## vivienda2$estrato5          87436146    6864964  12.737  < 2e-16 ***
## vivienda2$estrato6         256806901    8312584  30.894  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.36e+08 on 5091 degrees of freedom
## Multiple R-squared:  0.7794, Adjusted R-squared:  0.779 
## F-statistic:  2248 on 8 and 5091 DF,  p-value: < 2.2e-16
se puede observar que las variables zona norte, oriente y sur, no son significativas para el modelo, lo que quiere decir que los betas para estas variables son ceros. Con el estadistico F y su p-valor podemos inferir que hay almenos una variable significativa. El R cuadraro de este modelo es del 77.9%, lo que significa que los predictores pueden explicar el 77.9% de la variable dependiente.
Se realiza grafico de Q-Q Plot donde se puede observar que los residuales no tienen un comportamiento normal
qqnorm(modelofinal$residuals)
qqline(modelofinal$residuals,col="red")

library(nortest)
ad.test(modelofinal$residuals)
## 
##  Anderson-Darling normality test
## 
## data:  modelofinal$residuals
## A = 257.96, p-value < 2.2e-16
se realiza la prueba de Anderson Darling, donde se puede corroborar que no hay suficientes evidencias para rechazar la hipotesis alternativa de que los residuales tienen una distrubución normal.
Para validar que la varianza es constante, se realiza un gráfico con los valores ajustados y los residuales, donde observando la gráfica, se podría llegar a confirmar que la varianza no es constante,debido a que se puede observar como un embudo, esto quiere decir que la varianza no es constante,pero para poder corroborar esta afirmación realizaremos la prueba de breusch-pagan.
plot(modelofinal$fitted.values,modelofinal$residuals)

library(lmtest)
## Warning: package 'lmtest' was built under R version 4.3.2
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.2
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(modelofinal)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelofinal
## BP = 1251.6, df = 8, p-value < 2.2e-16
se realiza la prueba de breusch-pagan, donde se puede corroborar que no hay suficientes evidencias para rechazar la hipotesis alternativa de que la varianza no es constante.
Para este caso el supuesto de independencia no se realizará validación debido a que los datos no están tomados en el tiempo, por lo cual se asumirá que los datos son independientes. Aunque si se realiza la prueba de durbin-watson, se puede obtener que los datos no son independientes.
dwtest(modelofinal)
## 
##  Durbin-Watson test
## 
## data:  modelofinal
## DW = 1.7707, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
para poder realizar una mejora o que se pueda cumplir cada unos de los supuestos, se puede realizaruna transformación a la variable de area construida, ya sea elevandola al cuadrado, sacando el logaritmoo logaritmo natural, o en su defecto se puede realizar una transformación de Box-Cox para encontrar el optimo para la transformación de la variable.

Se particiona la base total en dos: Base de entrenamiento con un porcentaje del 70% y base de prueba con un porcentaje del 30%.

library(caTools)
## Warning: package 'caTools' was built under R version 4.3.3
set.seed(80)
#specify split
split = sample.split(vivienda2$preciom, SplitRatio=0.7)

#create training set
df_train = subset(vivienda2, split==TRUE)

#create test set
df_test = subset(vivienda2, split==FALSE)
Se realiza el modelo de regresión con la base de entrenamiento, obteniendo:
modeloregresion<-lm(preciom~areaconst+zona+estrato,data=df_train)
summary(modeloregresion)
## 
## Call:
## lm(formula = preciom ~ areaconst + zona + estrato, data = df_train)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -2.050e+09 -4.538e+07  1.164e+06  3.733e+07  9.520e+08 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      204004874   35141468   5.805 6.98e-09 ***
## areaconst        171001713    2918510  58.592  < 2e-16 ***
## zonaZona Norte    43131708   35359852   1.220  0.22262    
## zonaZona Oeste   110736743   35786301   3.094  0.00199 ** 
## zonaZona Oriente  -9918734   40479302  -0.245  0.80645    
## zonaZona Sur      32557782   35314077   0.922  0.35662    
## estrato4          52404868    8588244   6.102 1.16e-09 ***
## estrato5          92737737    8386103  11.059  < 2e-16 ***
## estrato6         267839792   10128257  26.445  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 139800000 on 3608 degrees of freedom
## Multiple R-squared:  0.7709, Adjusted R-squared:  0.7704 
## F-statistic:  1518 on 8 and 3608 DF,  p-value: < 2.2e-16
El R cuadraro de este modelo es del 77.04%,lo que significa que los predictores pueden explicar el 77.04% de la variable dependiente.
prediccionesPrueba<-predict(modeloregresion, newdata=df_test)
plot(prediccionesPrueba,type="l",col="red")

calcular el error cuadrático medio
MSE<-mean((modeloregresion$residuals)^2)
MSE
## [1] 1.949111e+16
segun el valor MSE se puede interpretar que el modelo tiene un ajuste pobre, los valores predichos estan lejos de los valores reales.
Error medio absoluto
library(Metrics)
## Warning: package 'Metrics' was built under R version 4.3.3
mae(df_train$preciom,predict(modeloregresion))
## [1] 78774393
Un MAE de 78,774,393 indica que, en promedio, las predicciones del modelo se desvían de los valores observados por aproximadamente 78,774,393 unidades. Esto sugiere que el modelo tiene una precisión baja si las unidades de medida son grandes.