2014-12-21 2 views
3

Я написал этот код в R:Bootstrap код не систематическая ошибка или стандартная ошибка

library(boot) 

bs <- function(formula, data, indices) { 
    d <- data[indices,] # allows boot to select sample 
    fit <- lm(formula, data=d) 
return(coef(fit)) 
} 
results <- boot(data=z, statistic=bs, 
R=1000, formula=z[,1]~z[,2]) 

Я пытаюсь сделать случайный х -resampling с использованием данных в dataframe, который содержит мой ответ и мой предсказатель однако мои результаты возвращение без предвзятости и без std.

Bootstrap Statistics : 
     original bias std. error 
t1* 83.5466254  0   0 
t2* -0.6360426  0   0 

Может ли кто-нибудь выявить проблему?

ответ

2

Ваша формула неверна. Когда вы используете z[,1]~z[,2], вы буквально указываете формулу, которая имеет первый столбец z как ответ, а второй столбец z в качестве независимых переменных. Обратите внимание, что z никогда не изменяется. Это параметр data=, который меняется. Кроме того, синтаксис формулы не работает с такими позиционными индексами. Вам нужно использовать имена переменных. Вот некоторые выборочные данные

z <- data.frame(a=runif(50), b=runif(50)) 

Обратите внимание, как это не работает

results <- boot(data=z, statistic=bs, 
R=10, formula=z[,1]~z[,2]) 
results 

# Bootstrap Statistics : 
#  original bias std. error 
# t1* 0.45221233  0   0 
# t2* 0.08818014  0   0 

это просто перенастройки те же значения, снова и снова, которые являются такими же, как при использовании данных заполнения набор

lm(a~b, z) 

# Coefficients: 
# (Intercept)   b 
#  0.45221  0.08818 

Что вы хотите

results <- boot(data=z, statistic=bs, 
R=10, formula=a~b) 
results 

# Bootstrap Statistics : 
#  original  bias std. error 
# t1* 0.45221233 0.01024794 0.08853861 
# t2* 0.08818014 -0.01546608 0.16376128 

Это позволяет использовать функцию boot в другом наборе данных каждый раз, а так как буквенные векторные значения не включены в формулу, которая специально ссылается на data.frame z, вы получите обновленные значения.