用rjags估计截断正态分布的均值和方差
我想估计正态分布的总体平均值和标准偏差,正态分布在特定值处被截断。更具体地说,我想通过使用截断分布来获得这些不可信分布的估计 我使用了用rjags估计截断正态分布的均值和方差,r,bayesian,truncation,jags,R,Bayesian,Truncation,Jags,我想估计正态分布的总体平均值和标准偏差,正态分布在特定值处被截断。更具体地说,我想通过使用截断分布来获得这些不可信分布的估计 我使用了rjags包来做这件事,但我得到的估计值甚至不接近总体平均值和标准偏差。因此,我可能犯了一个错误,但我不知道错误是什么。代码如下: library(rjags) sigma <- 1 # Standard deviation in population y <- qnorm(seq(1/101, 1/101*100, 1/101), mean =
rjags
包来做这件事,但我得到的估计值甚至不接近总体平均值和标准偏差。因此,我可能犯了一个错误,但我不知道错误是什么。代码如下:
library(rjags)
sigma <- 1 # Standard deviation in population
y <- qnorm(seq(1/101, 1/101*100, 1/101), mean = 0, sd = sigma) # Observed scores
y <- y[y > 0] # Truncated scores
k <- length(y) # Number oberved effect sizes which are left after truncation
### Model
modelstring <- "
model
{
for(i in 1:k){
y[i] ~ dnorm(mu,prec)T(0, )
}
mu ~ dnorm(0,.001)
sigma ~ dunif(0,100)
prec <- 1/(sigma*sigma)
}
"
### Running jags
model <- jags.model(textConnection(modelstring),
data = list('y' = y,
'k' = k),
n.chains = 4,
n.adapt = 1000)
update(model, 10000)
jags.samples(model,
c('mu', 'sigma'),
10000)
库(rjags)
西格玛:你说话不连贯y
是一个分位数向量,而它应该是一个随机向量(通过rnorm
而不是qnorm
获得)。例如,我同意。但是,如果它不适用于分位数,它也肯定不适用于随机数。将T(0,)
替换为T(mu,)
,以实际复制生成数据的模型。好的,谢谢,这看起来更好了w.r.T.估计值!。你能解释一下当截断为T(mu,)时为什么它会起作用吗?在我看来,这有点违反直觉。如果不指定分布的约束为半正态(即在其平均值处截断),则其他截断的正态非常适合(具体来说,平均值为0.8,sd为0.6)。这可能有助于可视化正在发生的事情:曲线(ifelse(x>0,dnorm(x,0.8,0.6),0),-0.5,3,n=10000);abline(v=c(0,0.8),lwd=3,col=c('00000030','ff000030');点(y,抖动(代表(0,k)),pch=20,cex=0.8,col='#00000050')
。