GAUSS в R код преобразования

Я получил оценщик MLE, написанный на GAUSS, который я пытаюсь перекодировать в 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 "input", но в смоделированных примерах, которые работают (из файлов журнала, прикрепленных к коду), программу можно запустить, используя скалярное значение 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) и это то, что пытается сделать простая функция.

Любые комментарии или предложения с благодарностью!

1 ответ

Ваша проблема в том, что вы не можете умножить матрицу 3х3 на матрицу 1х1. Я бы порекомендовал что-то вроде

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

Отредактировано я оставил в умножении на diag(m) в первом случае, но, конечно, это не нужно, если invsig это уже матрица.

Другие вопросы по тегам