Tras hacer el analisis de las variables se encontró que había muchos NA’s así que revisando el txt con información de las variables se hicieron algunos cambios al cargar los datos. Acon tinuación se muestran.

# Filtrado de Datos

data <- read.csv("house_prices.csv", header = T, sep = ",")

# NA's

data$Alley[is.na(data$Alley)] <- 'No alley access'
data$BsmtCond[is.na(data$BsmtCond)] <- 'No Basement'
data$BsmtQual[is.na(data$BsmtQual)] <- 'No Basement'
data$BsmtExposure[is.na(data$BsmtExposure)] <- 'No Basement'
data$BsmtFinType1[is.na(data$BsmtFinType1)] <- 'No Basement'
data$BsmtFinType2[is.na(data$BsmtFinType2)] <- 'No Basement'
data$FireplaceQu[is.na(data$FireplaceQu)] <- 'No Fireplace'
data$GarageType[is.na(data$GarageType)] <- 'No Garage'
data$GarageFinish[is.na(data$GarageFinish)] <- 'No Garage'
data$GarageQual[is.na(data$GarageQual)] <- 'No Garage'
data$GarageCond[is.na(data$GarageCond)] <- 'No Garage'
data$PoolQC[is.na(data$PoolQC)] <- 'No Pool'
data$Fence[is.na(data$Fence)] <- 'No Fence'
data$MiscFeature[is.na(data$MiscFeature)] <- 'None'
data$LotFrontage[is.na(data$LotFrontage)] <- 0

D1 <- data[-1]
D2 <-  na.exclude(D1)

Dado que no fue posible eliminar todos los NA’s, se usó D1 para el ejercicio 2 y D2 para el ejercicio 3, esto debido a que la función randomForest tenía problemas al existir NA’s en los datos, cosa que no sucede con la función rpart.

Ejercicio 2

Primero se obtuvo el modelo completo y con este se utilizó la función printcp para encontrar las variables significativas. Como siempre se hacen los conjuntos train y test. Como este es un modelo de regresión se usa method = ‘anova’

# Random Sampling

set.seed(11)

D1split <- initial_split(D1, prop = .7)
D1train <- training(D1split)
D1test  <- testing(D1split)

# Modelo completo

MC <- rpart(SalePrice ~. , data = D1train, method  = "anova") 

printcp(MC)

Las variables utilizadas fueron: BsmtFinSF1, GarageArea, GrLivArea, MoSold, Neighborhood OverallQual, TotalBsmtSF, X1stFlrSF. Con esto conocemos las características que le dan un mayor o menor precio a una casa.

El gráfico del modelo es el siguiente:

Ejercicio 3

Como se dijo arriba para este ejericcio usaremos D2 porque no contiene NA’s.

# Random Sampling

set.seed(12)

D2split <- initial_split(D2, prop = .7)
D2train <- training(D2split)
D2test  <- testing(D2split)

rf <- randomForest(SalePrice ~., D2train)

Si graficamos el modelo podemos ver que cerca de 100 árboles el error se estabiliza.

Se hcieron predicciones con el modelo.

# Random Sampling

pred2 <- predict(rf, newdata = D2test)

Asímismo se hicieron algunos cálculos tomando el valor absoluto de las diferencias entre los precios predichos y los precios reales.

# Máx
max <- max(abs(pred2-D2test$SalePrice))
max
## [1] 126056
# Min
min <- min(abs(pred2-D2test$SalePrice))
min
## [1] 47.45977
# Media
mean <- mean(abs(pred2-D2test$SalePrice))
mean
## [1] 16700.59
# Número de predicciones con error mayor a la media

sum(ifelse(abs(pred2-D2test$SalePrice) > mean, 1,0))
## [1] 142

De lo anterior tenemos que el error medio en las predicciones es de $16, 700.59 mil que no es alto considerando que la media de precios del conjunto es de $186, 749.50. Por otra parte, de las 411 predicciones solo el 34.54% de estas tienen un error mayor a la media.

De todo lo anterior concluimos que el modelo es bueno para predecir el valor de venta de una casa.