Determinar la ecuación de regresión lineal mútiple y predecir valores de los datos de precios de casas de Durango, México.
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
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) # Para particionar datos
## Loading required package: lattice
## Loading required package: ggplot2
datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/FundamentosMachineLearning/master/datos/datos%20precios%20de%20casas.csv", encoding = "UTF-8")
kable(head(datos))
| precio | estacionamientos | recamaras | ba.f1.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 |
| 650000 | 1 | 3 | 1 | 4 | NA | 90 | 90 | Prolongaci |
Centro | Durango | Casa un piso 3 recamaras 2 ba |
| 590000 | 2 | 2 | 2 | 4 | NA | 63 | 90 | Centro | Centro | Durango | Casa un piso bonita 3 recamaras 2 ba |
| 1300000 | 2 | 3 | 2 | 5 | NA | 130 | 120 | Centro | Centro | Durango | Casa en venta nueva |
| 1000000 | 2 | 2 | 1 | 3 | NA | 110 | 160 | Centro | Centro | Durango | Bonita casa en dos pisos dise |
| 465000 | 2 | 3 | 1 | 4 | NA | 53 | 89 | Centro | Centro | Durango | Bonita casa con 2 recamras un ba |
summary(datos)
## precio estacionamientos recamaras ba.f1.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.f1.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<f3>n Jos<e9> Mar<ed>a Pino Su<e1>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<e1>n- <e9>stas casas de tres habitaciones- est<e1>n dentro del residencial privado"| __truncated__ "Casa un piso 3 recamaras 2 ba<f1>os boiler solar y de paso cochera patio cisterna todos los servicios ambiente "| __truncated__ "Casa un piso bonita 3 recamaras 2 ba<f1>os ambiente familiar boiler solar y de paso cochera todos los servicios" "Casa en venta nueva <e1>reas verdes casa en dos plantas dise<f1>o moderno acabados de primera- cuenta con 3 rec"| __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
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
# Exportar los datos limpios
# write.csv(datos, "../datos/precio.casas.limpio.csv")
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))
| 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))
| 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 |
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
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 |
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"
Expresar ideas sobre el caso, individuales, innovadoras, constructivas, enriquecedoras, claras, consistentes, hiladas. de 80 a 100 palabras