0

鉴于我通过 for 循环强制 Hessian 成为 8x8,为什么我会收到错误,认为它是 2x1?

运行 8x8 Hessian 以在 nx8 回归数据集上生成 maxLik。得到一个错误,即 Hessian 是 2x1 而不是 8x8,即使这是在Hessian[i,j]<-中强制执行的。

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)。
  • 参数(估计器的初始迭代,maxLik 下的 start= 参数)向量是 8 个数字字符串,因此 loglambda 是 (nxk)%*%(8x1) 一个 nx1 向量。正确的?
  • 然后时刻是 nx1 * nx1 即 nx1 作为元素乘法。正确的?
  • 并且 Hessian 的每个元素都应该是标量,因为它是一个求和的 kx1 向量(来自时刻 %*% lambda)。这部分代码是不一致的。

主要的 qn 是,即使部分不是正确的维度(可能),Hessian[i,j <- -sum(vector) 应该形成一个标量,通过 {i,j} 在 1:8 循环中应该强制8x8。为什么这不起作用?

4

0 回答 0