我有一个数据集,它由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
1条答案
按热度按时间km0tfn4u1#
flexmix
是一个回归软件包,gbmt是用于轨迹分析的,我不关心这两个软件包的特殊性,但通常你可以使用最常见的软件包进行分析。**编辑:**我在这里看到了几个问题。1)你首先用原始的“data”拟合模型,但是然后你用基线和平均值“Y”修改了数据(为什么你需要这样做?)。这显然使得现有的模型不再可以预测数据。2)为了绘制用原始数据拟合的模型,尝试下面的代码(删除了“stat_smooth”,因为它根本不相关(它是另一个基本模型)。
字符串
尽管如此,您应该首先标准化您的轨迹,这意味着时间t之间的一致间隔(定义一个,例如,1 s)。您可以使用
dplyr
包中的complete()
标准化时间t,并使用zoo
包中的na.approx()
为每个组插入坐标Y- 'ID'。型
可选地,您可以通过延长较短的最后一个坐标到最长的一个对齐所有的踪迹.然后,您可以总结性计算常见的指标,像总长度,持续时间,速度等.
您的情况似乎不需要有限混合模型,您可以使用
lme4
包中的glmer()
或glm()
进行多项式回归,这是一个更受欢迎的软件包,具有丰富的支持。