1

我有以下数据框

ddd<-data.frame(minutes=1:15,positive=c(0,1,0,1,1,0,1,0,0,0,1,1,1,0,1)) 

使用采样,我想找出在k次试验中,从j长度的 ddd$minutes 的连续间隔中至少ddd$positive出现一个的概率是多少。例如,对于j=2(2 分钟间隔),样本空间将为 ddd$minutes[1:2, 2:3, 3:4, 4:5, 5:6, 6:7, …:14:15]. 但是,如果在 k 次试验的第一次中对区间ddd$minutes[1:2]进行采样(一次成功),ddd$minutes[2:3]则从采样空间中删除区间(在下一次随机采样之前),因为两组相交(ddd$minutes[2]两者都存在)。

这不是一个简单的无放回抽样问题,因为在下一次抽样发生之前,不仅要从样本空间中删除已抽样的组,还应从样本空间中删除所有与已抽样的组相交的组。

编辑(来自 Tim P 的评论)length(ddd$minutes)可以在 1000-1200 之间;k介于 1 和 16之间。 j介于 1 和 30 之间

EDIT2(蒂埃里评论)

我正在举一个例子,遵循蒂埃里的评论和回答

ddd<-data.frame(minutes=1:15,positive=c(0,1,0,1,1,0,1,0,0,0,1,1,1,0,1)) 
l=3;k=3

样本空间 S0(第一次采样前):S0:{1:3, 2:4, 3:5, 4:6, 5:7, 6:8, 7:9, 8:10, 9:11, 10 :12, 11:13, 12:14, 13:15} S0 的长度为 13 (n-k+1)

k 中的第一次试验:元素 8:10 被选中。

然后将 S1 重新定义为 S0,但不包含与采样元素 8:10 相交的元素 6:8、7:9、8:10、9:11、10:12

所以,S1 是:{ 1:3, 2:4, 3:5, 4:6, 5:7, 11:13, 12:14, 13:15}

k 中的第二次试验:元素 4:6 被选中

S2 被重新定义为 S1 没有元素 2:4, 3:5, 4:6, 5:7,

所以,S2:{1:3, 11:13, 12:14, 13:15}

依此类推,直到*k*th 个样本。最终我的目标是多次运行这种抽样,看看至少出现一个 ddd$success 的概率是多少。

4

2 回答 2

1

您可以使用递归函数。

n <- 1000
j <- 10
set.seed(12345)
ddd <- data.frame(minutes=seq_len(n), positive = rbinom(n, 1, 0.1))
dataset <- ddd
k <- 16
sillySampling <- function(dataset, k, j){
  i <- sample(nrow(dataset) - j + 1, 1)
  thisSample <- max(dataset$positive[i - 1 + seq_len(j)])
  if(k > 1){
    toRemove <- i + -j:j
    toRemove <- toRemove[toRemove >= 1 & toRemove <= nrow(dataset)]
    thisSample <- c(thisSample, sillySampling(dataset[-toRemove, ], k  = k - 1, j = j))
  }
  return(thisSample)
}
rowMeans(replicate(100, {
  sapply(1:16, function(k){
    sum(sillySampling(ddd, k, 10)) / k
  })
}))
于 2012-06-13T09:35:25.277 回答
0

我宁愿将数据集聚合为 k 分钟的样本。然后对聚合数据集进行采样。您希望从您的抽样中获得更多信息?您的采样方式会丢弃更多数据。

n <- 1000
j <- 10
set.seed(12345)
ddd <- data.frame(minutes=seq_len(n), positive = rbinom(n, 1, 0.1))
ddd$group <- ddd$minutes %/% j
AGR <- aggregate(ddd$positive, by = ddd[, "group", drop = FALSE], FUN = max)
rowMeans(replicate(1000, {
    sapply(1:16, function(k){
        sum(sample(AGR$x, k, replace = FALSE)) / k
    })
}))
于 2012-06-12T10:52:35.610 回答