R 变量和阈值之间差的期望值
我有一个定制的牌组,由8张顺序为2^n,n=0,…,6的牌组成。我抽牌(不换牌),直到总数等于或大于阈值。如何在R中实现一个计算总和和阈值之间差值平均值的函数 我试着用这个 但这需要很长时间。。。我认为有一种方法可以通过概率/模拟来实现,但我可以找到 阈值可以大于一张卡的值,即阈值=500,也可以小于一张卡的值,即阈值=50 到目前为止,我所做的是找到满足和大于或等于阈值条件的所有子集。然后我将只减去阈值并计算平均值 我在R中使用了以下代码。对于一个小集合,我很快得到了答案。然而,我已经使用包含56个数字的集合运行该函数好几年了,并且仍然在工作R 变量和阈值之间差的期望值,r,sum,subset,mean,R,Sum,Subset,Mean,我有一个定制的牌组,由8张顺序为2^n,n=0,…,6的牌组成。我抽牌(不换牌),直到总数等于或大于阈值。如何在R中实现一个计算总和和阈值之间差值平均值的函数 我试着用这个 但这需要很长时间。。。我认为有一种方法可以通过概率/模拟来实现,但我可以找到 阈值可以大于一张卡的值,即阈值=500,也可以小于一张卡的值,即阈值=50 到目前为止,我所做的是找到满足和大于或等于阈值条件的所有子集。然后我将只减去阈值并计算平均值 我在R中使用了以下代码。对于一个小集合,我很快得到了答案。然而,我已经使用包含
set<-c(rep(1,8),rep(2,8), rep(4,8),rep(8,8),rep(16,8),rep(32,8),rep(64,8))
recursive.subset <-function(x, index, current, threshold, result){
for (i in index:length(x)){
if (current + x[i] >= threshold){
store <<- append(store, sum(c(result,x[i])))
} else {
recursive.subset(x, i + 1, current+x[i], threshold, c(result,x[i]))
}
}
}
store <- vector()
inivector <- vector(mode="numeric", length=0) #initializing empty vector
recursive.subset (set, 1, 0, threshold, inivector)
set我不知道是否有可能得到一个精确的解,因为有太多可能的组合。进行模拟可能更好,即编写一个用于1次完全绘制的脚本,然后多次重新运行该脚本。由于解决方案非常相似,因此模拟应给出相当好的近似值
好的,下面是:
set <- rep(2^(0:6), each = 8)
thr <- 500
fun <- function(set,thr){
x <- cumsum(sample(set))
value <- x[min(which(x >= thr))]
value
}
system.time(a <- replicate(100000, fun(set,thr)))
# user system elapsed
# 1.10 0.00 1.09
mean(a - thr)
# [1] 21.22992
设置为Hi。欢迎来到堆栈溢出。在发布[r]问题时,提供答案通常很有用。当问这样的问题时,分享你的尝试,即使它不起作用,这样我们就可以开始了。嗨,对不起,我是stackoverflow的新手。我编辑了这个问题以显示我到目前为止所做的工作。也许我的方法是“暴力”,但我不知道如何改进它。你解决的问题与我的问题相同吗?是的,这是我在这里指出的问题中发布的链接我在这里发布的代码是你向Pierre指出的代码,经过一些修改,但是,对于一个大集合(在我的例子中是56),它已经运行了几个小时。对于一个小集合,代码工作得很完美,但对于一个大集合,代码工作得并不完美。我想是因为排列在56左右!/23!@比如说,100万次随机抽签就足够了,还是必须是所有可能的组合?因为我写了一个每秒可以画100k的脚本,但我不能完全确定这是否是你想要的。它确实允许您估计平均差异。