1. Importación y Limpieza de Datos

# Cargar la base de datos
data <- read.csv("C:\\Users\\joseo\\Downloads\\HousePriceData.csv")

# 1. Eliminar columna de observación (no aporta al modelo)
data$Observation <- NULL

# 2. Limpieza, hay valores negativos en el summary original (-110)
# Los convertiremos al valor absoluto o a la media.
data$Rainfall <- abs(data$Rainfall)

# Vamos a omitirlas formalmente para que no causen errores.
data <- na.omit(data)

str(data)
## 'data.frame':    898 obs. of  9 variables:
##  $ 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 ...
##  - attr(*, "na.action")= 'omit' Named int [1:7] 62 240 425 470 527 547 576
##   ..- attr(*, "names")= chr [1:7] "62" "240" "425" "470" ...

2. Exploración Estadística

summary(data$House_Price)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
##   1492000   4643000   5860500   6092597   7195750 150000000
# Visualización rápida de la variable objetivo
boxplot(data$House_Price, main="Distribución de Precios de Casas", col="lightblue", ylab="USD")

3. Construcción del Modelo de Regresión Lineal Múltiple

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

summary(regresion)
## 
## Call:
## lm(formula = House_Price ~ factor(Parking) + factor(City_Category) + 
##     Dist_Taxi + Dist_Market + Dist_Hospital + Carpet + Builtup + 
##     Rainfall, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3587923  -837631   -63409   785633  4577929 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                  5.571e+06  3.688e+05  15.105  < 2e-16 ***
## factor(Parking)No Parking   -6.170e+05  1.393e+05  -4.430 1.06e-05 ***
## factor(Parking)Not Provided -5.077e+05  1.239e+05  -4.097 4.57e-05 ***
## factor(Parking)Open         -2.597e+05  1.131e+05  -2.297   0.0219 *  
## factor(City_Category)CAT B  -1.883e+06  9.641e+04 -19.530  < 2e-16 ***
## factor(City_Category)CAT C  -2.902e+06  1.062e+05 -27.322  < 2e-16 ***
## Dist_Taxi                    2.832e+01  2.694e+01   1.051   0.2934    
## Dist_Market                  1.241e+01  2.089e+01   0.594   0.5526    
## Dist_Hospital                5.073e+01  3.021e+01   1.679   0.0935 .  
## Carpet                       9.907e+03  1.428e+02  69.402  < 2e-16 ***
## Builtup                     -7.575e+03  2.412e+02 -31.405  < 2e-16 ***
## Rainfall                    -1.037e+02  1.552e+02  -0.668   0.5043    
## ---
## 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

4. Interpretación de Resultados

Basado en el resumen del modelo (\(R^2\) de 0.94): El modelo explica el 94.2% de la variación del precio, lo cual es excepcionalmente alto. Variables Críticas: Carpet (Área interna) y City_Category son los predictores más fuertes. El coeficiente de Builtup es negativo (\(-7,575\)). Esto ocurre por la multicolinealidad con Carpet. Cuando ambas crecen juntas, el modelo intenta compensar el peso de una con la otra.

5. Predicción con Datos Nuevos

# Definir los datos de la nueva casa
casa_nueva <- data.frame(
  Parking = "Covered",
  City_Category = "CAT A",
  Dist_Taxi = 5000,
  Dist_Market = 8000,
  Dist_Hospital = 10000,
  Carpet = 1600,
  Builtup = 1900,
  Rainfall = 600
)

# Realizar la predicción
prediccion_precio <- predict(regresion, casa_nueva)

cat("El valor estimado de la propiedad es de:", round(prediccion_precio, 2), "USD")
## El valor estimado de la propiedad es de: 7715207 USD

6. Conclusiones

Ubicación sobre todo: Estar en CAT B o CAT C reduce el precio en millones respecto a CAT A.

Cada unidad adicional de Carpet aumenta el precio en aproximadamente $9,907 USD.

Variables como Rainfall y Dist_Market tienen un p-value mayor a 0.05, lo que sugiere que no son significativas y podrían eliminarse para simplificar el modelo sin perder mucha precisión.