予測にベイジアン モデル平均化とベイジアン ラッソ回帰を使用しており、予測ログ スコアを使用して密度予測の精度を評価したいと考えています。
Bayesian Model Averaging には bms パッケージを、Bayesian LASSO には monomvn パッケージを使用しています。bms パッケージでは、予測ログ スコアを計算する関数が既に実装されていますが、monomvn {bayesian lasso} では実装されていません。
各事後描画に各観測の対応する説明変数を掛けることで、なげなわオブジェクトから予測密度を計算できたので、各観測の予測密度が得られました。
予測密度と実現値が与えられた場合、R で予測ログスコアを推定するにはどうすればよいですか?
一番
更新 (解決済み)
BMS パッケージの作成者の 1 人に連絡した後、これが私の実装です。
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)
ここでの問題の 1 つは、この実装ではパラメーターの不確実性が考慮されていないことです。そのため、大規模なモデルではサンプル内の SigmaSq が小さくなる傾向があるため、大規模なモデルが有利になる可能性があります。