Возникли проблемы с моделью байесовского вывода - JAGS с R - PullRequest
0 голосов
/ 30 декабря 2018

Я пытался воспроизвести результаты следующей статьи, используя R и JAGS, но безуспешно.Я могу заставить модель работать, но показанные результаты постоянно отличаются.

Ссылка на статью: https://www.pmi.org/learning/library/bayesian-approach-earned-value-management-2260

Цель статьи - использовать данные, собранные из отчетов управления проектами.например, оценить дату или бюджет завершения проекта.Результаты выполнения проекта в основном отражаются с использованием измерения Заработанной стоимости, который в основном основан на соотношении между фактической работой, выполненной и объемом работ, который планировалось выполнить до контрольной даты (в словах «Работа выполнена / Запланированная работа»).).Таким образом, если я потратил на третий месяц проекта 300 000 долл. США для производства объема работы, который ранее планировал потратить 270 000 долл. США, мой Индекс затрат (CPI) составит 300 000/270 000 = 1,111.Точно так же, если к 3-му месяцу я выполнил объем работы, который соответствует тому, что планировалось завершить к 2-му месяцу, мой индекс эффективности графика (SPI) будет 2/3 = 0,667.

Общая проблема, стоящая за этим документом, заключается в том, как использовать измерение производительности для обновления предыдущего представления об окончательной эффективности проекта.

Мой код показан ниже.Я должен был выполнить преобразование данных (добавив 1 перед выполнением log (), потому что некоторые из них были бы отрицательными, и JAGS выдает ошибку (вот почему параметры в моей модели отличаются от тех, что показаны в таблице 4).

Модель, использованная на бумаге, была логнормальной как вероятность и приоритет для mu и sigma на Normal и Inverse Gamma, соответственно. Так как синтаксис BUGS использует tau = 1 / (дисперсию) в качестве параметра для Normal и Lognormal, я использовалгамма-распределение по тау (это имело смысл для меня).

model_pmi <-  function() {  
   for (i in 1:9) {
cpi_log[i] ~ dlnorm(mu_cpi, tau_cpi)
spi_log[i] ~ dlnorm(mu_spi, tau_spi)
}

tau_cpi ~ dgamma(75, 1)
mu_cpi ~ dnorm(0.734765, 558.126)
cpi_pred ~ dlnorm(mu_cpi, tau_cpi)
tau_spi ~ dgamma(75, 1.5)
mu_spi ~ dnorm(0.67784, 8265.285)
spi_pred ~ dlnorm(mu_spi, tau_spi)

}

model.file <- file.path(tempdir(), "model_pmi.txt")  
write.model(model_pmi, model.file)

cpis <- c(0.486, 1.167, 0.856, 0.770, 1.552, 1.534, 1.268, 2.369, 2.921)
spis <- c(0.456, 1.350, 0.949, 0.922, 0.693, 0.109, 0.506, 0.588, 0.525)
cpi_log <- log(1+cpis)
spi_log <- log(1+spis)

data <- list("cpi_log", "spi_log")

params <- c("tau_cpi","mu_cpi","tau_spi", "mu_spi", "cpi_pred", "spi_pred")
inits <- function() { list(tau_cpi = 1, tau_spi = 1, mu_cpi = 1, mu_spi = 1, cpi_pred = 1, spi_pred = 1) }

out_test <- jags(data, inits, params, model.file, n.iter=10000)

out_test

95% ДИ (2,5%; 97,5%), найденные на бумаге, составляют (1,05; 2,35) для ИПЦ и (0,55; 1,525).) Модель представила результаты, показанные ниже. Для ИПЦ результаты довольно близки, но когда я увидел результаты для ИПЦ, я подумал, что это просто случайность.

Inference for Bugs model at 
"C:\Users\felip\AppData\Local\Temp\RtmpSWZ70g/model_pmi.txt", fit using jags,
 3 chains, each with 10000 iterations (first 5000 discarded), n.thin = 5
 n.sims = 3000 iterations saved
         mu.vect sd.vect    2.5%     25%     50%     75%   97.5%  Rhat n.eff
cpi_pred   1.691   0.399   1.043   1.406   1.639   1.918   2.610 1.001  2200
mu_cpi     0.500   0.043   0.416   0.471   0.500   0.529   0.585 1.001  3000
mu_spi     0.668   0.011   0.647   0.660   0.668   0.675   0.690 1.001  3000
spi_pred   2.122   0.893   0.892   1.499   1.942   2.567   4.340 1.001  3000
tau_cpi   20.023   2.654  15.202  18.209  19.911  21.726  25.496 1.001  3000
tau_spi    6.132   0.675   4.889   5.657   6.107   6.568   7.541 1.001  3000
deviance 230.411  19.207 194.463 217.506 230.091 243.074 269.147 1.001  3000

For each parameter, n.eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor (at convergence, Rhat=1).

DIC info (using the rule, pD = var(deviance)/2)
pD = 184.5 and DIC = 414.9
DIC is an estimate of expected predictive error (lower deviance is better).

Работал над этим длядни, не могу найти то, что отсутствует или что не так.

1 Ответ

0 голосов
/ 30 декабря 2018

При использовании y ~ dlnorm(mu,tau) значение y является исходным значением шкалы, а не значением логарифмической шкалы.Но mu и tau находятся в логарифмическом масштабе (что сбивает с толку).

Кроме того, размещение априоров непосредственно на mu и tau может привести к плохой автокорреляции в цепях.Перепараметризация помогает.Подробности см. В этом сообщении в блоге (которое я написал): http://doingbayesiandataanalysis.blogspot.com/2016/04/bayesian-estimation-of-log-normal.html

Наконец, среднее значение, мода и SD в исходном масштабе представляют собой довольно сложные преобразования mu и tau в логарифмическом масштабе.Снова, см. Сообщение в блоге, связанное выше.

...