Проблема
Проблема в ваших факторных переменных.Когда вы делаете lm()
для подмножества ваших данных (что делается снова и снова в boot::boot()
), вы получаете только коэффициенты для существующих уровней факторов.Тогда каждый коэффициент ничьей может быть разной длины.Это можно воспроизвести, если вы выполните
debug(boot)
set.seed(123)
bootResults <- boot(statistic = bootReg, formula = review_scores_rating ~ instant_bookable + cancellation_policy +
host_since_cat + host_location_cat + host_response_time +
host_is_superhost + host_listings_cat + property_type + room_type +
accommodates + bedrooms + beds + price + security_deposit +
cleaning_fee + extra_people + minimum_nights + amenityBreakfast +
amenityAC + amenityElevator + amenityKitchen + amenityHostGreeting +
amenitySmoking + amenityPets + amenityWifi + amenityTV,
data = listingsRating, R = 2)
, что позволит вам перемещаться по вызову функции по одной строке за раз.После запуска строки
res <- if (ncpus > 1L && (have_mc || have_snow)) {
if (have_mc) {
parallel::mclapply(seq_len(RR), fn, mc.cores = ncpus)
}
else if (have_snow) {
list(...)
if (is.null(cl)) {
cl <- parallel::makePSOCKcluster(rep("localhost",
ncpus))
if (RNGkind()[1L] == "L'Ecuyer-CMRG")
parallel::clusterSetRNGStream(cl)
res <- parallel::parLapply(cl, seq_len(RR), fn)
parallel::stopCluster(cl)
res
}
else parallel::parLapply(cl, seq_len(RR), fn)
}
} else lapply(seq_len(RR), fn)
Затем попробуйте
setdiff(names(res[[1]]), names(res[[2]]))
# [1] "property_typeBarn" "property_typeNature lodge"
В первом подмножестве присутствуют два факторных уровня, которых нет во втором.Это вызывает вашу проблему.
Решение
Используйте model.matrix()
, чтобы расширить ваши факторы заранее (после этого поста переполнения стека ):
df2 <- model.matrix( ~ review_scores_rating + instant_bookable + cancellation_policy +
host_since_cat + host_location_cat + host_response_time +
host_is_superhost + host_listings_cat + property_type + room_type +
accommodates + bedrooms + beds + price + security_deposit +
cleaning_fee + extra_people + minimum_nights + amenityBreakfast +
amenityAC + amenityElevator + amenityKitchen + amenityHostGreeting +
amenitySmoking + amenityPets + amenityWifi + amenityTV - 1, data = listingsRating)
undebug(boot)
set.seed(123)
bootResults <- boot(statistic = bootReg, formula = review_scores_rating ~ .,
data = as.data.frame(df2), R = 2)
(Обратите внимание, что во всем случае я уменьшаю R
до 2 только для более быстрого выполнения во время отладки).