【发布时间】:2016-08-17 06:51:37
【问题描述】:
这是对this one 的后续问题。在最初的问题中,OP 希望在固定的两列 x1 和 x2 上执行引导:
set.seed(1000)
data <- as.data.table(list(x1 = runif(200), x2 = runif(200), group = runif(200)>0.5))
stat <- function(x, i) {x[i, c(m1 = mean(x1), m2 = mean(x2))]}
data[, list(list(boot(.SD, stat, R = 10))), by = group]$V1
但是,我认为这个问题可以很好地扩展到通过将它们视为组来处理任意数量的列。例如,让我们使用iris 数据集。假设我想计算每个物种所有四个维度的引导平均值。我可以使用 melt 来翻转数据,然后使用 Species、variable 组合来一次性获得平均值 - 我认为这种方法可以很好地扩展。
data(iris)
iris = data.table(iris)
iris[,mean(Sepal.Length),by=Species]
iris[,ID:=.N,]
iris_deep = melt(iris
,id.vars = c("ID","Species")
,measure.vars = c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width"))
#define a mean bootstrap function
stat <- function(x, i) {x[i, m=mean(value),]}
iris_deep[, list(list(boot(.SD, stat, R = 100))), by = list(Species,variable)]$V1
这是我的尝试。但是,引导部分似乎不起作用。由于 R 抛出以下错误:
Error in mean(value) : object 'value' not found
有人可以解决这个问题吗?
【问题讨论】:
标签: r data.table statistics-bootstrap