我正在使用R中的boot
包来计算自举SE和置信区间。我试图找到一种优雅而有效的方法来获取我的参数名称以及他们估计的引导分布。例如,考虑给出here的简单示例:
# Bootstrap 95% CI for regression coefficients
library(boot)
# function to obtain regression weights
bs = function(data, indices, formula) {
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=bs,
R=1000,
formula=mpg~wt+disp)
这很好,除了结果只是作为数字索引出现:
# view results
results
Bootstrap Statistics :
original bias std. error
t1* 34.96055404 0.1559289371 2.487617954
t2* -3.35082533 -0.0948558121 1.152123237
t3* -0.01772474 0.0002927116 0.008353625
特别是当涉及到涉及各种因子变量的长而复杂的回归公式时,可能需要做一些工作来准确地跟踪哪些指数与哪个系数估计一致。
我当然可以在引导函数之外重新调整我的模型,并使用names(coef(fit))
或其他东西提取名称,或者可能使用其他内容,例如调用model.matrix()
。这些看起来很麻烦,无论是在额外的编码方面,还是在额外的CPU和RAM资源方面。
如何在这样的情况下更容易地得到一个很好的系数名称向量来配对系数标准误差的向量?
更新
基于lmo的精彩答案,这是获取基本回归表的基本代码:
Names = names(results$t0)
SEs = sapply(data.frame(results$t), sd)
Coefs = as.numeric(results$t0)
zVals = Coefs / SEs
Pvals = 2*pnorm(-abs(zVals))
Formatted_Results = cbind(Names, Coefs, SEs, zVals, Pvals)
答案 0 :(得分:2)
通过调用" boot beped"函数,这里lm
,对原始数据,存储在名为" t0"的列表元素中。
results$t0
(Intercept) wt disp
34.96055404 -3.35082533 -0.01772474
此对象保留原始函数调用的估计名称,然后您可以使用names
访问它。
names(results$t0)
[1] "(Intercept)" "wt" "disp"