LaplacesDemon: когда я должен суммировать априорную плотность?

Я перехожу с JAGS на LaplacesDemon и пытаюсь переписать некоторые из своих кодов. Я прочитал Учебное пособие по LaplacesDemon и Примеры LaplacesDemon виньетки, и я немного смущен некоторыми примерами в виньетки.

В простом примере из LaplacesDemon Tutorial (стр. 5) модель записывается так:

Model <- function(parm, Data)
{beta <- parm[Data$pos.beta]
 sigma <- interval(parm[Data$pos.sigma], 1e-100, Inf)
 parm[Data$pos.sigma] <- sigma
 beta.prior <- dnormv(beta, 0, 1000, log=TRUE)
 sigma.prior <- dhalfcauchy(sigma, 25, log=TRUE)
 mu <- tcrossprod(beta, Data$X)
 LL <- sum(dnorm(Data$y, mu, sigma, log=TRUE))
 LP <- LL + sum(beta.prior) + sigma.prior
 Modelout <- list(LP=LP, Dev=-2*LL, Monitor=LP,
 yhat=rnorm(length(mu), mu, sigma), parm=parm)
 return(Modelout)}

Здесь beta.prior суммировалось с LP, так как имеется более одного бета-параметра.

Но я обнаружил, что в более продвинутых примерах в виньетке LaplacesDemon Example это не всегда следует правилу. Например, в примере 87 (стр. 162):

Model <- function(parm, Data)
{### Log-Prior
 beta.prior <- sum(dnormv(beta[,1], 0, 1000, log=TRUE), dnorm(beta[,-1], beta[,-Data$T], matrix(tau, Data$K, Data$T-1), log=TRUE))
 zeta.prior <- dmvn(zeta, rep(0,Data$S), Sigma[ , , 1], log=TRUE)
 phi.prior <- sum(dhalfnorm(phi[1], sqrt(1000), log=TRUE), dtrunc(phi[-1], "norm", a=0, b=Inf, mean=phi[-Data$T], sd=sigma[2], log=TRUE))
 ### Log-Posterior
 LP <- LL + beta.prior + zeta.prior + sum(phi.prior) + sum(kappa.prior) + sum(lambda.prior) + sigma.prior + tau.prior
 Modelout <- list(LP=LP, Dev=-2*LL, Monitor=LP, yhat=rnorm(prod(dim(mu)), mu, sigma[1]), parm=parm)
 return(Modelout)}

(Поместите только часть кодов из-за длины кодов примеров)

Здесь zeta больше одного, но не суммировалось ни в части Log-Prior, ни в части Log-Posterior, beta больше единицы и суммировалось в Log-Prior, а phi также больше одного параметра, но суммировалось как в части Log-Prior, так и в части Log-Posterior.

А в следующем примере на стр.167 вроде опять по другому.

Мне было интересно, в каком сценарии мы должны суммировать априорную плотность? Большое спасибо!


person CYH    schedule 29.03.2017    source источник


Ответы (1)


Вы пробовали запускать код построчно? Вы узнаете, что суммировать нечего, так как dmvn — это функция плотности многомерного нормального распределения, и она возвращает единственное значение — плотность вероятности наблюдаемого вектора zeta. Причина всех сумм заключается в том, что для получения вероятности одновременного наблюдения двух независимых событий мы умножаем их предельные вероятности (или суммируем их логарифмы). Таким образом, мы умножаем вероятности наблюдения всех априорных значений вместе, чтобы получить их совместное распределение.

person Tim    schedule 29.03.2017
comment
Ах, ты прав. Я такой глупый. Независимо от того, куда поместить сумму или сумму несколько раз, значение должно быть одинаковым. Большое спасибо за указание на это, а также за объяснение. - person CYH; 29.03.2017