我想最小化函数 FlogV(使用多正态分布,Z 是数据矩阵 NxC;SIGMA 它是数据的 var-covariance 的方阵 CxC,R 是长度为 C 的向量)
FLogV <- function(P){
(here I define parameters, P, within R and SIGMA)
logC <- (C/2)*N*log(2*pi)+(1/2)*N*log(det(SIGMA))
SOMA.t <- 0
for (j in 1:N){
SOMA.t <- SOMA.t+sum(t(Z[j,]-R)%*%solve(SIGMA)%*%(Z[j,]-R))
}
MlogV <- logC + (1/2)*SOMA.t
return(MlogV)
}
minLogV <- optim(P,FLogV)
所有这些都是扩展代码的一部分,该代码已经过测试并且运行良好,除了最重要的事情:我无法优化,因为我收到此错误:“solve.default(SIGMA) 中的错误:系统在计算上是奇异的:倒数条件编号 = 3.57726e-55”</p>
如果我使用 ginv() 或 pseudoinverse() 或 qr.solve() 我会得到:“svd(X) 中的错误:'x' 中的无限或缺失值”</p>
问题是:如果我在错误消息之后取 SIGMA 矩阵,我可以求解(SIGMA),特征值都是正的,行列式非常小,但是正的 det(SIGMA) [1] 3.384674e-76
eigen(SIGMA)$values
[1] 0.066490265 0.024034173 0.018738777 0.015718562 0.013568884 0.013086845
….
[31] 0.002414433 0.002061556 0.001795105 0.001607811
我已经阅读了几篇关于像 SIGMA 之类的变化矩阵(接近单数)的论文,对数据规模和形式进行了几次转换,但我意识到,对于像示例这样的 34x34 矩阵,在 det(SIGMA) 接近 e-40 之后, R假设它像0并且计算失败;我也不能减少矩阵维数,也不能在我的函数校正算法中输入奇异矩阵,因为 R 不能使用像 optim 这样的优化函数来评估它。我非常感谢对这个问题的任何建议。在此先感谢,玛丽亚 D。