如何循环引导函数并将结果添加到 table?

How do I loop bootstrapping function and add results to a table?

我有两个 table 数据 - 第一个是一个完整的数据集,其中包含一个因素(栖息地)的重复(密度):

Table1 <- data.frame(
Habitat = sample(c("Woodland", "Grassland"), 10, replace = TRUE),
Density = sample(1:10)
)

第二个是汇总版本,每个栖息地一行包含中值密度。

library(dplyr)
Table2 <-ddply(Table1, "Habitat",summarise, Median = median(Density))

我有下面的代码来获得自举置信区间(使用 table 1 中的数据)……

fun.boot <- function(x, i) {median(x[i])}
Wood.boot <- boot(data = Table1$Density[Table1$Habitat=="Woodland"],statistic = fun.boot, R = 10000)
boot.ci(boot.out = Wood.boot, conf = 0.95, type = c("perc"))

我想将此数据放入 table 2 的相应 (habitat = woodland) 行中,但只能弄清楚如何使用以下方法手动完成(与 upperCI 相同).. ...

Table2$LowerCI <- rep("NA",nrow(Table2))
Table2$LowerCI[Table2$Habitat == "Woodland"] <- 2

我有数百次跑步(很多物种的很多栖息地),所以我想知道是否有一种方法可以自动执行此操作 - 即

  1. 使用 for 循环或其他方法为每个栖息地生成置信区间
  2. 然后读成table2??

为结果声明 space(注意:NA 周围不需要引号):

Table2$LowerCI <- rep( NA, nrow(Table2) )
Table2$UpperCI <- rep( NA, nrow(Table2) )

现在您可以遍历栖息地并将结果存储到适当的列中:

for( hab in Table2$Habitat )
{
  hab.boot <- boot(data = Table1$Density[Table1$Habitat==hab],statistic = fun.boot, R = 10000)
  hab.ci <- boot.ci(boot.out = hab.boot, conf = 0.95, type = c("perc"))
  Table2$LowerCI[Table2$Habitat==hab] <- hab.ci$percent[4]
  Table2$UpperCI[Table2$Habitat==hab] <- hab.ci$percent[5]
}