[R] bootstraping by groups
Rui Barradas
ru|pb@rr@d@@ @end|ng |rom @@po@pt
Tue Mar 22 23:33:56 CET 2022
Hello,
The error is in
boot.pop. <- boot(daT, bootprop, 999)
Here are basse R and tidyverse solutions. But first, create a test data
set. The values in vector 'year' are the iris species names, I haven't
changed them.
daT <- iris[3:5]
names(daT) <- c("BothTimes", "onlyoneTime", "year")
And the bootstrap function.
library(boot)
bootprop <- function(data, index){
d <- data[index, ]
sum(d[["BothTimes"]], na.rm = TRUE)/sum(d[["onlyoneTime"]], na.rm = TRUE)
}
1. Base R
Only one package needs to be loaded and the code is simple.
# split the data by year
sp <- split(daT, daT$year)
lapply(sp, \(x) boot(x, bootprop, 999)$t0)
2. tidyverse
Also load packagges dplyr and purrr. To call purrr::map_dfr an extra
function is needed.
library(dplyr)
library(purrr)
boot_fun <- function(data, FUN, R){
boot.prop <- boot(data, FUN, R)
c(boot.prop = boot.prop$t0)
}
daT %>%
group_split(year) %>%
map_dfr(boot_fun, bootprop, R = 999)
Hope this helps,
Rui Barradas
Às 20:45 de 22/03/2022, Marna Wagley escreveu:
> Hi All,
> I have many classes and was trying to estimate the value using a
> bootstrapping approach for each group with the following code. However, it
> did not work when I added a group in the code. Do you have any suggestions?
> thanks,
>
>
> bootprop <- function(data, index){
> d <- data[index, ]
> sum(d[["BothTimes"]], na.rm = TRUE)/sum(d[["onlyoneTime"]], na.rm = TRUE)
> }
>
> daT %>%
> group_by(year) %>%
> boot.pop. <- boot(daT, bootprop, 999) %>%
> boot.pop.$t0)
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list