2017-04-11 3 views
0

rjags을 샘플러로 사용하고 있습니다. 모델에는 3 개의 행렬이 정의되어 있습니다. coda.samples 함수는 샘플 목록을 반환합니다. 내가 처음 샘플 목록을 경우 열 이름은 다음과 같이 보일 : mcmc 개체의 변수 재구성

> colnames(output[[1]]) 
"A[1,1]" "A[2,1]" "A[1,2]" "A[2,2]" ... 
"B[1,1]" "B[2,1]" "B[3,1]" "B[4,1]" ... 
"C[1,1]" "C[2,1]" 

는 물론, A, B 및 C는 내 모델의 행렬이다. 나는이 표본들의 평균에 기초하여 그들을 재구성하고 싶다. 내가 쉽게 colMeans(output[[1]])와 의미를 얻을 수 있지만이 벡터에서 매트릭스를 쉽게 재구성하는 방법을 모릅니다.

재구성을위한 좋은 방법은 relist() 기능입니다. 그래서 만약 내가 목록 L = list(A=A,B=B,C=C)에있는 매트릭스 A, B와 C가 있다면이리스트를 unlist()을 가진 벡터로 변환하고 relist()으로 다시 변환 할 수 있습니다. 나는 mcmc 객체에 대해 유사한/readymade를 찾고 있지만 지금까지는 유용하지 않다. 나는 이것을 처음으로 필요로한다고 나는 믿을 수 없다. 분명히 relist(colMeans(output[[1]]))이 작동하지 않습니다.

누구나 재구성에 도움이 될 수 있습니까?

편집 : relist() 함수는 스켈레톤 만 필요하므로, colnames(output[[1]])에서 스켈레톤을 추출하는 것도 트릭을 수행합니다. 또는 나는 복잡하게하고 있는가?

내가 relist()이 트릭을 할 것입니다 생각하지 않습니다

답변

0

...

본인은 R 패키지 coda에 정의 된 개체 output는, 클래스 mcmc.list의 목적은 가정 및 output[[1]] 클래스 mcmc의 목적은 첫 번째 MCMC 체인의 샘플을 나타냅니다.

나는 꽤 확신하고있다. coda은 예를 들어. "A[1,1]"은 JAGS 매트릭스이며 변수 이름으로 처리합니다. 따라서 관련 변수를 반복하고 구조를 직접 지정해야합니다.

이상적으로는 다음과 같은 기능이 포장 것 : output[[1]]에 저장된 행렬 B 3 행과 4 열이있는 경우

getMatrix <- function(output, varname, rows, cols) { 
    unname(
    sapply(1:cols, function(j) 
     sapply(1:rows, function(i) 
     summary(output[,sprintf("%s[%s,%s]", varname, i, j)])[[1]][1] 
    ) 
    ) 
) 
} 

따라서, 예를 들어, 당신이 쓰는 것 :

getMatrix(output[[1]], "B", 3, 4) 

R에서 행렬 객체로 의미를 얻으려면