此公布的R函数中是否存在计算最优性概率的错误。二项式多臂匪徒?

时间:2016-04-14 15:09:13

标签: r

谷歌的研究员史蒂文斯科特发表了一篇名为" A Modern Bayesian Look at the Multi-Armed Bandit" 商业和工业应用随机模型

在图4中的第649页,他给出了一组3个R函数,用于通过仿真计算二项式多臂强盗的最优概率:

sim.post <- function(y, n, ndraws){
  k   <- length(y)
  ans <- matrix(nrow=ndraws, ncol=k)
  no  <- n-y
  for(i in 1:k){
    ans[,i] <- rbeta(ndraws,y[i]+1,no[i]+1)
    return(ans)
  }
}

prob.winner <- function(post){
  k <- ncol(y)
  w <- table(factor(max.col(post), levels=1:k))
  return(w/sum(w))
}

compute.win.prob <- function(y, n, ndraws){
  return(prob.winner(sim.post(y,n,ndraws)))
}

哪里

y =成功试验的次数

n =试验次数

ndraws =模拟的绘制次数

然而,每当我尝试使用这些功能时,我都会收到与y没有列的事实相关的错误。这不是他在第648页给出的函数中的问题。图3是按积分计算的。

y      <- c(1,2,3,4,5,6,7,8,9,10)
n      <- c(10,10,10,10,10,10,10,10,10,10)
ndraws <- 50

compute.win.prob(y = y, n = n, ndraws = ndraws)
  

1中的错误:k:长度为0的参数来自:factor(max.col(post),   等级= 1:k)

这个公式中是否有拼写错误?如果有,那么它的修复方法是什么?

1 个答案:

答案 0 :(得分:2)

我不知道这段代码是否有意义,但我修复了两个相当明显的错误并得到了这个。我使用注释标记了内联更改。

sim.post <- function(y, n, ndraws){
  k   <- length(y)
  ans <- matrix(nrow=ndraws, ncol=k)
  no  <- n-y
  for(i in 1:k){
    ans[,i] <- rbeta(ndraws,y[i]+1,no[i]+1)
  #  return(ans)  # Obviously wrong - move outside the loop
  }
  return(ans)
}

prob.winner <- function(post){
  k <- ncol(post) # change y to post
  w <- table(factor(max.col(post), levels=1:k))
  return(w/sum(w))
}

compute.win.prob <- function(y, n, ndraws){
  return(prob.winner(sim.post(y,n,ndraws)))
}

y      <- c(1,2,3,4,5,6,7,8,9,10)
n      <- c(10,10,10,10,10,10,10,10,10,10)
ndraws <- 50

compute.win.prob(y = y, n = n, ndraws = ndraws)

结果:

   1    2    3    4    5    6    7    8    9   10 
0.00 0.00 0.00 0.00 0.00 0.02 0.00 0.10 0.16 0.72