R语言中基于组的轨迹建模

a1o7rhls  于 11个月前  发布在  R语言
关注(0)|答案(1)|浏览(241)

我有一个数据集,它由3个变量组成,一个是ID,一个是变量Y,还有一个是时间变量t。
它是长格式,每个受试者有几行登记,顺序变量为Y(1-5)和登记时间,第一次登记为0,其余为自第一次登记以来的月数,每个受试者的时间点不同。
我想根据Y在t上的相似轨迹对实验对象进行分组.
我试过gbmt包,但结果似乎毫无意义。我现在正在尝试flexmix包,但我不知道如何绘制轨迹。
我是相当新的统计,R和编程,所以任何帮助都是欢迎的。我是开放的其他软件包,如果flexmix是不适合这一点。
这是一个具有相同结构的小数据样本:https://wetransfer.com/downloads/6528f6249eaf6cc2e488193c58aed84b20231208151530/e90fa7
这是小型数据集的程式码。

library(dplyr)
library(flexmix)
library(ggplot2)

#fit model
fit <- flexmix(Y ~ t+I(t^2) | ID, data = data, k = 3)
summary(fit)
clusters(fit)

#add groups in dataset
data$group <- clusters(fit)

#add the change of Y
data <- data %>%
  group_by(ID) %>%
  mutate(change_Y = Y - first(Y))

# Calculate mean change in Y for each group at each time point
mean_change_data <- data %>%
  group_by(group, t) %>%
  summarise(mean_change_Y = mean(change_Y, na.rm = TRUE))

# Plot the mean change in Y for each group over t

 ggplot(mean_change_data, aes(x = t, y = mean_change_Y, group = group, color = as.factor(group))) +
  stat_smooth(method = "loess", se = TRUE, alpha = 0.2) + 
  labs(title = "Mean Change in Y Over Time",
       x = "t",
       y = "Mean Change in Y") +
  scale_color_discrete(name = "Group")

字符串
这是生成的图:x1c 0d1x

km0tfn4u

km0tfn4u1#

flexmix是一个回归软件包,gbmt是用于轨迹分析的,我不关心这两个软件包的特殊性,但通常你可以使用最常见的软件包进行分析。

**编辑:**我在这里看到了几个问题。1)你首先用原始的“data”拟合模型,但是然后你用基线和平均值“Y”修改了数据(为什么你需要这样做?)。这显然使得现有的模型不再可以预测数据。2)为了绘制用原始数据拟合的模型,尝试下面的代码(删除了“stat_smooth”,因为它根本不相关(它是另一个基本模型)。

ggplot(data, aes(x=t,y=Y))+
geom_point()+   
geom_point(aes(col = as.factor(model@cluster))) +   
geom_abline(data = as.data.frame(t(parameters(model))), aes(intercept = `coef.(Intercept)`, slope = `coef.Time`, col = as.factor(seq_along(sigma)))   )

字符串
尽管如此,您应该首先标准化您的轨迹,这意味着时间t之间的一致间隔(定义一个,例如,1 s)。您可以使用dplyr包中的complete()标准化时间t,并使用zoo包中的na.approx()为每个组插入坐标Y- 'ID'。

data %<>% group_by(ID)%>%
  dplyr::complete(t = seq(min(t), max(t), by = 1)) %>%
  mutate(Y = zoo::na.approx(Y))


可选地,您可以通过延长较短的最后一个坐标到最长的一个对齐所有的踪迹.然后,您可以总结性计算常见的指标,像总长度,持续时间,速度等.
您的情况似乎不需要有限混合模型,您可以使用lme4包中的glmer()glm()进行多项式回归,这是一个更受欢迎的软件包,具有丰富的支持。

相关问题