我正在尝试获得回归系数的自举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
选项似乎只适用于一个因子变量。在我的情况下,我应该根据两个因素对样本进行分层:fac1
和fac2
(如果我的理解在这里不正确,请告诉我)。
我发现发布here的函数stratified
可以根据需要生成精确的分层样本。这里的问题是如何将stratified
函数实现到boot
函数并让boot
函数对正确的样本起作用?
目前,我正在自己编写一个for-loop
来使用正确的分层样本来运行自举。但是我仍然想知道我是否可以将stratified
函数合并到boot
中?有什么建议?谢谢!
答案 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
完成!