首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在r中查找带有jags的参数

在r中查找带有jags的参数
EN

Stack Overflow用户
提问于 2018-01-22 16:47:43
回答 1查看 291关注 0票数 0

我得到了包含1000个来自均匀分布的数字的数据~a,b,我需要在r中使用jags来找到它/我尝试过这个代码

代码语言:javascript
复制
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)

这个模型是

代码语言:javascript
复制
model {
    for (i in 1:N) {
        y[i] ~ dunif(a, b)
    }

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

}

但是结果非常糟糕,而不是-3,23,我得到了-42,65

有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-31 04:22:56

我无法复制您的发现,因为您的代码不可重现:我们无法访问您的数据。但是使用具有基本相同模型的模拟数据给出了似乎非常合理的结果:

代码语言:javascript
复制
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不知何故全部(或几乎全部)丢失了。如果这不能解决你的问题,我想你需要发布你的数据集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48377647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档