Recently, I want to construct the Cox model involved in latent variables (combining structural equation model framework), but I get into trouble about running the fitting process. Here, my code is below:
#simulation data
library(MASS)
library(dplyr)
library(brms)
beta.t <- c(1,1,1)
phi.u1 <- c(1,rep(0.8,4))
x <- mvrnorm(n = 250, mu = rep(0, 3), Sigma = diag(3)) %>% as.data.frame()
eta1 <- rnorm(n=250,mean = 0.5,sd = 1)#
time <- as.matrix(x) %*% beta.t + eta1 * 0.5
u1<-mvrnorm(n=250, mu = mean(eta1)*phi.u1, Sigma = diag(c(0.5,0.5,0.5,0.5,0.5))) %>% as.data.frame()
Te <- exp(time)
C <- rgamma(250, shape = 1, rate = 1)
time <- pmin(Te, C)
status = time == Te
ct <- as.matrix(cbind(time = time, status = status)) %>% as.data.frame()
###fitting
colnames(u1)<-paste0('u1.v',1:ncol(u1))
colnames(ct)<-c("time",'status')
ct$status<-ifelse(ct$status==0,1,0)#1 represent right censor
ct<-cbind(ct,x,u1)
ct$eta<-as.numeric(NA)
###modelling for cox
model1<-bf(time|cens(status)~V1+V2+V3+mi(eta))+
bf(u1.v1~mi(eta))+bf(u1.v2~mi(eta))+bf(u1.v3~mi(eta))+
bf(u1.v4~mi(eta))+bf(u1.v5~mi(eta))+bf(eta|mi()~0)+set_rescor(rescor = FALSE)
prior1<-c(prior(normal(0,10),coef='mieta',resp='time'),
prior(normal(0,10),coef='V1',resp='time'),
prior(normal(0,10),coef='V2',resp='time'),
prior(normal(0,10),coef='V3',resp='time'),
prior(normal(1,0.001),coef='mieta',resp='u1v1'),
prior(normal(0,10),coef='mieta',resp='u1v2'),
prior(normal(0,10),coef='mieta',resp='u1v3'),
prior(normal(0,10),coef='mieta',resp='u1v4'),
prior(normal(0,10),coef='mieta',resp='u1v5')
)
family1<-as.list(c('cox',rep('gaussian',6)))
fit_1<-brm(formula = model1,prior = prior1,family = family1,
chains = 3,data = ct, iter = 4000,seed = 1234)
However, it encounters an Error:
Error in new_CppObject_xp(fields$.module, fields$.pointer, ...) :
Exception: variable does not exist; processing stage=data initialization; variable name=Kbhaz_time; base type=int (in 'string', line 50, column 2 to column 17)
failed to create the sampler; sampling not done
It seems to note that some variables not exist. But I could not figure out it.