2017-01-22 108 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"