我有这个值数组:
> 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
有人可以帮我解决问题吗?感谢
答案 0 :(得分:13)
如果您正在引导平均值,则可以执行以下操作:
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
答案 1 :(得分:3)
我从来没有真正使用过靴子,因为我不明白它会给桌子带来什么。
鉴于标准错误定义为:
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))))
答案 2 :(得分:1)
c
功能boot
不足。如果您查看boot
的帮助,那么您将看到您的函数必须能够接收数据和索引。所以,你需要编写自己的函数。此外,它应该返回您想要标准误差的值,如均值。