2017-01-22 110 views
1

我在R中使用boot包来计算自举SE和置信区间。我试图找到一个优雅而有效的方法来获取我的参数的名称以及它们的估计值的引导程序分布。例如,考虑给予here简单的例子:使用R Bootstrap获取回归系数名称

# 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资源方面。

如何在这种情况下更容易地获得系数名称的一个很好的矢量以配对系数标准错误的矢量?

UPDATE

基于从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) 
+1

'attr(results $ t0,“names”)';从看'str(results)' – user20650

回答

2

的估计从调用“开机绑”功能,在这里原始数据上的lm存储在名为“t0”的列表的元素中。

results$t0 
(Intercept)   wt  disp 
34.96055404 -3.35082533 -0.01772474 

这个对象将保留原有的函数调用的估计,然后你就可以用names访问的名字。

names(results$t0) 
[1] "(Intercept)" "wt"   "disp"