用r中的jags查找参数

时间:2018-01-22 08:47:43

标签: r jags

我给出的数据包含来自均匀分布的1000个数字〜[a,​​b] 我需要在r中使用jags来找到它/ 我试过这段代码

library(arm)
library('rjags')
library(coda)
library(readr)

x <- read.csv(file='C:/Users/Amir/Desktop/אבנר/data analysis/תרגילים/תרגיל 
3/Unif.csv', header=FALSE)
N<-length(x)
y <- x[1:1000,1]

dat<- list("y" = y, "N" = N)
jags.inits <- function() {list (a = -3, b = 30)}
parameters<- c("a", "b")

reg.jags <- jags.model(file='1.txt', data=dat, n.chains = 4, n.adapt = 1000)

update(jags, n.iter=1000)

regression.sim<-coda.samples(reg.jags, variable.names=parameters, 
n.iter=15000)

summary(regression.sim)

,模型是

model {
    for (i in 1:N) {
        y[i] ~ dunif(a, b)
    }

      a ~ dnorm(-5, .0001)
      b ~ dnorm(15, .0001) 

}

但结果非常糟糕,而不是[-3,23]我绕过[-42,65]

任何帮助?

1 个答案:

答案 0 :(得分:1)

由于您的代码无法重现,我无法复制您的发现:我们无法访问您的数据。但是使用具有基本相同模型的模拟数据会给出看起来非常合理的结果:

library('runjags')

m <- 'model{

    for(i in 1:N){
        Obs[i] ~ dunif(a, b)
    }

    a ~ dnorm(0, 10^-6)
    b ~ dnorm(0, 10^-6)

    #data# N, Obs
    #monitor# a, b
    #inits# a, b

}'

N <- 1000
Obs <- runif(N, 1, 7)
a <- 0
b <- 10

results <- run.jags(m)
plot(results)
results
range(Obs)

a和b的上限和下限95%置信区间分别非常接近Obs的范围,模式估计值更接近相应的上限和下限95%CI(最大似然解决方案恰好在数据的范围),并且改变N的大小给出更窄/更宽的95%CI。所有这一切都如预期的那样。

我对你的问题的最好猜测是,你的y在某种程度上都是(或几乎全部)缺失。如果这无法解决您的问题,我认为您需要发布数据集。