我得到了一个用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中的%*%),这就是简单函数所要做的。
如有任何意见或建议,敬请见谅!
发布于 2013-05-28 22:33:11
你的问题是你不能把3x3矩阵和1x1矩阵相乘。我推荐这样的东西
myfct <- function(x,invsig){
if (is.matrix(invsig)) return(invsig)
m <- nrow(x)
return(diag(invsig, nrow = m))
}在第一种情况下,编辑了我在乘以diag(m)时留下的部分,但是如果invsig已经是一个矩阵,那么当然没有必要。
https://stackoverflow.com/questions/16802256
复制相似问题