我试图最大化尺寸为2x2的Matrix参数的可能性.似然函数需要传递几个固定矩阵参数,其可能性也是函数.表示为Y的数据和协方差矩阵Sigma.star(我将其作为下三角矩阵传递)是计算所必需的,但我想保留这些数据并对此运行优化函数,在我的代码试图优化A.
我的问题是,似乎错误是因为它正在优化我用于矩阵代数的对象内部的事实.是否有一些方法可以使它工作而无需编程每一个小计算?
具体错误是:
Error in diag(1, nrow = (m^2)) - A %x% A : non-conformable arrays
Run Code Online (Sandbox Code Playgroud)
但是一个kronecker A应该是一个m ^ 2 xm ^ 2矩阵,就像身份......
码:
library(MCMCpack)
library(mvtnorm)
set.seed(1000)
Likelihood.orig<-function(A, Y, Sigma.star){
Sigma<-xpnd(Sigma.star)
n<-nrow(Y)
if(is.vector(A)==TRUE){
A<-as.matrix(A, nrow=nrow(Sigma), ncol=ncol(Sigma))
}
m<-nrow(A)
V<-matrix(solve(diag(1, nrow=(m^2))-A%x%A)%*%as.vector(Sigma), nrow=m, ncol=m)
temp1<- (-.5)*log(abs(det(V)))
temp2<- (-(n-1)/2)*log(abs(det(Sigma)))
temp3<- t(Y[,1, drop=FALSE]) %*% (solve(V)) %*% Y[,1, drop=FALSE]
terms<- numeric(n-1)
for(i in 2:n){
terms[i-1]<- t(Y[,i, drop=FALSE] - A %*%Y[,i-1, drop=FALSE]) %*% (solve(Sigma)) %*% (Y[,i] - A %*%Y[,i-1])
}
return(temp1+temp2-.5*(temp3+sum(terms)))
}
Generate.Y<-function(n, A, Sigma){
m<-nrow(A) …Run Code Online (Sandbox Code Playgroud)