data <- read.csv("C:\\Users\\sams\\Downloads\\HousePriceData.csv")
str(data)
## 'data.frame': 905 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 : chr "Open" "Not Provided" "Not Provided" "Covered" ...
## $ City_Category: chr "CAT B" "CAT B" "CAT A" "CAT B" ...
## $ 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 ...
summary(data)
## Observation Dist_Taxi Dist_Market Dist_Hospital
## Min. : 1.0 Min. : 146 Min. : 1666 Min. : 3227
## 1st Qu.:237.0 1st Qu.: 6477 1st Qu.: 9367 1st Qu.:11302
## Median :469.0 Median : 8228 Median :11149 Median :13189
## Mean :468.4 Mean : 8235 Mean :11022 Mean :13091
## 3rd Qu.:700.0 3rd Qu.: 9939 3rd Qu.:12675 3rd Qu.:14855
## Max. :932.0 Max. :20662 Max. :20945 Max. :23294
##
## Carpet Builtup Parking City_Category
## Min. : 775 Min. : 932 Length:905 Length:905
## 1st Qu.: 1317 1st Qu.: 1579 Class :character Class :character
## Median : 1478 Median : 1774 Mode :character Mode :character
## Mean : 1511 Mean : 1794
## 3rd Qu.: 1654 3rd Qu.: 1985
## Max. :24300 Max. :12730
## NA's :7
## Rainfall House_Price
## Min. :-110.0 Min. : 1492000
## 1st Qu.: 600.0 1st Qu.: 4623000
## Median : 780.0 Median : 5860000
## Mean : 786.9 Mean : 6083992
## 3rd Qu.: 970.0 3rd Qu.: 7200000
## Max. :1560.0 Max. :150000000
##
data <- data[-348, ]
boxplot(data$House_Price,
main = "Diagrama de caja - House_Price",
ylab = "House_Price")
data$Parking <- factor(data$Parking)
data$City_Category <- factor(data$City_Category)
regresion <- lm(House_Price ~ Dist_Taxi + Dist_Market + Dist_Hospital +
Carpet + Builtup + Parking + City_Category + Rainfall,
data = data)
summary(regresion)
##
## Call:
## lm(formula = House_Price ~ Dist_Taxi + Dist_Market + Dist_Hospital +
## Carpet + Builtup + Parking + City_Category + Rainfall, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3573707 -805345 -61164 760782 4399519
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.595e+06 3.672e+05 15.235 < 2e-16 ***
## Dist_Taxi 2.979e+01 2.682e+01 1.111 0.2670
## Dist_Market 1.194e+01 2.080e+01 0.574 0.5659
## Dist_Hospital 4.934e+01 3.008e+01 1.640 0.1013
## Carpet -5.242e+02 3.467e+03 -0.151 0.8799
## Builtup 1.107e+03 2.893e+03 0.383 0.7021
## ParkingNo Parking -6.128e+05 1.387e+05 -4.419 1.11e-05 ***
## ParkingNot Provided -4.926e+05 1.235e+05 -3.990 7.16e-05 ***
## ParkingOpen -2.635e+05 1.126e+05 -2.341 0.0194 *
## City_CategoryCAT B -1.877e+06 9.599e+04 -19.554 < 2e-16 ***
## City_CategoryCAT C -2.895e+06 1.057e+05 -27.380 < 2e-16 ***
## Rainfall -9.953e+01 1.541e+02 -0.646 0.5185
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1222000 on 885 degrees of freedom
## (7 observations deleted due to missingness)
## Multiple R-squared: 0.5014, Adjusted R-squared: 0.4952
## F-statistic: 80.89 on 11 and 885 DF, p-value: < 2.2e-16
datos_nuevos <- data.frame(
Dist_Taxi = 8000,
Dist_Market = 11000,
Dist_Hospital = 13000,
Carpet = 1500,
Builtup = 1800,
Parking = "Open",
City_Category = "CAT A",
Rainfall = seq(600, 1200, length.out = 1)
)
datos_nuevos$Parking <- factor(datos_nuevos$Parking, levels = levels(data$Parking))
datos_nuevos$City_Category <- factor(datos_nuevos$City_Category, levels = levels(data$City_Category))
predict(regresion, datos_nuevos)
## 1
## 7488436
Durante la revisión de los datos se detectó un registro extremo en la fila 349, el cual fue retirado para evitar que sesgara la estimación. Con ese dato incluido, el modelo aparentaba un ajuste muy elevado (R²≈0.94); no obstante, al depurar la base y eliminarlo, el nivel de explicación descendió a R²=0.501. Esto evidencia que dicho valor estaba influyendo de manera desproporcionada en el desempeño y que, al trabajar con información más representativa, el comportamiento del precio resulta más variable y menos predecible.
Aun así, la prueba global del modelo continúa siendo significativa (p-value < 2e-16), lo que confirma que, en conjunto, las variables aportan información relevante. Los efectos más claros se mantienen en la clasificación por ciudad, donde las propiedades en categorías B y C muestran valores inferiores respecto a la categoría A, y en el tipo de estacionamiento, ya que opciones como no contar con cajón, no especificarlo o tener uno abierto se asocian con reducciones en el precio esperado frente al grupo base. En contraste, variables relacionadas con superficie (carpet y built-up), distancias y rainfall no muestran una contribución estadísticamente relevante bajo este ajuste.
Con los parámetros considerados para el ejercicio de predicción, el valor estimado para la vivienda se sitúa alrededor de $7,488,436, de acuerdo con el primer resultado generado por el modelo.