用 JAGS 和 R 计算 R 平方

机器算法验证 r 贝叶斯 拟合优度 锯齿
2022-04-14 05:55:49

我有以下模型,我在 R 的 JAGS 中运行:

 model {
        for( i in 1:nData){
          y[i] ~ dnorm(mu[i], tau)
          mu[i] <- b0 + inprod(b[],x[i,])              
          }

        tau ~ dgamma(.01,.01)
        b0 ~ dnorm(0,.0001)
        for (j in 1:nPredictors){
          b[j] ~ dgamma(2,2)
          }
        }

它是一个简单的回归模型,在 beta 系数上有一个伽马先验。我可以运行该模型并获得一些合理的结果,但我的老板想知道贝叶斯风味是否比正常的 OLS 回归更好,为此他希望我计算两个模型的 R^2 统计量。我对贝叶斯统计相当陌生,所以如果有人可以分享一些 R 代码来说明它是如何完成的,我将非常感激!

1个回答

有几种方法可以做到这一点。第一个是使用每个的后验平均值,并使用它作为对应于 OLS然后像往常一样计算残差的方差并将其代入计算。当然,您会在 R 中执行此操作。另一种方法是使用方差的后验均值 ( ) 作为计算中残差方差的估计,同样在 R 中完成。前者最接近经典统计中的计算方式.μiβ^XR21/τR2R2

毫无疑问,还有其他方法,(希望)其他人会在他们的答案中指出。

然而,更大的问题是 a) 以作为标准和 b) 将 OLS 估计与使用作为标准的任何其他方法进行比较。我将跳过第一个,将您指向statisticalengineering.comAndrew Gelman作为参考。出现第二个问题是因为 OLS 最大化(“最小二乘”属性的结果),因此没有其他技术(不等同于 OLS)会产生如此高的是选择标准, 那么您的贝叶斯方法注定失败。R2R2R2R2R2

您可能可以建议一个更多的样本外标准,例如,k-fold cross-validation,这将需要对数据子集进行多次 JAGS 运行,然后比较样本外预测值到实际值。您可以在 JAGS 中生成预测值,如在 JAGS或 R中的响应变量中缺失值的答案中观察到的那样。

我还要指出,dgamma(0.01,0.01)分布在很大程度上已经失宠,因为它实际上在零附近提供了相当多的信息。对数正态模型的先验答案可能对此有所帮助。