问题描述
我在这里问了一个问题:
enter link description here
从那里我了解了 as.brob() 函数。
它帮助我避免在将 e 提高到非常大的数字时变得无穷大。 (我将在我编写的代码中使用 exp(as.brob()) 。
现在我的问题是,由于我要调用我的函数并为其提供输入并获得实数输出,因此它给了我一个 S4 类错误。
我怎样才能从 exp(as.brob)) 得到一个真正的值输出?
下面是矩阵法线密度函数:
dMnorm <- function(Y,Mu,Sigma,Psi,Sigma.inv = NULL,Psi.inv = NULL,Sigma.det = NULL,Psi.det = NULL){
if (is.null(Sigma.inv)) Sigma.inv <- solve(Sigma)
if (is.null(Psi.inv)) Psi.inv <- solve(Psi)
if (is.null(Sigma.det)) Sigma.det <- det(Sigma)
if (is.null(Psi.det)) Psi.det <- det(Psi)
p <- dim(Y)[1]
Tt <- dim(Y)[2]
den <- ((2 * pi)^((-1)* p * Tt / 2)) * (Sigma.det^((-1)* Tt / 2)) * (Psi.det^((-1)* p / 2)) *
exp(-1 / 2 * sum(diag(Sigma.inv %*% (Y - Mu) %*% Psi.inv %*% t(Y - Mu)))***)
#cat("dens",den,"\n")
return(den)
}
上面函数的第 9 行是我得到非常小的地方(一个非常大的数字的倒数)。为此我被引导使用 as.brob(),所以我将这部分更改为
1/exp(as.brob(1 / 2 * sum(diag(Sigma.inv %*% (Y - Mu) %*% Psi.inv %*% t(Y - Mu))))***)
但是当我想使用我的函数 dMnorm() 时,我得到:
**Phi.vector[i] 中的错误,我将不胜感激。
ps,不用说,LaplacesDemon 包中的 dmatrixnorm() 在这里不起作用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)