R вычислить стандартную ошибку с помощью начальной загрузки

У меня есть такой массив значений:

> df
[1] 2 0 0 2 2 0 0 1 0 1 2 1 0 1 3 0 0 1 1 0 0 0 2 1 2 1 3 1 0 0 0 1 1 2 0 1 3
[38] 1 0 2 1 1 2 2 1 2 2 2 1 1 1 2 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0
[75] 0 0 0 0 0 1 1 0 1 1 1 1 3 1 3 0 1 2 2 1 2 3 1 0 0 1

Я хочу использовать загрузку пакета для вычисления стандартной ошибки данных. http://www.ats.ucla.edu/stat/r/faq/boot.htm

Итак, я использовал эту команду, чтобы добиться:

library(boot)
boot(df, mean, R=10)

и я получил эту ошибку:

Error in mean.default(data, original, ...) : 
'trim' must be numeric of length one

Может ли кто-нибудь помочь мне разобраться в проблеме? Спасибо


person Vahid Mirjalili    schedule 20.08.2013    source источник
comment
Каково ваше определение функции для c? Базовая функция c не подходит для начальной загрузки.   -  person Frank    schedule 20.08.2013


Ответы (3)


Если вы загружаете среднее, вы можете сделать следующее:

set.seed(1)
library(boot)
x<-rnorm(100)
meanFunc <- function(x,i){mean(x[i])}
bootMean <- boot(x,meanFunc,100)
>bootMean

ORDINARY NONPARAMETRIC BOOTSTRAP


Call:
boot(data = x, statistic = meanFunc, R = 100)


Bootstrap Statistics :
     original      bias    std. error
t1* 0.1088874 0.002614105  0.07902184

Если вы просто введете mean в качестве аргумента, вы получите ошибку, подобную той, которую вы получили:

bootMean <- boot(x,mean,100)
Error in mean.default(data, original, ...) : 
  'trim' must be numeric of length one
person Metrics    schedule 20.08.2013

Никогда толком не пользовался boot, так как не понимаю, что это принесет на стол.

Учитывая, что стандартная ошибка определяется как:

sd(sampled.df) / sqrt(length(df))

Я считаю, что для этого можно просто использовать следующую функцию:

custom.boot <- function(times, data=df) {
  boots <- rep(NA, times)
  for (i in 1:times) {
    boots[i] <- sd(sample(data, length(data), replace=TRUE))/sqrt(length(data))  
  }
  boots
}

Затем вы можете рассчитать ожидаемое значение для себя (поскольку вы получаете распределение некоторой примерной реализации):

# Mean standard error
mean(custom.boot(times=1000))
[1] 0.08998023

Несколько лет спустя ...

Думаю, так лучше:

mean(replicate(times, sd(sample(df, replace=T))/sqrt(length(df))))
person PascalVKooten    schedule 20.08.2013

Функция c недостаточна для boot. Если вы посмотрите справку для boot, то увидите, что ваша функция должна иметь возможность получать данные и индекс. Итак, вам нужно написать свою собственную функцию. Кроме того, он должен возвращать значение, для которого вы хотите получить стандартную ошибку, например среднее значение.

person John    schedule 20.08.2013