我希望有人可以帮助在OpenBUGS中使用非线性模型。问题有些不对,但我们有很多数据。
我们有一个陷阱网络,用于收集映射树木的森林图中的落叶。
我试图通过拟合以下模型来确定树木直径和枯枝落叶产量之间的异速生长关系:
在距离直径“DBH”cm
tree1.litter = alpha*gamma^2 * DBH^Beta/(2*pi) * exp(-gamma*z-delta*DBH)
但是,我们的陷阱数据包含来自多个树的输入。
Obs.Litter = tree1.litter + tree2.litter + ... + treej.litter + error
数据格式如下:
list(Total.trees = 646, N.trap=4.600E+01,
DBH=c(3.470E+01, 2.940E+01,...) diameters (cm) for 656 trees
z=c(2.500E+01, 1.632E+01, ...) displacment (m) for 656 trees
trap.id = c(1, 1, 1,1, 1, 2, 2,, 2, 2, ..., 46, 46) for 656 trees
Obs.Litter = c(24, 12, ...) amount of litter(g) for each of 46 traps
cumulative.trees = c(36, 39, ...) cumulative number of trees in each of 46 trap neighborhoods
model{
for(i in 1:Total.trees){
tree[i] <- alpha*pow(gamma,2)/(2*3.141593) * pow(DBH[i],Beta) *exp(-gamma*z[i]-delta*DBH[i])
}
Obs.Litter[1] ~ dnorm(Expected.Litter[1], tau)
Expected.Litter[1]<- sum(tree[1 : cumulative.trees[1]])
for(j in 2: N.trap){
Obs.Litter[j] ~ dnorm(Expected.Litter[j], tau)
Expected.Litter[j] <- sum(tree[cumulative.trees[j-1]: cumulative.trees[j] ])
}
#Priors
tau ~ dgamma(0.001, 0.001)
sigma <- 1/sqrt(tau)
alpha~dgamma(0.001, 0.001)
Beta~dgamma(0.001, 0.001)
gamma~dgamma(0.001, 0.001)
delta~dgamma(0.001, 0.001)
}
list(alpha=20,Beta=5,gamma=5,delta=5,tau = 10)
list(alpha=20,Beta=6,gamma=2,delta=1,tau = 10)
我已经取得了进展,并且已经多次更新帖子。我已经能够运行一个Gibb的采样器,但是没有得到令人满意的混音和不合理的结果。观察到的Litter值是10s克,但我估计<10 ^ -7 g垃圾输入。
由于我希望所有参数都采用正值,因此我决定选择伽玛先验。我认为问题出在前辈身上。我的意图是使用无知的先验,但我有一个模糊的想法,参数将采取以下值: alpha = 2:20 Beta = ~2 gamma = .2 delta = .02