我正在尝试在R中设置Gibbs采样器,并在每一步更新我的值。
我在R中有一个函数想要最大化2个值;我以前的值和一个新值。
因此,我知道将函数应用于两个值的最大结果。但是,如何在不手动操作的情况下选择最佳输入呢? (我需要做很多迭代)。这是代码和变量的概念:

g0<-function(k){sample(0:1,k,replace=T)}

这是一个k维向量,其条目1或0一致。我的链式店的初始起点。如果i = 1,则将第i个变量包括在设计矩阵中。
X1设计矩阵
Xg<-function(g){
  Xg<-cbind(X1[,1]*g[1],X1[,2]*g[2],X1[,3]*g[3],X1[,4]*g[4],X1[,5]*g[5],X1[,6]*g[6],X1[,7]*g[7])
  return(Xg[,which(!apply(Xg,2,FUN = function(x){all(x == 0)}))])
}
Xg0<-Xg(g0)

简化的g0设计矩阵
c<-1:100000

mp<-function(g){
  mp<-sum((1/(c*(c+1)^-((q+1)/2)))*
  (t(Y)%*%Y-(c/(c+1))*t(Y)%*%Xg(g)%*%solve(t(Xg(g))%*%Xg(g))%*%t(Xg(g))%*%Y)^(-27/2))
  return(mp)
}

这是我的职责。

因此,如果我有mp(g)mp(g*),对于2个输入gg*,使得max为mp(g*),我如何返回g*

感谢您的帮助,如果您有任何疑问,请询问。也为困惑的代码感到抱歉;我以前没有使用过这个网站。

最佳答案

像这样:

inputs     <- list(g, g2)
outputs    <- sapply(inputs, mp)
best.input <- inputs[which.max(outputs)]

关于r - 在R中使用argmax或更简单的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17252798/

10-12 19:43