首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GAUSS到R码转换

GAUSS到R码转换
EN

Stack Overflow用户
提问于 2013-05-28 22:04:46
回答 1查看 2.4K关注 0票数 4

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

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

代码语言:javascript
复制
invsig: scalar or m-by-m matrix with inverse of sigma

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

以下是让我感到困惑的GAUSS片段:

代码语言:javascript
复制
...
local m, k, tobs, invsig
m = rows(y);k = rows(x); tobs = rows(dat)
invsig= eye(m)*invsig
...

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

在R中,这是行不通的。下面是简单的“测试”代码来尝试获得以下内容:

代码语言:javascript
复制
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中的%*%),这就是简单函数所要做的。

如有任何意见或建议,敬请见谅!

EN

回答 1

Stack Overflow用户

发布于 2013-05-28 22:33:11

你的问题是你不能把3x3矩阵和1x1矩阵相乘。我推荐这样的东西

代码语言:javascript
复制
myfct <- function(x,invsig){
    if (is.matrix(invsig)) return(invsig)
    m <- nrow(x)
    return(diag(invsig, nrow = m))
}

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16802256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档