.

#install.packages("corrplot")
library(corrplot)
## corrplot 0.95 loaded

Importar la base de datos

#file.choose()
df <- read.csv("/Users/eurielgomeztamez/Library/Mobile Documents/com~apple~CloudDocs/Tec/7/M2/HousePriceData.csv")
# Convertir variables categóricas a factores
df$Parking <- as.factor(df$Parking)
df$City_Category <- as.factor(df$City_Category)

# Revisar valores faltantes
colSums(is.na(df))
##   Observation     Dist_Taxi   Dist_Market Dist_Hospital        Carpet 
##             0             0             0             0             7 
##       Builtup       Parking City_Category      Rainfall   House_Price 
##             0             0             0             0             0
# Eliminar observaciones con datos faltantes
df_limpio <- na.omit(df)

str(df_limpio)
## 'data.frame':    898 obs. of  10 variables:
##  $ Observation  : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Dist_Taxi    : int  9796 8294 11001 8301 10510 6665 13153 5882 7495 8233 ...
##  $ Dist_Market  : int  5250 8186 14399 11188 12629 5142 11869 9948 11589 7067 ...
##  $ Dist_Hospital: int  10703 12694 16991 12289 13921 9972 17811 13315 13370 11400 ...
##  $ Carpet       : int  1659 1461 1340 1451 1770 1442 1542 1261 1090 1030 ...
##  $ Builtup      : int  1961 1752 1609 1748 2111 1733 1858 1507 1321 1235 ...
##  $ Parking      : Factor w/ 4 levels "Covered","No Parking",..: 4 3 3 1 3 4 2 4 3 4 ...
##  $ City_Category: Factor w/ 3 levels "CAT A","CAT B",..: 2 2 1 2 2 2 1 3 2 3 ...
##  $ Rainfall     : int  530 210 720 620 450 760 1030 1020 680 1130 ...
##  $ House_Price  : int  6649000 3982000 5401000 5373000 4662000 4526000 7224000 3772000 4631000 4415000 ...
##  - attr(*, "na.action")= 'omit' Named int [1:7] 62 240 425 470 527 547 576
##   ..- attr(*, "names")= chr [1:7] "62" "240" "425" "470" ...
summary(df_limpio)
##   Observation      Dist_Taxi      Dist_Market    Dist_Hospital  
##  Min.   :  1.0   Min.   :  146   Min.   : 1666   Min.   : 3227  
##  1st Qu.:236.2   1st Qu.: 6488   1st Qu.: 9368   1st Qu.:11305  
##  Median :468.5   Median : 8230   Median :11166   Median :13194  
##  Mean   :468.7   Mean   : 8248   Mean   :11026   Mean   :13098  
##  3rd Qu.:701.8   3rd Qu.: 9969   3rd Qu.:12676   3rd Qu.:14866  
##  Max.   :932.0   Max.   :20662   Max.   :20945   Max.   :23294  
##      Carpet         Builtup              Parking    City_Category
##  Min.   :  775   Min.   :  932   Covered     :181   CAT A:317    
##  1st Qu.: 1317   1st Qu.: 1576   No Parking  :141   CAT B:348    
##  Median : 1478   Median : 1774   Not Provided:223   CAT C:233    
##  Mean   : 1511   Mean   : 1794   Open        :353                
##  3rd Qu.: 1654   3rd Qu.: 1986                                   
##  Max.   :24300   Max.   :12730                                   
##     Rainfall       House_Price       
##  Min.   :-110.0   Min.   :  1492000  
##  1st Qu.: 600.0   1st Qu.:  4643000  
##  Median : 780.0   Median :  5860500  
##  Mean   : 785.7   Mean   :  6092597  
##  3rd Qu.: 970.0   3rd Qu.:  7195750  
##  Max.   :1560.0   Max.   :150000000

Entender la base de datos

summary(df_limpio)
##   Observation      Dist_Taxi      Dist_Market    Dist_Hospital  
##  Min.   :  1.0   Min.   :  146   Min.   : 1666   Min.   : 3227  
##  1st Qu.:236.2   1st Qu.: 6488   1st Qu.: 9368   1st Qu.:11305  
##  Median :468.5   Median : 8230   Median :11166   Median :13194  
##  Mean   :468.7   Mean   : 8248   Mean   :11026   Mean   :13098  
##  3rd Qu.:701.8   3rd Qu.: 9969   3rd Qu.:12676   3rd Qu.:14866  
##  Max.   :932.0   Max.   :20662   Max.   :20945   Max.   :23294  
##      Carpet         Builtup              Parking    City_Category
##  Min.   :  775   Min.   :  932   Covered     :181   CAT A:317    
##  1st Qu.: 1317   1st Qu.: 1576   No Parking  :141   CAT B:348    
##  Median : 1478   Median : 1774   Not Provided:223   CAT C:233    
##  Mean   : 1511   Mean   : 1794   Open        :353                
##  3rd Qu.: 1654   3rd Qu.: 1986                                   
##  Max.   :24300   Max.   :12730                                   
##     Rainfall       House_Price       
##  Min.   :-110.0   Min.   :  1492000  
##  1st Qu.: 600.0   1st Qu.:  4643000  
##  Median : 780.0   Median :  5860500  
##  Mean   : 785.7   Mean   :  6092597  
##  3rd Qu.: 970.0   3rd Qu.:  7195750  
##  Max.   :1560.0   Max.   :150000000
str(df_limpio)
## 'data.frame':    898 obs. of  10 variables:
##  $ Observation  : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Dist_Taxi    : int  9796 8294 11001 8301 10510 6665 13153 5882 7495 8233 ...
##  $ Dist_Market  : int  5250 8186 14399 11188 12629 5142 11869 9948 11589 7067 ...
##  $ Dist_Hospital: int  10703 12694 16991 12289 13921 9972 17811 13315 13370 11400 ...
##  $ Carpet       : int  1659 1461 1340 1451 1770 1442 1542 1261 1090 1030 ...
##  $ Builtup      : int  1961 1752 1609 1748 2111 1733 1858 1507 1321 1235 ...
##  $ Parking      : Factor w/ 4 levels "Covered","No Parking",..: 4 3 3 1 3 4 2 4 3 4 ...
##  $ City_Category: Factor w/ 3 levels "CAT A","CAT B",..: 2 2 1 2 2 2 1 3 2 3 ...
##  $ Rainfall     : int  530 210 720 620 450 760 1030 1020 680 1130 ...
##  $ House_Price  : int  6649000 3982000 5401000 5373000 4662000 4526000 7224000 3772000 4631000 4415000 ...
##  - attr(*, "na.action")= 'omit' Named int [1:7] 62 240 425 470 527 547 576
##   ..- attr(*, "names")= chr [1:7] "62" "240" "425" "470" ...
head(df_limpio)
##   Observation Dist_Taxi Dist_Market Dist_Hospital Carpet Builtup      Parking
## 1           1      9796        5250         10703   1659    1961         Open
## 2           2      8294        8186         12694   1461    1752 Not Provided
## 3           3     11001       14399         16991   1340    1609 Not Provided
## 4           4      8301       11188         12289   1451    1748      Covered
## 5           5     10510       12629         13921   1770    2111 Not Provided
## 6           6      6665        5142          9972   1442    1733         Open
##   City_Category Rainfall House_Price
## 1         CAT B      530     6649000
## 2         CAT B      210     3982000
## 3         CAT A      720     5401000
## 4         CAT B      620     5373000
## 5         CAT B      450     4662000
## 6         CAT B      760     4526000
tail(df_limpio,10)
##     Observation Dist_Taxi Dist_Market Dist_Hospital Carpet Builtup      Parking
## 896         923      9538       11551         12839   1655    1986      Covered
## 897         924     11786       13969         15519   1156    1398         Open
## 898         925      9615        7904         12521   1451    1734         Open
## 899         926      7176        5779         12382   1539    1829         Open
## 900         927     10915       17486         15964   1549    1851 Not Provided
## 901         928     12176        8518         15673   1582    1910      Covered
## 902         929      7214        8717         10553   1387    1663         Open
## 903         930      7423       11708         13220   1200    1436         Open
## 904         931     15082       14700         19617   1299    1560         Open
## 905         932      9297       12537         14418   1174    1429      Covered
##     City_Category Rainfall House_Price
## 896         CAT B     1150     7743000
## 897         CAT A      140     9237000
## 898         CAT C      670     3488000
## 899         CAT B      650     4658000
## 900         CAT C     1220     7062000
## 901         CAT C     1080     6639000
## 902         CAT A      850     8208000
## 903         CAT A     1060     7644000
## 904         CAT B      770     9661000
## 905         CAT C     1110     5434000
df_numerico <- df_limpio[sapply(df_limpio, is.numeric)]
df_numerico$Observation <- NULL

correlacion <- cor(df_numerico)
corrplot(correlacion)

Generar el modelo

regresion <- lm(House_Price ~ Dist_Taxi+Dist_Market+Dist_Hospital+Carpet+Builtup+Parking+City_Category+Rainfall, data=df_limpio)

summary(regresion)
## 
## Call:
## lm(formula = House_Price ~ Dist_Taxi + Dist_Market + Dist_Hospital + 
##     Carpet + Builtup + Parking + City_Category + Rainfall, data = df_limpio)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3586934  -837542   -65314   784513  4577689 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          5.568e+06  3.688e+05  15.097  < 2e-16 ***
## Dist_Taxi            2.834e+01  2.694e+01   1.052   0.2931    
## Dist_Market          1.237e+01  2.089e+01   0.592   0.5538    
## Dist_Hospital        5.071e+01  3.021e+01   1.679   0.0936 .  
## Carpet               9.907e+03  1.428e+02  69.398  < 2e-16 ***
## Builtup             -7.575e+03  2.412e+02 -31.403  < 2e-16 ***
## ParkingNo Parking   -6.170e+05  1.393e+05  -4.429 1.06e-05 ***
## ParkingNot Provided -5.077e+05  1.239e+05  -4.096 4.58e-05 ***
## ParkingOpen         -2.597e+05  1.131e+05  -2.297   0.0218 *  
## City_CategoryCAT B  -1.883e+06  9.641e+04 -19.529  < 2e-16 ***
## City_CategoryCAT C  -2.902e+06  1.062e+05 -27.321  < 2e-16 ***
## Rainfall            -9.984e+01  1.548e+02  -0.645   0.5191    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1228000 on 886 degrees of freedom
## Multiple R-squared:  0.9429, Adjusted R-squared:  0.9422 
## F-statistic:  1329 on 11 and 886 DF,  p-value: < 2.2e-16

Generar predicciones

# Datos de una casa nueva
casa_nueva <- data.frame(Dist_Taxi = 13153, Dist_Market = 5142, Dist_Hospital = 13076, Carpet = 1940, Builtup = 2340, Parking = factor("Covered",levels = levels(df_limpio$Parking)), City_Category = factor("CAT B",levels = levels(df_limpio$City_Category)), Rainfall = 800)

# Generar la predicción
predict(regresion,casa_nueva)
##       1 
## 6198883
LS0tCnRpdGxlOiAiUmVncmVzaW9uIExpbmVhbCAtIEhvdXNlUHJpY2VEYXRhIgphdXRob3I6ICJFdXJpZWwgR29tZXoiCmRhdGU6ICIyMDI2LTA4LTIwIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRQogICAgY29kZV9kb3dubG9hZDogVFJVRQogICAgdGhlbWU6IGNvc21vCi0tLQoKIVtdKGh0dHBzOi8vbWVkaWEudGVub3IuY29tL0R5Z19nWmE0Vmw0QUFBQU0vZm9yLXNhbGUuZ2lmKS4gIAoKYGBge3J9CiNpbnN0YWxsLnBhY2thZ2VzKCJjb3JycGxvdCIpCmxpYnJhcnkoY29ycnBsb3QpCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+SW1wb3J0YXIgbGEgYmFzZSBkZSBkYXRvczwvc3Bhbj4KYGBge3J9CiNmaWxlLmNob29zZSgpCmRmIDwtIHJlYWQuY3N2KCIvVXNlcnMvZXVyaWVsZ29tZXp0YW1lei9MaWJyYXJ5L01vYmlsZSBEb2N1bWVudHMvY29tfmFwcGxlfkNsb3VkRG9jcy9UZWMvNy9NMi9Ib3VzZVByaWNlRGF0YS5jc3YiKQpgYGAKCmBgYHtyfQojIENvbnZlcnRpciB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIGEgZmFjdG9yZXMKZGYkUGFya2luZyA8LSBhcy5mYWN0b3IoZGYkUGFya2luZykKZGYkQ2l0eV9DYXRlZ29yeSA8LSBhcy5mYWN0b3IoZGYkQ2l0eV9DYXRlZ29yeSkKCiMgUmV2aXNhciB2YWxvcmVzIGZhbHRhbnRlcwpjb2xTdW1zKGlzLm5hKGRmKSkKCiMgRWxpbWluYXIgb2JzZXJ2YWNpb25lcyBjb24gZGF0b3MgZmFsdGFudGVzCmRmX2xpbXBpbyA8LSBuYS5vbWl0KGRmKQoKc3RyKGRmX2xpbXBpbykKc3VtbWFyeShkZl9saW1waW8pCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+RW50ZW5kZXIgbGEgYmFzZSBkZSBkYXRvczwvc3Bhbj4KYGBge3J9CnN1bW1hcnkoZGZfbGltcGlvKQpzdHIoZGZfbGltcGlvKQpoZWFkKGRmX2xpbXBpbykKdGFpbChkZl9saW1waW8sMTApCmBgYAoKYGBge3J9CmRmX251bWVyaWNvIDwtIGRmX2xpbXBpb1tzYXBwbHkoZGZfbGltcGlvLCBpcy5udW1lcmljKV0KZGZfbnVtZXJpY28kT2JzZXJ2YXRpb24gPC0gTlVMTAoKY29ycmVsYWNpb24gPC0gY29yKGRmX251bWVyaWNvKQpjb3JycGxvdChjb3JyZWxhY2lvbikKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HZW5lcmFyIGVsIG1vZGVsbzwvc3Bhbj4KYGBge3J9CnJlZ3Jlc2lvbiA8LSBsbShIb3VzZV9QcmljZSB+IERpc3RfVGF4aStEaXN0X01hcmtldCtEaXN0X0hvc3BpdGFsK0NhcnBldCtCdWlsdHVwK1BhcmtpbmcrQ2l0eV9DYXRlZ29yeStSYWluZmFsbCwgZGF0YT1kZl9saW1waW8pCgpzdW1tYXJ5KHJlZ3Jlc2lvbikKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HZW5lcmFyIHByZWRpY2Npb25lczwvc3Bhbj4KCmBgYHtyfQojIERhdG9zIGRlIHVuYSBjYXNhIG51ZXZhCmNhc2FfbnVldmEgPC0gZGF0YS5mcmFtZShEaXN0X1RheGkgPSAxMzE1MywgRGlzdF9NYXJrZXQgPSA1MTQyLCBEaXN0X0hvc3BpdGFsID0gMTMwNzYsIENhcnBldCA9IDE5NDAsIEJ1aWx0dXAgPSAyMzQwLCBQYXJraW5nID0gZmFjdG9yKCJDb3ZlcmVkIixsZXZlbHMgPSBsZXZlbHMoZGZfbGltcGlvJFBhcmtpbmcpKSwgQ2l0eV9DYXRlZ29yeSA9IGZhY3RvcigiQ0FUIEIiLGxldmVscyA9IGxldmVscyhkZl9saW1waW8kQ2l0eV9DYXRlZ29yeSkpLCBSYWluZmFsbCA9IDgwMCkKCiMgR2VuZXJhciBsYSBwcmVkaWNjacOzbgpwcmVkaWN0KHJlZ3Jlc2lvbixjYXNhX251ZXZhKQpgYGAKCg==