我正在尝试在 R 中设置一个 Gibbs 采样器,我在每一步更新我的值。我在 R 中有一个函数,我想最大化 2 个值;我以前的值和一个新值。所以我知道应用于这两个值的函数的最大结果。但是,如何在不手动操作的情况下选择最佳输入呢?(我需要做很多迭代)。这是代码和变量的想法:
g0<-function(k){sample(0:1,k,replace=T)}
这是 ak 维向量,其条目 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)
and mp(g*)
,对于 2 个输入g
and g*
,那么最大值是mp(g*)
我如何返回g*
?
感谢您的帮助,如果您有任何疑问,请询问。也对混乱的代码感到抱歉;我以前没有使用过这个网站。