如何对累积的行执行引导功能?

时间:2019-10-09 03:36:24

标签: r statistics

我需要以某种特定的方式对数据集执行引导,该引导应使用一种特殊的重采样方式(通过累积的行)执行迭代。

我有一个数据集(baseEV),看起来像这三列(但有更多行):

Ntree   Ntrans  Xi

1   1   0.1
2   1   0.1
3   1   0.1
4   1   7
5   1   7
1   3   0.1
2   3   0.1
3   3   9
4   3   6
5   3   3
1   4   0.1
2   4   11
3   4   9
4   4   6
5   4   3
1   5   0.1
2   5   10
3   5   4
4   5   2
5   5   4

如果我通过更改Ntree来对Xi重新采样,计算该统计量,然后使用自举估算该统计量,则需要测试统计量如何变化: D =(35 * Ntree-1)/ SUM([Xi]) 但是,我还需要在更改Ntree以查看D的影响时,不应丢弃较小的Ntree值。例如,当我计算Ntree = 4时,我需要引导程序将Ntree = 1,2和3的行与Ntree = 4一起使用,而不使用Ntree = 5的数据。

但是当我应用此代码时:

library(boot) 
library(dplyr)
library(tidyr)
library(broom) 

AvgDEns <- function(data, indices) {
  data <- data[indices,]
  mean((35*(data$Ntree))-1)/sum((data$Xi))
}

bootresults2 <- baseEV %>%
  group_by(Ntree) %>%
  do(tidy(boot(data = ., statistic = AvgDEns , R = 200)))
bootresults2

因此,生成的引导程序仅在单独使用Ntree = 1或Ntree = 2或3等时才考虑到结果,但是我需要使用过程来保留较小的(Ntree)值行并计算与他们一起工作。 上面的代码产生以下结果

> bootresults2
# A tibble: 5 x 4
# Groups:   Ntree [5]
  Ntree statistic   bias std.error
  <dbl>     <dbl>  <dbl>     <dbl>
1     1     85     0          0   
2     2      3.25 12.9       44.7 
3     3      4.71  3.34      25.6 
4     4      6.62  0.252      1.43
5     5     10.2   0.298      2.01

如果我们根据需要执行这些计算,则正确的结果应该是,例如在第2行:3.19444,而不是3.25(错误的数字,该结果仅对Ntree的行仅应用了AvgDens函数= 2,不考虑Ntree = 1);对于3,应为2.3798(仅执行Ntree = 3而不考虑Ntree = 2和Ntree = 1的AvgDens的结果),而不是4.71,并且Ntreee = 5应该收敛到2.12974(使用表中所有数据计算的AvgDens )与引导程序的每次迭代。

但是,不知道如何做到这一点;我很困。建议程序的任何启示将不胜感激!

0 个答案:

没有答案