.
#install.packages("corrplot")
library(corrplot)
## corrplot 0.95 loaded
#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
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)
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
# 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