Как вычислить лог-прогнозирующие баллы в R

Я использую Байесовскую модель усреднения и Байесовскую регрессию Лассо для прогнозирования и хочу оценить точность прогнозов плотности, используя прогностические логарифмические баллы.

Я использую пакет 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 в выборке имеет тенденцию быть меньше для больших моделей.

0 ответов

Другие вопросы по тегам