2013-08-20 2 views
8

j'ai ce tableau de valeurs:R calculer l'erreur standard à l'aide d'amorçage

> 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 

Je souhaite utiliser chaussure de paquet pour calculer l'écart type des données. http://www.ats.ucla.edu/stat/r/faq/boot.htm

Alors, je cette commande pour poursuivre:

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

et je suis arrivé cette erreur:

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

Quelqu'un peut-il me aider le problème? Merci

+1

Quelle est votre définition de la fonction de 'C'? La fonction de base 'c' ne convient pas pour l'amorçage. – Frank

Répondre

11

Si vous bootstrapping la moyenne, vous pouvez le faire comme suit:

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 

Si vous venez de saisir le mean comme un argument, vous obtiendrez l'erreur comme celui que vous avez:

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

La fonction c n'est pas suffisante pour boot. Si vous regardez l'aide pour boot alors vous verrez que votre fonction doit pouvoir recevoir les données et un index. Donc, vous devez écrire votre propre fonction. En outre, il devrait retourner la valeur que vous voulez l'erreur standard de, comme la moyenne.

3

Je n'ai jamais vraiment utilisé le démarrage, car je ne comprends pas ce qu'il apportera à la table.

Étant donné que l'erreur-type est défini comme:

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

Je crois que vous pouvez simplement utiliser la fonction suivante pour y parvenir:

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 
} 

Vous pouvez alors calculer la valeur attendue pour vous-même (puisque vous obtenez une distribution de quelques exemples de réalisation):

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

Quelques années plus tard ...

Je pense que cela est plus agréable:

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