2013-06-22 68 views
3

我想在R中設置一個Gibbs採樣器,我在每一步更新我的值。 我有一個R函數,我想爲2個值最大化;我以前的價值和一個新的。 所以我知道應用於這兩個值的函數的最大結果。但是,如何在不手動執行的情況下選擇最佳輸入? (我需要做很多迭代)。這裏是代碼和變量的想法:使用argmax或更簡單的R

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*

感謝您的任何幫助,如果您有任何疑問只是問。對於混亂的代碼也很抱歉;我以前沒有用過這個網站。

回答

4

像這樣:

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

謝謝你的幫助;非常感謝! –