저는 베이지안 통계 연구를 처음 사용합니다. 베이지안 연구원들이 JAGS / Stan과 같은 도구를 사용하는 대신 MCMC를 스스로 구현하는 것이 더 좋다고 연구원들로부터 들었습니다. 학습 목적을 제외하고 MCMC 알고리즘을 R과 같이 "빠르지 않은"언어로 구현하면 어떤 이점이 있습니까?
저는 베이지안 통계 연구를 처음 사용합니다. 베이지안 연구원들이 JAGS / Stan과 같은 도구를 사용하는 대신 MCMC를 스스로 구현하는 것이 더 좋다고 연구원들로부터 들었습니다. 학습 목적을 제외하고 MCMC 알고리즘을 R과 같이 "빠르지 않은"언어로 구현하면 어떤 이점이 있습니까?
답변:
일반적으로 실제 적용되는 베이지안 분석을 위해 자신의 MCMC를 코딩 하지 않는 것이 좋습니다 . 이것은 좋은 작업과 시간의 거래와 둘 다 매우 가능성이 코드에서 버그를 소개합니다. Stan과 같은 블랙 박스 샘플러는 이미 매우 정교한 샘플러를 사용합니다. 날 믿어, 당신은 단 하나의 분석을 위해이 구경의 샘플러를 코딩하지 않을 것입니다!
이것으로 충분하지 않은 특별한 경우가 있습니다. 예를 들어 실시간으로 분석해야하는 경우 (예 : 들어오는 데이터를 기반으로 한 컴퓨터 결정) 이러한 프로그램은 좋지 않습니다. Stan은 C ++ 코드를 컴파일해야하므로 비교적 간단한 모델을 위해 이미 준비된 샘플러를 실행하는 것보다 시간이 더 오래 걸릴 수 있습니다. 이 경우 자신의 코드를 작성하는 것이 좋습니다. 또한 비 가우시안 상태 공간 모델과 같이 Stan과 같은 패키지가 매우 열악한 특수 사례가 있다고 생각 합니다. 이 경우 사용자 지정 MCMC를 구현하는 것이 좋습니다. 그러나 이것은 예외가 아니라 규칙입니다!
솔직히 말해서, 단일 분석을 위해 샘플러를 작성하는 대부분의 연구자들은 자신의 샘플러를 작성하기를 원하기 때문에 그렇게합니다. 최소한, 나는 그 범주에 속한다고 말할 수 있습니다 (즉, 내 자신의 샘플러를 작성하는 것이 최선의 방법이 아니라는 것에 실망합니다).
또한 단일 분석을 위해 자체 샘플러를 작성하는 것은 의미가 없지만 분석 클래스에 대한 고유 코드를 작성하는 것이 좋습니다.. JAG, Stan 등은 블랙 박스 샘플러이기 때문에 개선 정도는 모델에 따라 다르지만 항상 주어진 모델을 전문화하여 작업 속도를 높일 수 있습니다. 그러나 처음부터 매우 효율적인 샘플러를 작성하는 것은 경험, 모델 복잡성 등에 따라 10-1,000 시간의 작업 일 수 있습니다. 베이지안 방법을 연구하거나 통계 소프트웨어를 작성하는 경우에는 문제가 없습니다. 당신의 직업입니다. 그러나 상사가 "이봐,이 반복 측정 데이터 세트를 분석 할 수 있습니까?"라고 말합니다. 효율적인 샘플러를 작성하는 데 250 시간을 소비하면 상사가 화가납니다. 대조적으로,이 모델을 Stan에서 2 시간 안에 작성할 수 있었으며, 효율적인 샘플러가 달성 한 1 분 실행 시간 대신 2 분의 실행 시간을 가졌습니다.
이 질문은 주로 의견에 근거한 것이지만 여기에 답을 적는 것으로 충분하다고 생각합니다. 연구 문제를 위해 자신의 샘플러를 코딩하는 데는 여러 가지 이유가있을 수 있습니다. 여기에 그들 중 일부가 있습니다
제안 : 의견에서 제안 된 fcop에서 샘플이 MH 인 경우 자체 샘플러를 코딩하면 제안 된 분포를 사용하여 최상의 혼합 샘플러를 얻을 수 있습니다.
유연성 : 내장 된 프로그램은 원하는 유연성을 제공하지 않을 수 있습니다. 특정 임의의 값에서 시작하거나 특정 시드 구조를 사용할 수 있습니다.
이해 : 자신 만의 샘플러를 코딩하면 샘플러의 동작을 이해하고 Markov 체인 프로세스에 대한 통찰력을 얻을 수 있습니다. 이것은 문제를 연구하는 연구원에게 유용합니다.
Onus : 내가 모든 베이지안 추론을하는 데이터가 내가 코딩하지 않은 프로그램에서 온다면, 추론에 대한 책임은 더 이상 나에게 있지 않습니다. 연구원으로서 본인은 제시 한 방법 / 결과에 대해 전적으로 책임을지고 싶습니다. 내장 메소드를 사용하면 그렇게 할 수 없습니다.
더 많은 이유가있을 수 있지만, 이것이 나만의 샘플러를 코딩하게하는 네 가지 이유입니다.
Cliff AB의 답변에 +1을주었습니다. 하나의 작은 tidbit를 추가하려면 코드 레벨 자체가 아닌 하위 레벨에서 작업하려면 LaplacesDemon 패키지 를 찾아야 합니다. 최초의 저자는 훌륭했지만 그리드를 벗어난 것으로 보이며 다른 사람이 패키지를 인수했습니다. (Github에 있다고 생각합니다.)
그것은 구현 인상적인 MCMC에 사용되는 알고리즘의 수와 포함 된 삽화는 당신이 패키지를 사용하지 않는 경우에도 읽을 가치가있다. 당신이 읽은 거의 모든 종류의 샘플러가 있습니다. BUGS / JAGS 또는 Stan과 다른 방식으로 코딩하며 모두 R로되어 있지만 종종 너무 효율적이기 때문에 경쟁력이 있습니다.
LaplacesDemon
익숙한 경우 와 비슷 합니다. 들려서 다행 nimble
입니다. 최소한 다운로드하겠습니다. (여러 가지 LaplacesDemon 비 네트는 민첩하게 사용하더라도 다운로드 할 가치가있을 수 있습니다.) ... 오, 그냥 페이지로갔습니다. SMC를 쉽게 사용할 수 있다면 큰 팬이 될 것입니다. 내가 본 유일한 R 패키지는 SMC가 끔찍하게 복잡합니다.
nimble
웹 사이트를 읽은 후에는 꽤 인상적입니다. 내가 들어 본 적이없는 이유는 무엇입니까? BUGS / JAGS 모델링 언어에 익숙한 사람들에게 훌륭한 옵션 인 것 같습니다. 물론, 그들은 웹 사이트에서 가장 잘 비교할 수 있지만, 지금까지는 그것을 좋아합니다. (와 것을 제외하고 말입니다 rstanarm
및 brms
후드 스탠를 사용하는, 편의성의 사용하기에-R 챔피언 스탠 될 것입니다.)