Возникли проблемы с байесовской моделью вывода - JAGS с R

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

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

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). Модель представила результаты, показанные ниже. Для CPI результаты довольно близки, но когда я увидел результаты для SPI, я решил, что это всего лишь случайность.

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).

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


person Felipe Moreira    schedule 30.12.2018    source источник


Ответы (1)


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

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

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

person John K. Kruschke    schedule 30.12.2018
comment
Прежде всего, я читаю вашу книгу, отличная работа. Во-вторых, я изменил код так, чтобы параметры были получены с помощью logY, и использовал данные только как Y и получил хорошие результаты для предсказания SPI, но плохие результаты для CPI. Это чертовски странно. - person Felipe Moreira; 31.12.2018
comment
Вы связались с авторами анализа, который пытаетесь воспроизвести? Это может быть вашим лучшим выбором. - person John K. Kruschke; 31.12.2018
comment
Звучит как план. Значит, моделирование имеет смысл? - person Felipe Moreira; 02.01.2019