8

我有这个值数组:

> 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

有人可以帮我解决问题吗?谢谢

4

3 回答 3

15

如果您正在引导平均值,您可以执行以下操作:

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
于 2013-08-20T17:46:10.477 回答
5

我从来没有真正使用过引导,因为我不明白它会带来什么。

鉴于标准误差定义为:

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))))
于 2013-08-20T18:35:52.570 回答
1

该功能c不足以满足boot. 如果您查看帮助,boot您将看到您的函数必须能够接收数据和索引。因此,您需要编写自己的函数。此外,它应该返回您想要标准误差的值,例如平均值。

于 2013-08-20T17:43:31.203 回答