基于贝叶斯模型的预测

机器算法验证 贝叶斯 预言 锯齿
2022-04-01 10:21:55

我创建了一个贝叶斯模型,该模型使用 R 中的 rjags 估计 6 个参数。现在我想根据 R 中的新数据进行一些预测。谁能帮我举个例子。

model {
   B.m[1] <- Kb # mean B[1]
   B[1] ~ dnorm( B.m[1], tau_B)
   for(t in 2 : 10) { # Process model
      B.m[t]<- max( B[t-1] + rB[t-1](1 -B[t-1]/K) - C[t-1] , 0.0)
      B[t] ~ dnorm(B.m[t], tau_B) } # Observation mode
      for (t in 1: 10) {
         LogC_mean[t] <- log( max(qsegB[t]Eff[t], 0.000001))
         C[t] ~ dlnorm(LogC_mean[t], tau_c) } # Prior
         b~dbeta(1, 1)
         cv <- 1
         K.mean <- 500000
         K.v <- pow(cvK.mean, 2)
         K.tau <- 1/K.v
         K ~ dnorm(K.mean, K.tau)
         r ~ dlnorm(0.0, 1.4)
         qseg ~ dlnorm(-15.4, 1.44)
         tau_c ~ dgamma(0.001,0.001)
         tau_B ~ dgamma(0.01,0.01)
       }
    }
1个回答

通常,在贝叶斯模型中,您对新数据进行预测的方式与使用非贝叶斯模型相同。由于您的示例很复杂,因此我将提供一个简化的示例,以使事情更容易说明。假设您要估计线性回归模型

yi=β0+β1xi+εi

并基于您要预测的模型ynew给定的值xnew数据。在这种情况下,您插入xnew估计模型和 JAGS 样本ynew基于您的模型的值。代码看起来类似于:

 beta0 ~ dnorm(0, 10)
 beta1 ~ dnorm(0, 10)
 sigma ~ dunif(0, 50)
 for (i in 1:N) {
    y[i] ~ dnorm(beta0 + beta1 * x[i], sigma)
 }
 for (j in 1:Nnew) {
    ynew[j] ~ dnorm(beta0 + beta1 * xnew[j], sigma)
 }

其中是数据向量,并且y用于存储预测的变量。您得到的是根据您的估计模型合理的值分布。由于模型是概率的,所以预测也是概率的,即我们得到了可能值的整体分布。对于点值取 的平均值,您还可以使预测区间从值中获取最高密度区间。xxnewynewynewynewynew