Я научился делать bootstrap регрессию. Вот мой пример и код.
library(boot)
sampledata = data.frame(y = sample(0:20, r = T, size = 5000),
x1 = runif(5000),
x2 = runif(5000),
group1 = sample(1:3, r = T, size = 5000),
group2 = sample(0:1, r = T, size = 5000))
# function to obtain R-Squared from the data
rsq <- function(formula, data, indices) {
d <- data[indices,]
fit <- lm(formula, data=d)
return(coef(fit))
}
# bootstrapping with 250 replications
results <- boot(data=sampledata, statistic=rsq,
R=250, formula=y~x1+x2)
df <- data.frame(results$t)
names(df) <- names(results$t0)
Однако, если вы хотите проделать этот процесс для подгрупп ваших данных, как вы можете сделать его более автоматизированным? Это то, что я надеюсь сделать, но это очень утомительно, и у меня есть еще много групповых категорий, но в основном это обнадеживающий результат, в основном я разбиваю образцы данных на 6 групп, а затем использую все эти наборы данных по отдельности в 6 разных bootstrap моделях а затем объедините результаты в ДАННЫЕ. Я вижу, что в загрузке есть функция страты, но я не могу заставить ее работать. Также вы должны разделить свои данные на группы, а затем выполнить образец bootstrap? Или получить образец bootstrap, а затем подгруппировать свои данные? В любом случае, мне интересно, как можно сделать это более автоматическим c, когда я могу закодировать программу для выполнения оценки bootstrap для всех групп отдельно, где модели расслоены.
sampledata1 = subset(sampledata, group1 == 1 & group2 == 0)
sampledata2 = subset(sampledata, group1 == 2 & group2 == 0)
sampledata3 = subset(sampledata, group1 == 3 & group2 == 0)
sampledata4 = subset(sampledata, group1 == 1 & group2 == 1)
sampledata5 = subset(sampledata, group1 == 2 & group2 == 1)
sampledata6 = subset(sampledata, group1 == 3 & group2 == 1)
# bootstrapping with 250 replications
results <- boot(data=sampledata1, statistic=rsq,
R=250, formula=y~x1+x2)
df1 <- data.frame(results$t)
names(df1) <- names(results$t0)
df1$group1 = 1
df1$group2 = 0
# bootstrapping with 250 replications
results <- boot(data=sampledata2, statistic=rsq,
R=250, formula=y~x1+x2)
df2 <- data.frame(results$t)
names(df2) <- names(results$t0)
df2$group1 = 2
df2$group2 = 0
# bootstrapping with 250 replications
results <- boot(data=sampledata3, statistic=rsq,
R=250, formula=y~x1+x2)
df3 <- data.frame(results$t)
names(df3) <- names(results$t0)
df3$group1 = 3
df3$group2 = 0
# bootstrapping with 250 replications
results <- boot(data=sampledata4, statistic=rsq,
R=250, formula=y~x1+x2)
df4 <- data.frame(results$t)
names(df4) <- names(results$t0)
df4$group1 = 1
df4$group2 = 1
# bootstrapping with 250 replications
results <- boot(data=sampledata5, statistic=rsq,
R=250, formula=y~x1+x2)
df5 <- data.frame(results$t)
names(df5) <- names(results$t0)
df5$group1 = 2
df5$group2 = 1
# bootstrapping with 250 replications
results <- boot(data=sampledata6, statistic=rsq,
R=250, formula=y~x1+x2)
df6 <- data.frame(results$t)
names(df6) <- names(results$t0)
df6$group1 = 3
df6$group2 = 1
DATA = rbind(df1, df2, df3, df4, df5, df6)
rsq <- function(formula, data, indices) {
dataSUB <- data %>% filter(GROUP1 == group1, GROUP2 == group2)
d <- dataSUB[indices,]
fit <- lm(formula, data=d)
return(coef(fit))
}