4

我得到了一个用 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 中),这就是简单函数试图做的事情。

非常感谢任何意见或建议!

4

1 回答 1

3

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

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

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

于 2013-05-28T22:33:11.383 回答