1

JM 是一个软件包,用于拟合具有联合纵向和生存数据的模型。我可以让它与他们的示例数据一起运行,但我自己的数据出现错误。知道 JMfit1 或 JMfit2 的问题是什么吗?

我的数据: https ://1drv.ms/u/s!AkG9wyz5G1c1gR4Vs_xohO--4Rb5

install.packages('JM')
require(JM)
?jointModel

# Example from vignette
# linear mixed model fit (random intercepts + random slopes)
fitLME <- lme(log(serBilir) ~ drug * year, random = ~ year | id, data = pbc2)
summary(fitLME)
# survival regression fit
fitSURV <- survreg(Surv(years, status2) ~ drug, data = pbc2.id, x = TRUE)
summary(fitSURV)
# joint model fit, under the (default) Weibull model
fitJOINT <- jointModel(fitLME, fitSURV, timeVar = "year")
fitJOINT
summary(fitJOINT)
# we can also include an interaction term of log(serBilir) with drug
fitJOINT <- jointModel(fitLME, fitSURV, timeVar = "year",
                       # interFact = list(value = ~ drug, data = pbc2.id))
fitJOINT
summary(fitJOINT)


# With my data:
data = readRDS('data.list.d1.dk.RDS')
d1 = data$d1
dk = data$dk
dim(d1); names(d1)
dim(dk); names(dk)

slct.cov = c('ID','Yi','Ai','zi.1','zi.2','zi.3','xi_A','di')

fmla.fix = as.formula('Yi ~ Ai*(zi.1+zi.2+zi.3)')
fmla.rnd = as.formula(' ~ Ai|ID')

fit.Yi = lme(fixed= fmla.fix, random=reStruct(fmla.rnd),
              method="ML", data = dk[,slct.cov] )

surv.model = survreg(Surv(xi_A, di) ~ zi.1+zi.2+zi.3, data = d1[,slct.cov], x = TRUE)

JMfit1 = jointModel(lmeObject = fit.Yi, survObject = surv.model, timeVar = 'Ai') 
# Error in if (t1 || t2) { : missing value where TRUE/FALSE needed


dForm <- list(fixed = ~ 1 + zi.1 + zi.2 + zi.3, indFixed = c(2,6,7,8), random = ~ 1, indRandom = 2)

JMfit2 = jointModel(lmeObject = fit.Yi, survObject = surv.model, timeVar = 'Ai',
                   derivForm = dForm, parameterization = c("both")) #"both", "value", "slope"
                   # method = "weibull-PH-aGH",
                   # "weibull-PH-aGH", "weibull-PH-GH", "weibull-AFT-aGH","weibull-AFT-GH", 
                   # "piecewise-PH-aGH", "piecewise-PH-GH", "Cox-PH-aGH", "Cox-PH-GH", 
                   # "spline-PH-aGH", "spline-PH-GH", # "ch-Laplace"
                   # interFact = NULL, lag = 0, scaleWB = NULL,
                   # CompRisk = FALSE, init = NULL, control = list())
4

1 回答 1

0

在我看来,您的fmla.fix模型本身可能需要更多的调查。

简化交互,Yi ~ Ai+zi.1+zi.3 + Ai*(zi.2)甚至Yi ~ Ai+zi.1+zi.2+zi.3似乎给出了有效的JMfit1输出。

我怀疑你会得到一个不同的错误JMfit2(你呢??),所以这可能是一个后续的 SO 问题。

于 2017-07-06T17:18:53.590 回答