在 r 中查找带有锯齿的参数
finding parameters with jags in r
我得到的数据包含 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]
有什么帮助吗?
我无法复制您的发现,因为您的代码不可重现:我们无权访问您的数据。但是使用具有基本相同模型的模拟数据给出的结果似乎非常合理:
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% 置信区间和下 95% 置信区间分别非常接近 Obs 的范围,模式估计更接近各自的上 95% 和下 95% CI(最大似然解决方案将恰好在数据范围内),并且改变 N 的大小给出 narrower/wider 95% CI。所以一切如预期。
我对你的问题的最佳猜测是你的 y 以某种方式全部(或几乎全部)丢失。如果这不能帮助解决您的问题,我认为您需要 post 您的数据集。
我得到的数据包含 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]
有什么帮助吗?
我无法复制您的发现,因为您的代码不可重现:我们无权访问您的数据。但是使用具有基本相同模型的模拟数据给出的结果似乎非常合理:
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% 置信区间和下 95% 置信区间分别非常接近 Obs 的范围,模式估计更接近各自的上 95% 和下 95% CI(最大似然解决方案将恰好在数据范围内),并且改变 N 的大小给出 narrower/wider 95% CI。所以一切如预期。
我对你的问题的最佳猜测是你的 y 以某种方式全部(或几乎全部)丢失。如果这不能帮助解决您的问题,我认为您需要 post 您的数据集。