有个问题想咨询一下大牛,我现在有一个模型有13个参数需要估计,其中有一个参数是非负的(密度函数决定了该参数的非负性),我原以为将该参数的先验分布设为一个非负数的分布,比如对数正态分布就可以了,但是貌似不行。这是我的R代码(基于MCMC)(其余12个参数的先验分布为均值为0,标准差为2的正态分布):
##一共有13参数需要估计,我想用logistic回归的参数估计值作为其中12个未知参数的初始值
out<-glm(y ~ LOAN+YOJ+ DEROG+ DELINQ+ NINQ+ CLNO+Mgr+ Office+ Other+ ProfExe+Sales,data = data,family=binomial(),x=T)
x <- out$x
y <- out$y
##beta是一个13维的向量,beta[1]就是第13个未知参数,就是这个参数不能为负数,我将这个参数的
##先验分布设为对数正态分布(均值为1,标准差为2)
lupost <- function(beta, x, y) {
eta <- as.numeric(x %*% beta[2:13])
theta <- pnorm(eta)^beta[1]
logl<-sum(log(dbinom(y,1,theta)))
return(logl - sum(beta[2:13]^2)/8-log(beta[1])-((log(beta[1])-1)^2)/8)
}
set.seed(42)
#将beta[1]的初始值设为1,其余参数的初始值就是logistic回归估计的值
beta.init <- c(1,as.numeric(coefficients(out)))
out <- metrop(lupost,beta.init, 1000, x = x, y = y)
但是这样子貌似不行,给出错误提示:
Error in system.time(out <- .Call("metrop", func1, initial, nbatch, blen, :
logh: func returned NA or NaN
In addition: Warning messages:
1: In log(beta[1]) : NaNs produced
2: In log(beta[1]) : NaNs produced
有哪位大牛知道,这种参数有非负约束的贝叶斯估计该怎么办?