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
это уже матрица.