2013-05-28 2 views
3

GAUSS로 작성된 MLE 견적서를 사용하여 R 코드를 다시 작성하려고합니다. 사용하지도 않고 GAUSS 자체도 사용하지 않았습니다. 그것). 코드에는 약간 혼란스러운 선이 있습니다.GAUSS에서 R 코드로 변환

invsig: scalar or m-by-m matrix with inverse of sigma 

을 나는 조각으로 조각을 작동하도록 코드를 받고 일하고 있지만, 내 첫 번째 : 검증 된 가우스 코드에서

는 상태 (의견의 일부) "입력"아래 줄이 질문은 비교적 간단합니다. 여기

나를 혼란 가우스 조각입니다 :

... 
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 사이의 변환에 뭔가를 놓친 거지되는 질문 R.에서 점점 오전 비 정합 오류를 이해 : 여기에 간단한 "테스트"코드는이를 얻으려고하는 것입니다? GAUSS는 도움말 매뉴얼을 온라인으로 읽는 동안 개별 기호 (*/+ -)를 사용하여 행렬 연산을 수행하고 요소 방식으로 일을 수행 할 때 "." 각 작업 전에. 그래서 저에게 GAUSS 코드는 행렬 곱셈 (R에서 %*%)을 수행한다고 말하면서 단순 함수가 시도하는 것입니다.

모든 의견이나 제안을 보내 주시면 대단히 감사하겠습니다.

+0

이것은 당신이 묻는 문제는 아니지만, GAUSS에서는'm'이'y'의 행의 개수로 정의되어있는 것처럼 보입니다 만, R에서는'x'의 행의 수 '. – Gregor

+0

감사합니다. 예, 샘플 함수는 GAUSS 코드의 변형입니다 (단어 복제본의 단어가 아님). 그것들은 큰 프로그램에서 이와 같은 여러 가지 행렬을 가지고 있기 때문에 실수로 변수를 섞어 버렸지 만, 내가 돌아가서 x에서 y로 되돌려 놓으면 문제가 남아 있습니다. – Tony

답변

3

문제는 3x3 매트릭스에 1x1 매트릭스를 매트릭스 곱할 수 없다는 것입니다. 나는 첫 번째 경우에 diag(m)하여 곱셈에 남아했지만, invsig 이미 매트릭스의 경우 물론이 불필요 편집

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

같은 것을 권 해드립니다.

+0

감사 드려요. 나는 여전히 행렬 곱셈에서 GAUSS와 R의 차이에 대해 혼란 스럽다. 나는 GAUSS 코드에서 뭔가를 생략하지 않으면 매트릭스와 스칼라로 동시에 작동 할 수 있다는 것을 이해하지 못한다. 스칼라 및 길이 (m) 행렬이 될 수 있고 여전히 두 가지 방법을 모두 해결할 수 있다는 사실은 드문 경우입니다. – Tony

+0

나는 GAUSS도 모른다.하지만 "nice"하고 혼란스러운 기본값을 가지고있다. 행렬 시간 ('% * %')은 스칼라가 행렬에 스칼라를 규칙적으로 반환하는 곳이다. – Gregor

+0

GAUSS의 접근법은 실제로 수학적으로 의미가 있습니다. (스칼라 행렬)의 경우 요소 승법을, 행렬 행렬 (matrix * matrix)의 경우 표준 곱셈을 의미하는 것으로 '*'을 오버로드하는 것은 의미가 있습니다. 요소 승법은 스칼라 기준의 표준 수학적 해석이기 때문에, 행렬 곱셈. MATLAB, GAUSS, AD 모델 빌더는 R 's Hadamard 제품 표기법이 프로그래밍에 더 편리하다고하더라도 수학 표기법과 일관성이 있습니다. –