R 在不替换的情况下对连续的元素组进行采样

R 在不替换的情况下对连续的元素组进行采样,r,sampling,R,Sampling,我有以下数据框 ddd<-data.frame(minutes=1:15,positive=c(0,1,0,1,1,0,1,0,0,0,1,1,1,0,1)) 采样空间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、1

我有以下数据框

ddd<-data.frame(minutes=1:15,positive=c(0,1,0,1,1,0,1,0,0,0,1,1,1,0,1)) 
采样空间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:element 4:6的第二次试用被选中

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

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


以此类推,直到第k个样本。最终,我的目标是多次运行这种采样,看看至少出现一个ddd$success的概率有多大。

我宁愿将数据集聚合为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
    })
}))

n我宁愿将数据集聚合为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
    })
}))

n您可以使用递归函数

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
  })
}))

n您可以使用递归函数

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
  })
}))

嗨,有趣的问题。关于k相对于j和n=长度(分钟),我们知道什么?我这样问是因为在j=2的例子中,如果选择了2:3和5:6,那么就不可能有其他选择。如果你先选择了这些,你就永远无法扩展到k=3的选择,比如说。非常好的评论。n可以上升到1000,也许1200。k假定值为1到16。j是1到30。那么,你最感兴趣的是n在1000到1200范围内的解,而不是像n=15这样的小例子吗?我有一个想法…我在问题中提到的ddd只是一个例子来说明我的观点。我试图解决的问题需要300到1200之间的任意值,通常是1000到1200之间。非常感谢你的努力和时间。嗨,有趣的问题。关于k相对于j和n=长度(分钟),我们知道什么?我这样问是因为在j=2的例子中,如果选择了2:3和5:6,那么就不可能有其他选择。如果你先选择了这些,你就永远无法扩展到k=3的选择,比如说。非常好的评论。n可以上升到1000,也许1200。k假定值为1到16。j是1到30。那么,你最感兴趣的是n在1000到1200范围内的解,而不是像n=15这样的小例子吗?我有一个想法…我在问题中提到的ddd只是一个例子来说明我的观点。我试图解决的问题需要300到1200之间的任意值,通常是1000到1200之间。非常感谢您的努力和时间。感谢您的回答,但在下一次采样之前重新评估样本空间并拒绝样本空间中与先前采样元素相交的元素非常重要。在您的回答中,ddd的样本空间长度为1000/10=100。这是不对的。ddd的样本空间应为n-j+1(见问题)。整个目的是在每次采样之前重新评估样本空间,并拒绝与先前选择的样本相交的元素。这就是全部目的。有什么想法吗?请注意你的样本空间不是n-j+1。这只是第一个样本的情况。假设一个样本在1:j处,一个样本在j+1+(1:j)处。位置j+1不会出现在样本中,但由于您的规则,无法选择。假设第二个样本位于2*j-1+(1:j)。然后,从j+1到2*j-1的所有点都不再可用。我的采样空间为n/j。当样本之间没有间隙时,有效样本空间为n/j。在最坏的情况下,它将是n/(2*j-1)。您的有效样本空间永远不会大于n/j。我同意您的看法,但您的解决方案无法回答我的问题。初始样本空间S0(第一个样本之前)为n-j+1(n的所有可能j-连续组合)。在第一次采样之后,将重新定义采样空间,直到最后一次,感谢您的回答,但非常重要的是,在下一次采样之前重新评估采样空间,并拒绝采样空间中与先前采样的图元相交的图元。在您的回答中,ddd的样本空间长度为1000/10=100。这是不对的。ddd的样本空间应为n-j+1(见问题)。整个目的是在每次采样之前重新评估样本空间,并拒绝与先前选择的样本相交的元素。这就是全部目的。有什么想法吗?请注意你的样本空间不是n-j+1。这只是第一个样本的情况。假设一个样本在1:j处,一个样本在j+1+(1:j)处。位置j+1不会出现在样本中,但由于您的规则,无法选择。假设第二个样本位于2*j-1+(1:j)。然后,从j+1到2*j-1的所有点都不再可用。我的采样空间为n/j。当样本之间没有间隙时,有效样本空间为n/j。在最坏的情况下,它将是n/(2*j-1)。您的有效样本空间永远不会大于n/j。我同意您的看法,但您的解决方案无法回答我的问题。初始样本空间S0(第一个样本之前)为n-j+1(n的所有可能j-连续组合)。在第一个样本之后,样本空间将被重新定义为缩减的S1