在`boot`包中自定义分层样本策略

时间:2016-08-30 18:14:21

标签: r bootstrapping

我正在尝试获得回归系数的自举SE。使用数据如下:

set.seed(1234)
df <- data.frame(y = rnorm(1:30), 
             fac1 = as.factor(sample(c("A","B","C","D","E"),30, replace = T)),
             fac2 = as.factor(sample(c("NY","NC","CA"),30,replace = T)),
             x = rnorm(1:30))

我使用boot包来执行引导:

library(boot)
fun <- function(data, index){
    data <- df[index,]
    reg <- lm(y ~ fac1 + fac2 + x, data)
    coef(reg)
}
test.boot <- boot(df, fun, strata = df$fac1, 100)

然而,R抱怨:

Error in boot(df, fun, strata = df$fac1, 100) : 
number of items to replace is not a multiple of replacement length

我的情况与提到的here完全相同。我理解这里的问题是每组的观察不充分。 strata包中的boot选项似乎只适用于一个因子变量。在我的情况下,我应该根据两个因素对样本进行分层:fac1fac2(如果我的理解在这里不正确,请告诉我)。

我发现发布here的函数stratified可以根据需要生成精确的分层样本。这里的问题是如何将stratified函数实现到boot函数并让boot函数对正确的样本起作用?

目前,我正在自己编写一个for-loop来使用正确的分层样本来运行自举。但是我仍然想知道我是否可以将stratified函数合并到boot中?有什么建议?谢谢!

1 个答案:

答案 0 :(得分:1)

仔细分析<tr ng-repeat="minion in vm.minions" class="drep_bot_row"> <td width="40" ng-init="vm.totalprice = vm.totalprice + minion.attack"> <img src="/img/hake_svart.png" width="30" height="30"> <input type="checkbox" class="ng-hide" ng-model="multiplecheckbox" value="{{ minion.value }} "> </td> </tr> 包后,我想我找到了一个问题的解决方案而没有修改boot的原始代码。实际上,boot提供了一种让用户自定义其采样策略的方法。查看boot中的sim = "parametric"ran.gen选项。

因此,就我而言,我可以简单地指定help(boot)函数来嵌套ran.gen函数,并使用它来重新生成样本以进行自举。

stratified

完成!