我尝试估计我的数据的衰减。让我解释。想象一下,你观察事件X,并且每个事件都有一个影响y,随着时间exp(-t/Tau)衰减。你观察时间t和事件x以及预测它的影响y。让我给你看看我的JAGS代码。用Jags估计dacay常量
model{
for(j in 1:N){
for(i in 1:p){
td[j,i] <- exp(- t[j,i]/Tau[i])
}
mu[j] <- inprod(X[j,]*td[j,] ,beta[])
Y[j] ~ dnorm(mu[j], sigma)
}
for(j in 1:p){
bsigma[j] ~dgamma(0.001,0.001);
beta[j] ~ dnorm(0,bsigma[j]);
Tau[j] ~ dgamma(0.001,0.001);
}
sigma ~ dgamma(0.001,0.001)
}
我产生R测试数据如下:
N = 1000;
sigma = 0.1;
beta = c(0.75,0.33)
tau = c(5.7,1.3)
X<-cbind(rnorm(N,1,1),rnorm(N,2,1))
t<-cbind(rnorm(N,1,1),rnorm(N,2,1))
t = abs(t);
Y<- rnorm(N,(X*exp(- t/tau))%*%as.matrix(beta),sigma)
随着我的模型,我可以顺利找到测试值,但我无法估计头正确的价值观。
这里的完整代码:
N = 1000;
sigma = 0.1;
beta = c(0.75,0.33)
tau = c(5.7,1.3)
X<-cbind(rnorm(N,1,1),rnorm(N,2,1))
t<-cbind(rnorm(N,1,1),rnorm(N,2,1))
t = abs(t);
Y<- rnorm(N,(X*exp(- t/tau))%*%as.matrix(beta),sigma)
####JAGS
##################
library(mcmcplots)
library(runjags)
library(rjags)
hmodel_jags<- function(X,Y,t){
modelstring = "
model{
for(j in 1:N){
for(i in 1:p){
td[j,i] <- exp(- t[j,i]/Tau[i])
}
mu[j] <- inprod(X[j,]*td[j,] ,beta[])
Y[j] ~ dnorm(mu[j], sigma)
}
for(j in 1:p){
bsigma[j] ~dgamma(0.001,0.001);
beta[j] ~ dnorm(0,bsigma[j]);
Tau[j] ~ dgamma(0.001,0.001);
}
sigma ~ dgamma(0.001,0.001)
}"
writeLines(modelstring,con="dec.txt")
########
set.seed(123)
jags_data <- list(Y = Y,
t = t,
X = X,
p = ncol(X),
N=nrow(X)
)
params <- c("Tau",'sigma','beta')
adapt <- 1000
burn <- 1000
iterations <- 1000
inits <- list()
sample <- run.jags(model="dec.txt", thin =2, monitor=params,data=jags_data, n.chains=2, inits=inits, adapt=adapt, burnin=burn, sample=iterations, summarise=T, method="parallel")
sample
}
res_jags_het <- hmodel_jags(X,Y,t)
我觉得很难理解你的代码。如果你从模拟开始解释什么样的数据需要处理,以及你想估计什么参数(如果你避免使用sigma作为JAGS代码的精度,那么也会有帮助, R脚本中的标准偏差)。 一个直接的困惑:在你的R脚本'beta'中如果修复的话。但是在你的JAGS代码中,不是给出一个“beta”以前的无信息,而是假设它来自具有固定平均值和模拟精度的正态分布。为什么? –
感谢您的评论,并指出我与西格玛的错误。 观察到t,y,x。我想估计beta和tau。 以前均值为0的正态伽马组合应该类似于岭回归或者像ARD那样考虑它。贝叶斯回归,基本上。 – user4666604