Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用rjags估计截断正态分布的均值和方差_R_Bayesian_Truncation_Jags - Fatal编程技术网

用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')