MCMC를 사용하여 알려진 밀도의 이변 량 분포에서 샘플링


9

R의 Metropolis 알고리즘을 사용하여 이변 량 밀도 에서 시뮬레이션을 시도했지만 운이 없었습니다. 밀도는 로 표현할 수 있습니다 . 여기서 는 Singh-Maddala 분포입니다(엑스,와이)(와이|엑스)(엑스)(엑스)

(엑스)=엑스1(1+(엑스))1+

매개 변수 , , 및 는 log-mean을 의 분수로 사용하여 log-normal 이며 log-sd 상수입니다. 내 샘플이 원하는 샘플인지 테스트하기 위해 의 한계 밀도를 살펴 보았습니다 . 이는 여야합니다 . R 패키지 MCMCpack, mcmc 및 dream과 다른 Metropolis 알고리즘을 시도했습니다. 번인 (burn-in)을 폐기하고, 얇게하고, 최대 백만 크기의 샘플을 사용했지만 결과로 얻은 한계 밀도는 결코 내가 제공 한 것입니다.(와이|엑스)엑스엑스(엑스)

내가 사용한 코드의 최종판은 다음과 같습니다.

logvrls <- function(x,el,sdlog,a,scl,q.arg) {
    if(x[2]>0) {
         dlnorm(x[1],meanlog=el*log(x[2]),sdlog=sdlog,log=TRUE)+
         dsinmad(x[2],a=a,scale=scl,q.arg=q.arg,log=TRUE)
    }
    else -Inf    
}

a <- 1.35
q <- 3.3
scale <- 10/gamma(1 + 1/a)/gamma(q - 1/a)*  gamma(q) 

Initvrls <- function(pars,nseq,meanlog,sdlog,a,scale,q) {
    cbind(rlnorm(nseq,meanlog,sdlog),rsinmad(nseq,a,scale,q))
}

library(dream)
aa <- dream(logvrls,
        func.type="logposterior.density",
        pars=list(c(0,Inf),c(0,Inf)),
        FUN.pars=list(el=0.2,sdlog=0.2,a=a,scl=scale,q.arg=q),
        INIT=Initvrls,
        INIT.pars=list(meanlog=1,sdlog=0.1,a=a,scale=scale,q=q),
        control=list(nseq=3,thin.t=10)
        )

수렴이 될 때까지 샘플링하기 때문에 꿈 꾸러미에 정착했습니다. 세 가지 방법으로 올바른 결과가 있는지 테스트했습니다. KS 통계를 사용하여 Quantile을 비교하고 Singh-Maddala 분포의 모수를 결과 표본으로부터 최대한으로 추정합니다.

ks.test(as.numeric(aa$Seq[[2]][,2]),psinmad,a=a,scale=scale,q.arg=q)

lsinmad <- function(x,sample)
    sum(dsinmad(sample,a=x[1],scale=x[2],q.arg=x[3],log=TRUE))
 optim(c(2,20,2),lsinmad,method="BFGS",sample=aa$Seq[[1]][,2])

 qq <- eq(0.025,.975,by=0.025)   
 tst <- cbind(qq,
              sapply(aa$Seq,function(l)round(quantile(l[,2],qq),3)),
              round(qsinmad(qq,a,scale,q),3))
 colnames(tst) <- c("Quantile","S1","S2","S3","True")

 library(ggplot2)
 qplot(x=Quantile,y=value,
       data=melt(data.frame(tst),id=1), 
       colour=variable,group=variable,geom="line")

이러한 비교 결과를 볼 때 KS 통계는 표본이 제공된 모수를 가진 Singh-Maddala 분포에서 추출한 귀무 가설을 거의 항상 기각합니다. 최대 가능성 추정 매개 변수는 때때로 실제 값에 가깝지만 샘플링 절차가 성공적으로 완료 될 수 없을 정도로 일반적으로 안락 영역을 벗어납니다. Quantile을 위해, 경험적 Quantile은 너무 멀지 않지만 너무 멀다.

내 질문은 내가 뭘 잘못하고 있니? 내 자신의 가설 :

  1. 이 유형의 샘플링에는 MCMC가 적합하지 않습니다.
  2. 이론적 인 이유로 MCMC가 수렴 할 수 없습니다 (배포 함수가 필요한 특성을 충족하지 않음)
  3. 메트로폴리스 알고리즘을 올바르게 사용하지 않습니다
  4. 독립 표본이 없기 때문에 분포 테스트가 올바르지 않습니다.

에서 싱 - Maddala 배포 링크, PDF로는 두 개의 매개 변수가 - {C, K}를, 아직 R 기능은 dsinmad세 가지 매개 변수를 사용하거나 내가 뭔가를 놓친 거지.
csgillespie

죄송합니다, wikipedia 링크에서 잘못된 수식을 인용했습니다. 질문을 작성할 때 언뜻보기에 괜찮 았습니다. 준비된 링크를 찾지 못해 질문에 수식을 넣었습니다.
mpiktas

답변:


3

순서가 정확하다고 생각하지만 p (x) 및 p (y | x)에 지정된 레이블이 잘못되었습니다. 원래 문제 상태 p (y | x)는 로그 정규이고 p (x)는 Singh-Maddala입니다. 그래서

  1. Singh-Maddala에서 X를 생성하고

  2. 생성 된 X의 일부인 평균을 갖는 로그-노멀로부터 Y를 생성하고;


3

실제로는 문제가 훨씬 간단하기 때문에 MCMC를 수행하지 않아야합니다. 이 알고리즘을 사용해보십시오 :

1 단계 : 로그 법선에서 X 생성

2 단계 :이 X를 고정한 상태로 Singh Maddala에서 Y를 생성합니다.

oil! 샘플 준비 !!!


나는 당신이 단계를 거꾸로 한 것을 의미한다고 가정합니다. 그러나 이것이 매우 단순하다면 왜 깁스 샘플링이 필요한가?
mpiktas

1
아니요, 나는 쓴 순서대로 1 단계와 2 단계를 의미했습니다. 결국, y의 분포는 X에 조건부로 지정되므로 Y보다 먼저 X를 생성해야합니다. Gibbs 샘플링의 경우 더 복잡한 문제에 대한보다 복잡한 솔루션입니다. 당신이 설명하는 것처럼, 당신은 꽤 단호합니다, IMHO.
Mohit

1
당신이 알고있는 경우는 깁스 샘플링을 사용 및 하지만 한계 모르는 경우(와이|엑스)(엑스|와이)(엑스)
probabilityislogic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.