Objetivo

Determinar la ecuación de regresión lineal mútiple y predecir valores de los datos de precios de casas de Durango, México.

Descripción

Se muestra cómo utilizar la función de regresión lineal múltiple y con ello se determinan las ecuaciones de regesión lineal múltiple para el conjuno de datos de precios de casas de Durango, México.

Proceso

Librerías

Leer los datos

Describir y explorar los datos

Limpiar datos

Conjunto de entrenamiento y conjunto de validación 70%, 30%

Determinar el modelo

Analizar el modelo

Realiza predicciones con conjunto de datos de validación

Realizar predicciones con datos nuevos

Interpretar el caso

Librerias

library(readr)
library(knitr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(caret)
## Warning: package 'caret' was built under R version 4.0.3
## Loading required package: lattice
## Loading required package: ggplot2

Leer los datos

datos <- read.csv('C:/Users/Blue/Documents/casas.csv', encoding = "UTF-8")
kable(head(datos))
precio estacionamientos recamaras ba.U.FFFD.os habitaciones agnio.construccion construccion terreno calle.domicilio colonia.fraccionamiento ciudad descripcion
1780000 2 3 2 5 2020 169 126 Privada San Fernanda San Fernando- Durango Durango Ubicadas en la salida Mazatl<U+FFFD>n- <U+FFFD>stas casas de tres habitaciones- est<U+FFFD>n dentro del residencial privado San Fernanda- mismo que cuenta con caseta de vigilancia-…
650000 1 3 1 4 NA 90 90 Prolongaci<U+FFFD>n Jos<U+FFFD> Mar<U+FFFD>a Pino Su<U+FFFD>rez Centro Durango Casa un piso 3 recamaras 2 ba<U+FFFD>os boiler solar y de paso cochera patio cisterna todos los servicios ambiente familiar….todo cerca- mucho transporte.- buenos servicios.
590000 2 2 2 4 NA 63 90 Centro Centro Durango Casa un piso bonita 3 recamaras 2 ba<U+FFFD>os ambiente familiar boiler solar y de paso cochera todos los servicios
1300000 2 3 2 5 NA 130 120 Centro Centro Durango Casa en venta nueva <U+FFFD>reas verdes casa en dos plantas dise<U+FFFD>o moderno acabados de primera- cuenta con 3 recamaras con closets- cocina equipada acero inoxidable-2 ba<U+FFFD>os y medio- terraza- patio amplio jard<U+FFFD>n <U+FFFD>rea de servicio hidro gas estacionario cisterna cristales tintex de primera cochera dos autos bonita zona ambiente familiar aplican todos los creditos
1000000 2 2 1 3 NA 110 160 Centro Centro Durango Bonita casa en dos pisos dise<U+FFFD>o moderno 3 recamras 2 ba<U+FFFD>os y medio cochera todos los servicios ambiente familiar se aceptan todos los creditos
465000 2 3 1 4 NA 53 89 Centro Centro Durango Bonita casa con 2 recamras un ba<U+FFFD>o boiler solar patio jardin cochera dise<U+FFFD>o moderno

Explorar los datos

summary(datos)
##      precio        estacionamientos   recamaras      ba.U.FFFD.os  
##  Min.   : 462000   Min.   :0.000    Min.   :1.000   Min.   :1.000  
##  1st Qu.: 655000   1st Qu.:0.000    1st Qu.:2.000   1st Qu.:1.000  
##  Median :1000000   Median :1.000    Median :3.000   Median :2.000  
##  Mean   :1514383   Mean   :1.125    Mean   :2.824   Mean   :1.706  
##  3rd Qu.:1938500   3rd Qu.:2.000    3rd Qu.:3.000   3rd Qu.:2.000  
##  Max.   :8200000   Max.   :3.000    Max.   :5.000   Max.   :4.000  
##                    NA's   :3                                       
##   habitaciones   agnio.construccion  construccion       terreno     
##  Min.   :2.000   Min.   :1995       Min.   : 47.00   Min.   : 47.0  
##  1st Qu.:4.000   1st Qu.:2020       1st Qu.: 75.75   1st Qu.: 90.0  
##  Median :4.500   Median :2020       Median :131.00   Median :126.0  
##  Mean   :4.569   Mean   :2017       Mean   :151.12   Mean   :148.7  
##  3rd Qu.:5.000   3rd Qu.:2020       3rd Qu.:169.75   3rd Qu.:166.0  
##  Max.   :8.000   Max.   :2020       Max.   :606.00   Max.   :512.0  
##                  NA's   :26         NA's   :1                       
##  calle.domicilio    colonia.fraccionamiento    ciudad         
##  Length:51          Length:51               Length:51         
##  Class :character   Class :character        Class :character  
##  Mode  :character   Mode  :character        Mode  :character  
##                                                               
##                                                               
##                                                               
##                                                               
##  descripcion       
##  Length:51         
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
str(datos)
## 'data.frame':    51 obs. of  12 variables:
##  $ precio                 : int  1780000 650000 590000 1300000 1000000 465000 780000 464520 660000 580000 ...
##  $ estacionamientos       : int  2 1 2 2 2 2 2 0 0 NA ...
##  $ recamaras              : int  3 3 2 3 2 3 1 2 3 3 ...
##  $ ba.U.FFFD.os           : num  2 1 2 2 1 1 1 1 1 1 ...
##  $ habitaciones           : num  5 4 4 5 3 4 2 3 4 4 ...
##  $ agnio.construccion     : int  2020 NA NA NA NA NA 2020 2020 2020 2020 ...
##  $ construccion           : num  169 90 63 130 110 53 84 47 73 65 ...
##  $ terreno                : num  126 90 90 120 160 89 90 98 112 103 ...
##  $ calle.domicilio        : chr  "Privada San Fernanda" "Prolongaci<U+FFFD>n Jos<U+FFFD> Mar<U+FFFD>a Pino Su<U+FFFD>rez" "Centro" "Centro" ...
##  $ colonia.fraccionamiento: chr  "San Fernando- Durango" "Centro" "Centro" "Centro" ...
##  $ ciudad                 : chr  "Durango" "Durango" "Durango" "Durango" ...
##  $ descripcion            : chr  "Ubicadas en la salida Mazatl<U+FFFD>n- <U+FFFD>stas casas de tres habitaciones- est<U+FFFD>n dentro del residen"| __truncated__ "Casa un piso 3 recamaras 2 ba<U+FFFD>os boiler solar y de paso cochera patio cisterna todos los servicios ambie"| __truncated__ "Casa un piso bonita 3 recamaras 2 ba<U+FFFD>os ambiente familiar boiler solar y de paso cochera todos los servicios" "Casa en venta nueva <U+FFFD>reas verdes casa en dos plantas dise<U+FFFD>o moderno acabados de primera- cuenta c"| __truncated__ ...

Sólo interesan los datos: * Como variable dependiente: * precio. * Como variables independientes; * estacioamiento, Cuántos estacionamientos * recamaras, Cuántas recámaras * banios, Cuántos baños * construccion. Cantidad de metros contruidos * terreno: Cantidad de metros

Limpiar datos

Quitar columnas que no se necesitan

Poner banio al nombre de la variable

Poner 0 los NA en todas las variables porque no tiene estacionamiento

datos <- datos[,c(1,2,3,4,7,8)]
names(datos)[4] <- c("banio")
datos <- mutate(datos, estacionamientos = ifelse(is.na(estacionamientos) ,0,estacionamientos ))


head(datos)
##    precio estacionamientos recamaras banio construccion terreno
## 1 1780000                2         3     2          169     126
## 2  650000                1         3     1           90      90
## 3  590000                2         2     2           63      90
## 4 1300000                2         3     2          130     120
## 5 1000000                2         2     1          110     160
## 6  465000                2         3     1           53      89

Conjunto de entrenamiento y conjunto de validación 70%, 30%

set.seed(2020)
entrena <- createDataPartition(y = datos$precio, p = 0.7, list = FALSE, times = 1)

# Datos entrenamiento
datos.entrenamiento <- datos[entrena, ]  # [renglones, columna]

# Datos validación
datos.validacion <- datos[-entrena, ]

kable(head(datos.entrenamiento, 10), caption = "Datos de entrenamiento  (primeros diez)", row.names = 1:nrow(datos.entrenamiento))
## Warning in if (is.na(row.names)) row.names = has_rownames(x): la condición tiene
## longitud > 1 y sólo el primer elemento será usado
## Warning in if (row.names) {: la condición tiene longitud > 1 y sólo el primer
## elemento será usado
Datos de entrenamiento (primeros diez)
precio estacionamientos recamaras banio construccion terreno
2 650000 1 3 1 90 90
3 590000 2 2 2 63 90
4 1300000 2 3 2 130 120
5 1000000 2 2 1 110 160
7 780000 2 1 1 84 90
8 464520 0 2 1 47 98
10 580000 0 3 1 65 103
11 1550000 2 3 2 155 126
12 640000 0 2 1 NA 90
14 480000 0 2 1 53 90
kable(head(datos.validacion, 10), caption = "Datos de validación  (primeros diez)", row.names = 1:nrow(datos.entrenamiento))
## Warning in if (is.na(row.names)) row.names = has_rownames(x): la condición tiene
## longitud > 1 y sólo el primer elemento será usado
## Warning in if (row.names) {: la condición tiene longitud > 1 y sólo el primer
## elemento será usado
Datos de validación (primeros diez)
precio estacionamientos recamaras banio construccion terreno
1 1780000 2 3 2.0 169.00 126
6 465000 2 3 1.0 53.00 89
9 660000 0 3 1.0 73.00 112
13 2350000 2 3 2.5 194.56 203
16 1000000 2 3 2.0 110.00 120
23 660000 0 3 1.0 73.00 112
25 1750000 1 3 2.0 154.00 130
32 2100000 0 4 2.0 151.00 151
34 640000 1 2 1.0 60.00 90
35 462000 1 2 1.0 47.00 90

Determinar el modelo

modelo <- lm(formula = precio ~ ., datos.entrenamiento)


summary(modelo)
## 
## Call:
## lm(formula = precio ~ ., data = datos.entrenamiento)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -943487 -164375   38426  201582 1255070 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       -980740     287915  -3.406 0.001840 ** 
## estacionamientos   -75542      85311  -0.885 0.382714    
## recamaras          -73962     110674  -0.668 0.508896    
## banio              599112     145930   4.105 0.000272 ***
## construccion         1786       1663   1.074 0.291058    
## terreno              9738       1719   5.666 3.18e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 417700 on 31 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.9332, Adjusted R-squared:  0.9225 
## F-statistic: 86.68 on 5 and 31 DF,  p-value: < 2.2e-16

Realizar predicciones con conjunto de datos de validación

prediccion <- predict(object = modelo, newdata =  datos.validacion)

prediccion
##         1         6         9        13        16        23        25        32 
## 1373425.4  206790.9  617581.9 2468495.1 1209608.0  617581.9 1461127.3 1661854.7 
##        34        35        45        49        51 
##  378536.5  355315.7 1085880.3  916617.4 2928514.4
predicciones <- data.frame(datos.validacion, prediccion)

kable(predicciones)
precio estacionamientos recamaras banio construccion terreno prediccion
1 1780000 2 3 2.0 169.00 126 1373425.4
6 465000 2 3 1.0 53.00 89 206790.9
9 660000 0 3 1.0 73.00 112 617581.9
13 2350000 2 3 2.5 194.56 203 2468495.1
16 1000000 2 3 2.0 110.00 120 1209608.0
23 660000 0 3 1.0 73.00 112 617581.9
25 1750000 1 3 2.0 154.00 130 1461127.3
32 2100000 0 4 2.0 151.00 151 1661854.7
34 640000 1 2 1.0 60.00 90 378536.5
35 462000 1 2 1.0 47.00 90 355315.7
45 960000 1 3 2.0 162.00 90 1085880.3
49 1200000 1 3 1.5 115.00 112 916617.4
51 3450000 2 3 2.0 200.00 280 2928514.4

Realizar predicciones con datos nuevos

estacionamientos

banio

recamaras

construccion

terreno

estacionamientos <- 2
recamaras <- 3
banio <- 2
construccion <- 250
terreno = 201

nuevos.datos <- data.frame(estacionamientos=estacionamientos,recamaras=recamaras, banio=banio, construccion=construccion,terreno=terreno)

prediccion <- predict(object = modelo, 
                      newdata = nuevos.datos)
                      
                      

paste("El valor del precio predicho es: ", round(prediccion, 2))
## [1] "El valor del precio predicho es:  2248490.41"

Interpretacion

De acuerdo al caso sobre costo de casas de durango podemos sacar las variables que usaremos, que son la variable dependiente e independientes. Donde el precio es nuestra variable dependiente y las independientes son estacionamientos, baño, recamaras, construccion y terreno todo esto influye en el costo de una casa.

En cuanto al valor de Multiple R-squared tenemos un valor de 0.9332 y Adjusted R-squared con 0.9225 aproximadamente un 90% lo cual nos indica que se puede hacer una buena prediccion.

En el caso se tiene un ejemplo de prediccion con los siguientes datos: estacionamientos:2, recamaras:3,baños:2, contruccion: 250 y terreno:201, al hacer la prediccion nos da un total de 2248490.41.

Como conclusion final nos damos cuenta de que el modelo de regresion lineal multiple es muy bueno ya que sus predicciones al considerar varias variables los resultados son muy acertados.