谷歌的研究员史蒂文斯科特发表了一篇名为" 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)
这个公式中是否有拼写错误?如果有,那么它的修复方法是什么?
答案 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