2

我正在使用贝叶斯模型平均和贝叶斯套索回归进行预测,我想使用预测对数分数来评估密度预测的准确性。

我将 bms 包用于贝叶斯模型平均,将 monomvn 包用于贝叶斯 LASSO。在 bms 包中,已经实现了计算预测日志分数的函数,但对于 monomvn {bayesian lasso},它没有实现。

我能够通过将每个后验图乘以每个单个观察的相应解释变量来计算套索对象的预测密度,因此我现在有了每个观察的预测密度。

给定预测密度和实现值,我如何估计 R 中的预测对数分数?

最好的

更新(已解决)

在联系了 BMS 包的一位作者之后,这是我的实现:

TrainingIdx <- 1:900
TestIdx <- 901:1000

# d = draws
# n = length of test data
# SigmaSq = Error variance draws # has dimension of (1 X d) 
# PredictiveDensity = X.beta draws # has dimension of (n x d)


scores <- matrix(0, nrow = length(TestIdx), ncol = dim(PredictiveDensity)[2]) # create an empty matrix for log-predictive scores

for(obs in 1:length(TestIdx)){ # for each observation
  for(draw in 1:dim(PredictiveDensity)[2]){    # for each draw
    scores[obs,draw] <- dnorm(y[TestIdx,1][obs], mean = PredictiveDensity[obs,draw], sd = sqrt(SigmaSq[draw]))
  }  
}
lps <- -sum(log(rowMeans(scores)))/ length(TestIdx)

这里的一个问题可能是,这种实现没有考虑参数的不确定性,因此它可能有利于更大的模型,因为样本中的 SigmaSq 对于大型模型往往更小。

4

0 回答 0