重复测量,R中的混合模型ANCOVA

时间:2018-11-29 19:54:40

标签: r

我有一个数据集,该数据集包含44个主题,每个主题具有2、3或4个测量值(即,并非每个主题都具有相同数量的测量值)。我有两个类别变量,各科目之间存在很大差异,但有时在科目之间却存在很大差异。受试者年龄也作为测量的协变量包含在数据集中,因为它在单个受试者的测量之间会有所不同。

感兴趣的问题:自变量如何影响我们的因变量?年龄还会影响我们的因变量吗?这在某种程度上是双重的,因为受试者的年龄不同,受试者之间的年龄也不同。

编码/建模此类数据的最佳方法是什么?我尝试了以下方法,但这似乎没有返回适当的结果。

aov(DV ~ Age + IV1 + IV2 + Error(1/SubjectID), data = df) 

这是一些示例数据。

df <-data.frame(Subject = c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20), IV1 = c(1,3,2,2,1,3,2,3,1,4,1,3,1,3,2,2,1,2,1,3,2,4,4,2,2,3,4,1,2,4,4,1,3,3,5,1,3,3,4,1,3,3,5,1,3,3,4,2,2,4,4,1,2,4,4,2,3,4), IV2 = c(2,2,3,3,2,2,3,3,2,2,1,1,3,3,1,1,1,1,2,2,1,1,1,2,2,2,2,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1),Age = c(10,12,11,12,9,10,10,12,10,13,9,10,9,10,10,11,10,11,9,10,11,13,14,10,11,12,13,10,11,12,13,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,10,11,12,13,10,11,12,13,12,13,14),DV = c(209,173,181,113,178,166,368,68,133,24,232,182,77,59,263,235,68,44,254,263,270,203,75,99,200,118,142,174,528,340,325,145,97,57,134,97,203,141,72,294,217,159,115,131,82,206,65,637,471,139,195,114,273,392,271,239,141,228))

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

我可能是错的,但是我认为这更多是一个交叉验证的问题,而不是主要涉及编码的stackoverflow。

关于该问题-如果您上传了一些示例数据,这将非常有帮助,以便人们可以尝试看看它的外观。猜测一下,如果不查看示例数据,可能就不需要ANCOVA。 ANCOVA / ANOVA对不平衡的设计(即不相等的采样设计)非常敏感。当您说每个人有多次重复测量,两次,三次或四次测量时,您的意思是说某些主题比其他主题具有更多的度量?不同的年龄代表重复的措施吗?

如果是这样,您可以尝试以下方法:

library(lme4)
dv.lmer <- lmer(DV ~ IV1 + IV2 + (1|SubjectID/Age), data = df) 
summary(dv.lmer)

什么是DV响应变量?

此外,您是否排除了任何类型的交互作用(即它们是否超出了项目范围)?

编辑:

考虑到样本数量的差异和重新测量之间的不平等差距,ANCOVA绝对不适用于这些数据。实际上,这使得很难以任何标准方法(至少以这种格式)进行建模。

您可以创建一个新的Age变量,将Age简化到其测量值(即第一,第二或第三)。从那里,您可以尝试类似混合效果模型的操作。赶上来就是您在重新测量信息之间失去了任何年龄或时间。

另一种选择是采用时间点之间的差,即对于主题13,取所有变量的差。但是,这会将您的数据减少到仅前两个时间点,否则您将返回到重复测量区域。...

这取决于您感兴趣的问题。

如果您将数据放到可以轻松导入到R的格式中,我可能会提供更多帮助(例如df <-data.frame(DV = c(),IV1 = c()等)。 ))。此链接(ivec)是一个不错的起点!

编辑2: 这是解决该问题的一种方法,尽管由于研究的观察性以及这些数据中隐含的混杂因素,所以可以做出的推论是有限的。对于人类研究(以及我经常处理的生态数据),这是一个非常普遍的问题。这并不是说您不能绘制相关性和模式,而是要小心呈现这些结果。以下是一种可能性,但实际上确实会回到您要询问有关模型是否正确的数据的问题...

请随时询问是否不清楚!

 #Corrections
 df$Subject <- as.character(df$Subject)

 #Creating new sample time points
 df$SampleTime <- 0 

 uniSubject <- unique(df$Subject)

 #filling vector
 for(i in 1:length(uniSubject)){

   df[df$Subject == uniSubject[i],]$SampleTime <- 1:nrow(df[df$Subject == 
 uniSubject[i],])

 }


 #Modelling
 library(lme4)


 #Interaction model
 DVint.lmer <- lmer(DV ~ IV1 * IV2 + (1 + SampleTime|Subject), data = df)
 summary(DVint.lmer)

 #Additive model
 DVadd.lmer <- lmer(DV ~ IV1 + IV2 + (1 + SampleTime|Subject), data = df)
 summary(DVadd.lmer)

 #Comparing models to see if interaction is importnat
 anova(DVint.lmer, DVadd.lmer) #Interaction does not explain any 
 significant variation at the 0.05 level in these data. Parsimony 
 suggests using DVadd.lmer model

编辑:

鉴于关于年龄对固定效应的重要性的最新评论,我认为这将最接近商标:

 DVint.lmer <- lmer(DV ~ IV1 * IV2 * Age + (1 + Age|Subject), data = df)

解释时要小心,因为这些都是非常混乱的数据。