我得到了一个用 GAUSS 编写的 MLE 估计器,我试图将它重新编码为 R。我不使用,也从未使用过 GAUSS 本身(并且无法访问它)。在代码中,有一行让我有点困惑。

在经过验证的 GAUSS 代码中,“输入”(部分注释)下有一行说明:

invsig: scalar or m-by-m matrix with inverse of sigma

我正在努力让代码一块一块地工作,但我的第一个问题是相对简单的。

这是让我困惑的 GAUSS 片段:
...
local m, k, tobs, invsig
m = rows(y);k = rows(x); tobs = rows(dat)
invsig= eye(m)*invsig
...

我知道这是乘以“输入”invsig 的单位矩阵,但是在有效的模拟示例中(来自附加到代码的日志文件),可以使用 invsig 的标量值启动程序。 IE:将初始值设置为 invsig = 1

在 R 中,这是行不通的。这是尝试获取此信息的简单“测试”代码:
y.mat <- rep(rexp(3))
x.mat <- matrix(rexp(36), 12, 3)
myfct <- function(x,invsig){
   m <- nrow(x)
   invsig <- diag(m)%*%invsig
   return(invsig)
}
t1 <- myfct(x.mat, 1)     ##Non-conformable error
t2 <- myfct(x.mat, y.mat) ##Works

我理解我在 R 中遇到的不一致错误。问题是我在 GAUSS 和 R 之间的转换中是否遗漏了什么?在阅读在线帮助手册时,GAUSS 通过使用单个符号 (*/+-) 进行矩阵运算,并按元素进行操作,您添加一个“.”。每次操作前。所以对我来说,GAUSS 代码说要做矩阵乘法(R 中的 %*%),这就是简单函数试图做的。

任何意见或建议,不胜感激!

最佳答案

您的问题是您不能将 3x3 矩阵与 1x1 矩阵相乘。我会推荐类似的东西

myfct <- function(x,invsig){
    if (is.matrix(invsig)) return(invsig)
    m <- nrow(x)
    return(diag(invsig, nrow = m))
}

编辑 在第一种情况下,我在乘以 diag(m) 时留下了,但是如果 invsig 已经是矩阵,则当然没有必要。

10-07 14:10