Я намагався імітувати з двовимірної щільності використовуючи алгоритми Metropolis в R і не пощастило. Щільність можна виразити як , де - поширення Сінг-Маддала
з параметрами , , , і є log-нормальним з log-середнім у вигляді частки , а log-sd - константа. Щоб перевірити, чи є мій зразок таким, який я хочу, я переглянув граничну щільність, що має бути . Я спробував різні алгоритми Metropolis від R пакетів MCMCpack, mcmc та мрії. Я відкинув вигорання, застосував проріджування, використав зразки розміром до мільйона, але отримана гранична щільність ніколи не була тією, яку я постачав.
Ось остаточне видання мого коду, який я використав:
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, порівнюючи кванти та оцінюючи параметри розподілу Сінг-Маддала з максимальною вірогідністю з отриманої вибірки:
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 майже завжди відкидає нульову гіпотезу про те, що вибірка є з розподілу Сінгха-Маддала з наданими параметрами. Максимально оцінені показники ймовірності іноді наближаються до справжніх значень, але зазвичай занадто далеко від зони комфорту, щоб визнати, що процедура відбору проб була успішною. Діто для квантових, емпіричних квантових значень не надто далеко, але занадто далеко.
Моє запитання - що я роблю неправильно? Мої власні гіпотези:
- MCMC не підходить для цього типу вибірки
- MCMC не може зближуватися з теоретичних причин (функція розподілу не відповідає необхідним властивостям, якими б вони не були)
- Я неправильно використовую алгоритм Metropolis
- Мої тести на розподіл невірні, оскільки я не маю незалежної вибірки.
dsinmad
приймає три параметри чи мені щось не вистачає.