1

以下では、optim 関数を使用してこの関数を最小化していますが、これは非常にうまく機能します。私の唯一の問題は、W行列を保存できないことです。最小化するときに関数内で計算しています。どういうわけかW行列を保存する方法はありますか?

W<-c()
GMM_1_stage <- function(beta) {for (i in 1:(nrow(gmm_i))){
  gmm_i[i,]=g_beta(i,beta)}
  gmm_N=t(colSums(gmm_i))%*%colSums(gmm_i) 
  W<-solve((1/(nrow(A)/5))*t(gmm_i)%*%gmm_i) 
  return(gmm_N)
}
GMM_1<-optim(beta_MLE,GMM_1_stage)

よろしくお願いします

4

2 に答える 2

0

を使用して、グローバル環境 (または変数が定義されている最も近い祖先環境) のオブジェクトに割り当てることができます<<-。したがって、たとえば、単純な最適化中に のすべての値を追跡したい場合は、 xこれを行うことができます。

xx<-c()
fun<-function(x){
  xx[length(xx)+1]<<-x
  x^2    
}    
optimize(fun,c(-1,1))
xx
## [1] -2.360680e-01  2.360680e-01  5.278640e-01 -2.775558e-17  4.069010e-05
## [6] -4.069010e-05 -2.775558e-17

あなたの場合、最後の値のみが必要な場合はW、コード内のその行を次のように置き換えることができます。

W<<-solve((1/(nrow(A)/5))*t(gmm_i)%*%gmm_i) 

それらすべてが必要な場合は、最初に set Wlist<-list()、次に関数セットで

Wlist[[length(Wlist)+1]]<<-solve((1/(nrow(A)/5))*t(gmm_i)%*%gmm_i)
于 2013-10-09T15:52:52.553 に答える