我正在使用贝叶斯模型平均和贝叶斯套索回归进行预测,我想使用预测对数分数来评估密度预测的准确性。
我正在为贝叶斯LASSO使用贝叶斯模型平均和monomvn包的bms包。在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往往更小。