【发布时间】:2013-03-11 23:16:04
【问题描述】:
我正在分析一项包含 40 个人的研究,每个人评价 10 个小插曲。
indiv vign score score2 gender
1 1 5 3 1
1 2 2 4 1
1 3 8 1 1
. . . . .
. . . . .
. . . . .
39 10 9 1 1
40 8 1 5 0
40 9 3 8 0
我想尝试一下,但很快我就意识到采样小插曲是没有意义的;我们应该对人进行抽样(所以我们每人抽样大约 10 行)。
以下功能有效,但它是下一个功能的瓶颈。 那么问题来了,如何才能更有效地做到这一点?
ResampleMultilevel <- function(data, groupvar) {
n <- length(unique(data[,groupvar]))
index <- sample(data[ , groupvar], n, replace = TRUE)
resampled <- NULL # one of the issues is that we do not know
# the size of the matrix yet, since it may vary.
for (i in 1:n) {
resampled <- rbind(resampled, data[data[, groupvar] == index[i], ])
}
return(resampled)
}
subset 的问题是我找不到保留重复项的方法。
a <- cbind(rep(1:40, each = 10), rep(1:10, 4), rnorm(40), rnorm(40)), rep(1:10, 4), rnorm(40), rnorm(40))
index <- c(1,1)
subset(a, a[,1] == index)
【问题讨论】:
-
示例数据:
cbind(1:40, rep(1:10, 4), rnorm(40), rnorm(40)) -
当前使用什么作为
groupvar参数,indiv或vign? -
我认为您的 for 循环可以替换为
data[index,]。我认为这会节省一点。 -
@Marius 我现在正在使用
indiv。 -
@Seth,这行不通。您需要为
index中的每个数字(人)选择大约 10 个小插曲。请注意,也可能有重复的人,不会被选中。
标签: r sample statistics-bootstrap