Определение новой модели в crmPack и подача ей новых данных с помощью функции «update» - PullRequest
0 голосов
/ 09 июня 2019

Я следовал коду, приведенному в виньетке crmPack (стр. 16-17), чтобы определить модель мощности с одним параметром. Мне нужно было бы передать некоторые данные о токсичности с помощью функции обновления, но я получаю сообщение об ошибке: «нет слота имени,« вызов »». Вот код ниже. Я был бы очень благодарен за любые комментарии или идеи, чтобы "исправить" это. Большое спасибо.

# package and options
library(crmPack)

options <- McmcOptions(burnin = 1000, step = 2, samples = 5000)

set.seed(1)

# extra functions to define the power model

.OneParExp <- setClass(Class = "OneParExp", contains = "Model",
 representation(skeletonFun = "function",
 skeletonProbs = "numeric",
 lambda = "numeric"))


OneParExp <- function(skeletonProbs, doseGrid, lambda)
 {
 skeletonFun <- approxfun(x = doseGrid, y = skeletonProbs, rule = 2)
 invSkeletonFun <- approxfun(x = skeletonProbs, y = doseGrid, rule = 1)

 .OneParExp(
 skeletonFun = skeletonFun, skeletonProbs = skeletonProbs,
 lambda = lambda,
 datamodel = function(){
 for (i in 1:nObs)
 {
 y[i] ~ dbern(p[i])
 p[i] <- skeletonProbs[xLevel[i]]^theta
 }},
 datanames = c("nObs", "y", "xLevel"),
 prob = function(dose, theta){ skeletonFun(dose)^theta },
 dose = function(prob, theta){ invSkeletonFun(prob^(1 / theta)) },
 priormodel = function(){ theta ~ dexp(lambda) },
 modelspecs = function(){ list(skeletonProbs = skeletonProbs,
 lambda = lambda) },
 init = function(){ list(theta = 1) }, sample = "theta")
 }


# tox data and model fitting

data <- Data(x = c(1.2,1.2,1.8,2.4,3),
                 y = c(0, 0, 0, 1, 1),
                 cohort = c(1, 1, 2, 3, 4),
                 doseGrid = seq(1.2, 3, 0.6),
                 ID = 1:5,
                 placebo = FALSE)

(skeletonProbs <- round(data@doseGrid / max(data@doseGrid) / 4, 2))

newModel <- OneParExp(skeletonProbs = skeletonProbs,
 doseGrid = data@doseGrid, lambda = 1)

newDLTmodel <- update(object=newModel, data=data)

1 Ответ

0 голосов
/ 11 июня 2019

Вы не используете здесь функцию «обновления» для подачи данных в модель. (Методы «update» - это прежде всего внутренние методы для обновления объектов «Data» в crmPack.) Вместо этого вы используете «mcmc» для оценки параметров, заданных моделью и данными:

    estimates <- mcmc(model=newModel, data=data, options=McmcOptions())
    plot(estimates, newModel, data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...