【问题标题】:How do I loop bootstrapping function and add results to a table?如何循环引导函数并将结果添加到表中?
【发布时间】:2016-08-25 10:22:40
【问题描述】:

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

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))

我有下面的代码来获得自举置信区间(使用表 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"))

我想把这些数据放到表2对应的(生境=林地)行中,但只能使用以下方法(与upperCI相同)手动弄清楚如何做.....

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

我有数百次跑步要做(很多物种的很多栖息地),所以我想知道是否有办法自动化这个 - 即

  1. 使用 for 循环或其他工具为每个栖息地生成置信区间
  2. 然后将其读入表 2?

【问题讨论】:

    标签: r statistics-bootstrap


    【解决方案1】:

    为结果声明空格(注意: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]
    }
    

    【讨论】:

    • 完美,非常感谢!有点沮丧,我没有得到 for 循环,但我对最后一点有点困惑!
    猜你喜欢
    • 2019-09-21
    • 2020-03-02
    • 2021-04-09
    • 2013-03-28
    • 2021-10-18
    • 2021-04-12
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多