我試圖獲得迴歸係數的引導SE。在使用數據的模樣:在`boot`包中自定義分層樣本策略
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。我理解這裏的問題是每個小組的觀察不足。 boot
包中的strata
選項似乎只能用於一個因子變量。就我而言,我應該根據兩個因素對樣本進行分層:fac1
和fac2
(如果我的理解不正確,請讓我知道)。
我發現函數stratified
發佈here可以根據我的需要產生精確的分層樣本。這裏的問題是如何將stratified
函數實現爲boot
函數,並讓boot
函數對正確的採樣有效?
目前,我自己編寫了一個for-loop
以使用正確的分層樣本運行自引導。但我仍然想知道我是否可以將stratified
函數納入boot
?有什麼建議麼?謝謝!
請參閱'help(「interaction」)'從2個因子構建單一因子。 – lmo
謝謝@lmao。我認爲使用「互動」絕對是解決上述問題的好方法。我仍然很好奇,如果我可以將其他自定義函數(比如這裏提到的'stratified')併入'boot',因爲我可能需要'stratified'提供的額外功能來處理更復雜的情況。謝謝! – Chuan