R BootStrap 数据框

R BootStrap Data Frame

# Bootstrap 95% CI for R-Squared
library(boot)
# function to obtain R-Squared from the data
rsq <- function(formula, data, indices) {
  d <- data[indices,] # allows boot to select sample
  fit <- lm(formula, data=d)
  return(coef(fit))
}
# bootstrapping with 1000 replications
results <- boot(data=mtcars, statistic=rsq,
   R=1000, formula=mpg~wt+disp)

# get 95% confidence interval
boot.ci(results, type="bca")

假设你 运行 这个 bootstrap 并得到 1000 个截距、wt 和 disp 变量的估计值,然后你想将所有估计值放入数据框中。

dataframe = data.frame(results$t)

这样就可以了,但是您如何对其进行编码以确保列名获得正确的变量名?我这样做了,它使列名成为 'Var1' 'Var2' 和 'Var3' 但我希望它们是 'Intercept' 'wt' 和 'weight'我知道我可以把它们改成这样;我想知道如何使其自动化以确保列从启动时获得正确的名称。

在这里,我们可以使用 't0' 组件的 names 属性。当我们有模型对象(或任何对象)时,最好检查 str 以了解每个组件的结构。这将极大地帮助理解模型和组件

str(results)
#List of 11
# $ t0       : Named num [1:3] 34.9606 -3.3508 -0.0177
#  ..- attr(*, "names")= chr [1:3] "(Intercept)" "wt" "disp"
# $ t        : num [1:1000, 1:3] 34.1 37.2 37.3 33.8 34.7 ...
# $ R        : num 1000
# ...

输出是一个 list 并且可以使用 $[[ 提取 list 组件(对于多个元素,[

t 元素是 matrix,没有 dimnames 属性,而 t0 有 "names" 属性。所以,如果我们想重命名 data.frame 转换的 matrix,只需提取 names

df1 <- data.frame(results$t)
names(df1) <- names(results$t0)