2013-08-20 18 views
8

Ich habe dieses Array von Werten:R Berechnung der Standardfehler mit 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 

Ich möchte Paket Boot verwenden, um den Standardfehler der Daten zu berechnen. http://www.ats.ucla.edu/stat/r/faq/boot.htm

So benutzte ich diesen Befehl zu verfolgen:

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

und ich habe diesen Fehler:

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

Kann mir herauszufinden, das Problem jemand helfen? Dank

+1

Was für 'c' Funktionsdefinition ist? Die Basis-'c'-Funktion ist nicht zum Bootstrapping geeignet. – Frank

Antwort

11

Wenn Sie den Mittelwert sind Bootstrapping können Sie wie folgt vorgehen:

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 

Wenn Sie nur Eingabe die mean als Argument Sie den Fehler wie die bekommen Sie bekam:

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

Die Funktion c ist nicht ausreichend für boot. Wenn man sich die Hilfe für boot aussehen werde dann sehen Sie, dass Ihre Funktion der Lage sein müssen, die Daten und einen Index zu erhalten. Also, Sie müssen Ihre eigene Funktion schreiben. Darüber hinaus sollte es den Wert zurückgeben, den der Standardfehler wie der Mittelwert haben soll.

3

Ich habe nie wirklich Boot benutzt, da ich nicht verstehe, was es auf den Tisch bringt.

Da der Standardfehler wie folgt definiert ist:

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

Ich glaube, Sie einfach die folgende Funktion dieses erhalten getan verwenden können:

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 
} 

Sie können dann den erwarteten Wert berechnen für sich selbst (da Sie eine Verteilung von einigen Probe Realisierung erhalten):

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

Einige Jahre ...

Ich denke, das ist schöner:

mean(replicate(times, sd(sample(df, replace=T))/sqrt(length(df))))