Metropolis Hastings 단계가 R
인 MCMC 알고리즘을 실행 중입니다. 논리 규칙에 따라 제안서 샘플을 수락하거나 거부해야합니다. 내가 if
문이 느리다 들었 MCMC 알고리즘의 성능을 향상시키기 위해 'if'문 대신 사용할 수있는 것은 무엇입니까?
if(sample meets condition){accept}
else{reject}
로 현재,이 구현했지만, MCMC는 일반적으로 확실히 수만에 많은 제안 샘플을 평가 필요합니다. MCMC 알고리즘의이 부분의 속도를 향상시키는 더 빠른 대안은 무엇입니까? ,
A
은 샘플 수용 확률
A = sample(c(0,1),1,prob=c(1-A,A))
if(A==1){
s_acc[i,] = s_new
s_old = s_new
acc[i] = 1
}
else{
s_acc[i,] = s_old
acc[i] = 0
}
, s_new
제안 된 샘플의 값이, s_acc
모두 허용 샘플의 벡터이다 :
코드의 공정의 일례를 제공하려면 s_old
은 현재 이전에 승인 된 샘플이며 acc
은 샘플을 수락 한 수입니다. 코드의이 부분은 반복 횟수가 많은 for
루프에 포함되어 있습니다.
그냥 거기에 아이디어를 던지기 ... 조건을 숫자 값으로 변환하는 방법이 있다면 잘 알려진 값의 사전/해시 테이블을 사용할 수 있습니다. 알려진 좋 컬렉션에 있는지 여부에 따라 수락 또는 거부합니다. 런타임에 값을 평가하는 데 사용되는 것과 동일한 코드를 사용하여 모든 "양호한"옵션을 사전 평가하여 시작시 알려진 된 목록을 작성할 수 있습니다. – theGleep