R 如何使用mvJointModelBayes()修复不兼容的矩阵维度?
我正试图使用JMbayes软件包拟合纵向和事件时间数据的联合模型,以预测随着时间推移越来越多的症状数据可用,心脏骤停的风险。首先,我正在拟合一个单变量模型,但我的目标是在代码运行后合并一些纵向结果,这就是我使用mvJointModelBayes()函数的原因 然而,当我运行这个函数时,我遇到了下面的错误 {中的错误: 任务1失败-“添加:不兼容的矩阵维度:500x1和3000x1” 我使用的代码与mvJMBayes vignette中使用pbc2数据提供的代码相同,适用于我的数据集,但不断遇到错误。我找不到任何明显的方式,使我的数据帧与pbc2数据集不同,从而导致错误R 如何使用mvJointModelBayes()修复不兼容的矩阵维度?,r,R,我正试图使用JMbayes软件包拟合纵向和事件时间数据的联合模型,以预测随着时间推移越来越多的症状数据可用,心脏骤停的风险。首先,我正在拟合一个单变量模型,但我的目标是在代码运行后合并一些纵向结果,这就是我使用mvJointModelBayes()函数的原因 然而,当我运行这个函数时,我遇到了下面的错误 {中的错误: 任务1失败-“添加:不兼容的矩阵维度:500x1和3000x1” 我使用的代码与mvJMBayes vignette中使用pbc2数据提供的代码相同,适用于我的数据集,但不断遇到错
library(tidyverse)
library(JMbayes)
library(lattice)
library(MASS)
# SIMULATE DATA AND SHAPE FOR MODELLING -------------------
id <- 1:500
gender <- sample(c('Male','Female'), 500, replace = TRUE, prob = c(0.51, 0.49))
status <- sample(c(0,1), 500, replace = TRUE, prob = c(0.9, 0.1))
survival_days <- rnorm(500)
angina1 <- sample(c(0,1), 500, replace = TRUE, prob = c(0.9, 0.1))
angina2 <- sample(c(0,1), 500, replace = TRUE, prob = c(0.8, 0.2))
angina3 <- sample(c(0,1), 500, replace = TRUE, prob = c(0.7, 0.3))
# Wide format for survival modelling. Single row per patient.
data_wide <- as.data.frame(
cbind(id, gender, status, survival_days, angina1, angina2, angina3))
# Recode factor levels
data_wide$survival_days<- as.numeric(data_wide$survival_days)
data_wide$status <- as.numeric(data_wide$status)
# Long format for longitudinal modelling.
data_long <- data_wide %>% gather(angina1:angina3, key = "timepoint", value = "angina")
data_long$timepoint <- str_replace(data_long$timepoint,"angina","")
data_long <- data_long %>% mutate(angina = as.factor(angina), timepoint = as.numeric(timepoint))
# MODELLING ---------------------------------------------------
set.seed(123)
mixed_model_fit <- mvglmer(list(angina ~ timepoint + (timepoint | id)), data = data_long, families = list(binomial))
cox_fit <- coxph(Surv(survival_days, status) ~ gender, data = data_wide, model = TRUE)
JMFit <- mvJointModelBayes(mixed_model_fit, cox_fit, timeVar = "timepoint")
库(tidyverse)
图书馆(JMbayes)
图书馆(格子)
图书馆(弥撒)
#为建模模拟数据和形状-------------------
id我发现,如果id
是一个数值变量而不是一个因子,并且id
在两个数据集中以相同的顺序出现,那么它是有效的。在模型拟合之前运行以下代码可以解决问题:
data_long <- data_long %>%
mutate(id = as.numeric(id)) %>%
arrange(id)
data_wide <- data_wide %>%
mutate(id = as.numeric(id)) %>%
arrange(id)
数据长度%
变异(id=as.numeric(id))%>%
安排(id)
数据范围%
变异(id=as.numeric(id))%>%
安排(id)
我发现,如果id
是一个数值变量而不是一个因子,并且id
在两个数据集中以相同的顺序出现,则该方法有效。在模型拟合之前运行以下代码可以解决此问题:
data_long <- data_long %>%
mutate(id = as.numeric(id)) %>%
arrange(id)
data_wide <- data_wide %>%
mutate(id = as.numeric(id)) %>%
arrange(id)
数据长度%
变异(id=as.numeric(id))%>%
安排(id)
数据范围%
变异(id=as.numeric(id))%>%
安排(id)
我很确定您需要添加更多的库调用以使其可复制。不过,这听起来是一个很好的问题。我不知道仅仅添加library(maggitr)
就足够了,还是您需要同时加载dplyr
还是需要整个tidyverse
套件。(我可以观察到安装JMbayes
需要很长时间,如果尚未安装,则需要额外的系统级软件包。)现在我已经尝试过两次,一次是在Rstudio会话中,一次是在终端会话中,两次我都只是看到会话挂起。这在另一个Linux用户的体验中被指责为一个问题:但软件包维护人员无法复制。我没有看到使用htop进程监视器识别为R的正在进行的活动。我第二次首先加载tidyverse,然后加载上面列出的包,行为没有任何差异。看起来我引用的问题已经解决。有一条打开的消息,其中包含与pbc2数据集的矩阵错误相关的不同错误:Thank@42-,我缺少库(tidyverse)调用。我非常确定您需要添加更多的库调用以使其可复制。不过,这听起来是一个很好的问题。我不知道仅仅添加library(maggitr)
是否就足够了,或者您是否还需要加载dplyr
或者它需要整个tidyverse
套件。(我可以观察到安装JMbayes
需要很长时间,如果尚未安装,则需要额外的系统级软件包。)现在我已经尝试过两次,一次是在Rstudio会话中,一次是在终端会话中,两次我都只是看到会话挂起。这在另一个Linux用户的体验中被指责为一个问题:但软件包维护人员无法复制。我没有看到使用htop进程监视器识别为R的正在进行的活动。我第二次首先加载tidyverse,然后加载上面列出的包,行为没有任何差异。看起来我引用的问题已经解决。有一条打开的消息与pbc2数据集的矩阵错误相关:Thank@42-,我错过了库(tidyverse)调用。