Tôi đã cố gắng mô phỏng từ mật độ bivariate bằng thuật toán Metropolis trong R và không gặp may. Mật độ có thể được biểu thị là , trong đó là phân phối Singh-Maddala
với các tham số , , và là log-normal với log-mean là một phần của và log-sd là một hằng số. Để kiểm tra xem mẫu của tôi có phải là mẫu tôi muốn hay không, tôi đã xem xét mật độ biên của , nên là . Tôi đã thử các thuật toán khác nhau của Metropolis từ các gói R MCMCpack, mcmc và dream. Tôi đã loại bỏ burn-in, sử dụng pha loãng, các mẫu đã sử dụng với kích thước lên tới hàng triệu, nhưng mật độ biên không bao giờ là mẫu tôi cung cấp.
Đây là phiên bản cuối cùng của mã tôi đã sử dụng:
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)
)
Tôi đã giải quyết gói mơ ước, vì nó lấy mẫu cho đến khi hội tụ. Tôi đã kiểm tra xem tôi có kết quả chính xác theo ba cách không. Sử dụng thống kê KS, so sánh các lượng tử và ước tính các tham số của phân phối Singh-Maddala với khả năng tối đa từ mẫu kết quả:
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")
Khi tôi nhìn vào kết quả của những so sánh này, thống kê của KS hầu như luôn bác bỏ giả thuyết khống cho rằng mẫu là từ phân phối Singh-Maddala với các tham số được cung cấp. Khả năng tối đa các tham số ước tính đôi khi đến gần với giá trị thực của nó, nhưng thường ở quá xa vùng thoải mái, để chấp nhận rằng quy trình lấy mẫu là thành công. Ditto cho các lượng tử, lượng tử theo kinh nghiệm không quá xa, nhưng quá xa.
Câu hỏi của tôi là những gì tôi đang làm sai? Giả thuyết của riêng tôi:
- MCMC không phù hợp với kiểu lấy mẫu này
- MCMC không thể hội tụ, vì lý do lý thuyết (hàm phân phối không thỏa mãn các thuộc tính bắt buộc, bất kể chúng là gì)
- Tôi không sử dụng thuật toán đô thị chính xác
- Các thử nghiệm phân phối của tôi không chính xác, vì tôi không có mẫu độc lập.
dsinmad
có ba tham số hoặc tôi thiếu một cái gì đó.