2013-08-20 16 views
8

Ki değerleri bu dizi vardır:R, önyükleme kullanılarak standart hatayı hesaplamak

> 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 

Verilerin standart hatayı hesaplamak için paket açılışa istiyoruz. http://www.ats.ucla.edu/stat/r/faq/boot.htm

Yani, sürdürmeye bu komutu kullanılır:

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

ve bu hata var:

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

biri bana sorunu anlamaya yardımcı olabilir misiniz? Teşekkür

+1

'C' için fonksiyon tanımı nedir? 'C' tabanı temel önyükleme için uygun değildir. – Frank

cevap

11

Eğer ortalama işe koşulması ise aşağıdaki gibi yapabilirsiniz:

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 

Eğer sadece giriş Elinizdekini gibi hata alacak bağımsız değişken olarak mean:

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

fonksiyon cboot için yeterli değildir. boot yardımına bakacak olursanız, işlevin veriyi ve bir endeksi alabilmesi gerektiğini göreceksiniz. Yani kendi fonksiyonunuzu yazmanız gerekiyor. Dahası, ortalama gibi standart bir hata istediğiniz değeri döndürmelidir.

3

Masaya ne getireceğini anlamadığımdan, gerçekten hiç bot kullanmadım. Ben sadece bu halletmek için aşağıdaki işlevi kullanabilirsiniz inanıyoruz

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

: standart hata olarak tanımlanır göz önüne alındığında

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 
} 

Ardından beklenen değerini hesaplayabilirsiniz kendiniz için (bazı örnek gerçekleşme dağılımı elde beri):

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

Birkaç yıl sonra ...

Bu güzel olduğunu düşünüyorum:

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