4

GAUSS で書かれた MLE 推定器を入手しましたが、これを R に再コーディングしようとしています。GAUSS 自体は使用していませんし、使用したこともありません (アクセス権もありません)。コードには、少し混乱する行があります。

検証済みの GAUSS コードには、「inputs」(コメントの一部) の下に次のような行があります。

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 で) 行列乗算を行うように言っており、それが単純な関数がやろうとしていることです。

コメントや提案は大歓迎です!

4

1 に答える 1

3

あなたの問題は、3x3 行列を 1x1 行列で行列乗算できないことです。私は次のようなものをお勧めします

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

最初のケースでは乗算を残していましたが、すでに行列であるdiag(m)場合はもちろん不要です。invsig

于 2013-05-28T22:33:11.383 に答える