0

for ループを介して Hessian を 8x8 に強制しているのに、2x1 であるというエラーが表示されるのはなぜですか?

8x8 Hessian を実行して、nx8 リグレッサー データセットで maxLik を生成します。Hessian[i,j]<- で強制されているにもかかわらず、Hessian が 8x8 ではなく 2x1 であるというエラーが発生します。

x <- independent.variable.matrix.nby8
param <- c(1,1,1,1,1,1,1,1)

Hessian <- matrix(ncol=8,nrow=8)
hess.lik <- function(param) {
  loglambd <- x%*%param       
  lambd <- exp(loglambd)
  for (i in 1:8){
    for (j in 1:8){
      moment <- x[,i]*x[,j]
      return(dim(moment))
      Hessian[i,j] <- -sum(moment%*%lambd)
    } 
  }
}
  • データセット x は nxk (4406x8) です。
  • param (推定量の最初の反復、maxLik の下の start= 引数) ベクトルは 8 個の数値文字列であるため、loglambda は (nxk)%*%(8x1) nx1 ベクトルです。右?
  • モーメントはnx1 * nx1、つまり要素の乗算としてnx1です。右?
  • ヘッセ行列の各要素は、合計された kx1 ベクトルであるため、スカラーである必要があります (瞬間 %*% ラムダからの結果)。コードのこの部分は準拠していません。

主な qn は、パーツが正しい次元でなくても (おそらく)、Hessian[i,j <- -sum(vector) はスカラーを形成する必要があり、1:8 ループの {i,j} を介して8x8。なぜそれが機能しないのですか?

4

0 に答える 0