r - GAUSS 到 R 代码转换

标签 r statistics matrix-multiplication gauss

我得到了一个用 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 已经存在,当然这是不必要的一个矩阵。

关于r - GAUSS 到 R 代码转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16802256/

相关文章:

r - ggplot 上的抛物线引用线

r - 如何在ggplot中重新排序连续变量?

来自 data.frame 每一列的随机样本

string - 返回字符串文字的 R 函数

algorithm - MATLAB 中超大矩阵的高效乘法

c++ - 是否有用于 x86 的良好 double 小型矩阵 SIMD 库?

r - 如何用线条创建玫瑰图

r - 使用 qqline() 检查残差正态性时出现 "plot.new"错误

c++ - 具有某些特征的伪随机函数算法

algorithm - 查找矩阵组的数量