我从一个包含许多值列表的文件中采样,例如:
312313.34
243444
12334.92
321312
353532
并使用 R 从此列表中随机抽样:
list = read.table("data")
out <-sample(list,50,replace=TRUE)
out.mean<-mean(out)
out.mean
有人可以告诉我如何将其放入循环中,以便我可以执行此过程 1000 次并取 1000 的平均值,这意味着这将产生吗?
非常感谢您!
鲁巴尔
另一种解决方案可能是(请记住@Tyler Rinker 刚才所说的replicate
)
Data <- read.table(text='
312313.34
243444
12334.92
321312
353532', header=FALSE)
Data <- as.numeric(as.matrix((Data)))
set.seed(007)
Means <- replicate(1000, mean(sample(Data,50,replace=TRUE)))
对于每个大小为 50 的子样本,均值由 1000 个均值组成。如果您想要均值的均值,请执行以下操作:
mean(Means)
您尝试做的事情听起来像是自举或类似于减少偏差的重采样技术(我猜)。
我会从采样中创建一个函数,然后一遍又一遍地重复lapply
(尽管replicate
可能也可以工作,但我有过这要慢得多的经验)
我建议不要写入名为的对象list
,因为这是一个重要功能。
所以它看起来像这样:
#make a data set that may look like yours
LIST <- rnorm(1000)
#take your code and make a function
mean.find <- function(dat) {
out <-sample(dat, 50,replace=TRUE)
mean(out)
}
#a single use yo check it out
mean.find(LIST)
#repeat it 1000 times with lapply
reps <- unlist(lapply(seq_len(1000), mean.find))
#take the mean of that
mean(reps)