2013-08-20 12 views
8

mam tej tablicy wartości:R obliczyć błąd standardowy użyciem bootstrap

> 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 

chcę użyć pakietu startowego do obliczenia błędu standardowego danych. http://www.ats.ucla.edu/stat/r/faq/boot.htm

Więc użyłem tego polecenia, aby kontynuować:

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

i mam ten błąd:

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

Czy ktoś może mi pomóc dowiedzieć się problem? Dzięki

+1

Jaka jest twoja definicja funkcji dla 'C'? Podstawowa funkcja 'c' nie nadaje się do ładowania początkowego. – Frank

Odpowiedz

11

Jeśli ładowanie początkowe średnią można to zrobić w następujący sposób:

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 

Jeśli wystarczy wpisać mean jako argument dostaniesz błąd podobny do tego, który otrzymał:

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

Funkcja c nie jest wystarczająca dla boot. Jeśli spojrzysz na pomoc dla boot, zobaczysz, że twoja funkcja musi być w stanie odbierać dane i indeks. Musisz więc napisać własną funkcję. Ponadto powinien zwracać wartość, która ma być standardowym błędem, podobnie jak średnia.

3

Nigdy tak naprawdę nie używałem bootowania, ponieważ nie rozumiem, co przyniesie on do stołu.

Zważywszy, że błąd standardowy jest definiowany jako:

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

Wierzę, że można po prostu użyć następujących funkcji, aby to zrobić:

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 
} 

Następnie można obliczyć wartość oczekiwaną dla siebie (ponieważ otrzymujesz dystrybucję o niektórych przykładach wykonania):

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

Kilka lat później ...

myślę, że to jest ładniejszy:

mean(replicate(times, sd(sample(df, replace=T))/sqrt(length(df)))) 
Powiązane problemy