使用R来计算 - 使用car或lme之间的-injj内部ANOVA交互对比

时间:2015-07-26 06:17:30

标签: r anova nlme

心理学学生在这里。作为我论文的一部分,我从一个实验中得到了一些数据,其中包括两个主体间IV,classificationcondition,以及一个主体内IV,trial_type。数据格式如下:

test = data.frame(
  ID=rep(c(1,2,3,4,5,6), each=3), 
  condition=rep(c('comp', 'seq', 'comp_text'), each=3, times=2),
  classification=rep(c('rule', 'exemplar'), each=3, length.out=18),
  trial_type=rep(c('ambig', 'unambig', 'trained'), length.out=18),
  value = c(0.25, 0.75, 1.00, 1.00, 1.00, 1.00, 0.00, 1.00, 0.75, 1.00, 1.00, 1.00, 0.25, 0.75, 0.75, 0.25, 0.75, 0.50))

我已经使用nlme将这些分析为anova,并生成3型SS,因为这是我的课程所需要的

model <- lme(value~condition*classification*trial_type, 
   random=~1|ID, 
   correlation = corCompSymm(form = ~1|ID)
)
anova(model, type='marginal')

我想研究一下我的数据中存在的交互。具体来说,我想看看&#39;训练的&#39; “seq”中的试验更高。条件比其他两个。在过去,我使用过对比()来对比&#39;用于生成对比矩阵的包,然后我将从multcomp包发送到glht()。在这种情况下,我尝试过:

cntr1 <- contrast(model, 
   a=list(condition=c('seq'), classification=c('rule','exemplar'), trial_type=c('trained')), 
   b=list(condition=c('comp','comp_text'), classification=c('rule', 'exemplar'), trial_type=c('trained'))
)

然而,这会返回

Error in testStatistic(fit, X, modelCoef, covMat, conf.int = conf.int) : 
Non-positive definite approximate variance-covariance

这似乎与方差 - 协方差矩阵有关,但我并不完全确定问题是什么。

我的问题是,有没有办法解决这个问题?如果没有,是否有办法在另一个包中运行类似的对比,例如,&#39; car&#39;?我可以通过转换数据从汽车包中使用Anova生成相同的综合F测试,以便每个试用类型都有自己的列,但我不确定如何使用Anova()测试此类交互。

1 个答案:

答案 0 :(得分:0)

这对你有帮助吗(如果我在某处误解了你,请告诉我):

  1. 您提供的test中的组合太少,无法执行混合ANOVA。所有可能组合中只有一个实例。为了便于说明,我对此进行了调整:

    test = data.frame( ID=rep(c(1:12), each=3), condition=rep(c('comp', 'seq', 'comp_text'), each=6, times=2), classification=rep(c('rule', 'exemplar'), each=6, length.out=18), trial_type=rep(c('ambig', 'unambig', 'trained'), length.out=18), value = round(rnorm(36),2))

  2. 我会使用ezANOVA来提供您想要的所有互动:

  3. 首先重新安排更适合ezANOVA的数据:

    ambig <- test[test$trial_type == "ambig", 'value']
    unambig <- test[test$trial_type == "unambig", 'value']
    trained <- test[test$trial_type == "trained", 'value']
    df1 <- data.frame(ambig, unambig, trained)
    df1 <- stack(df1)
    subj <-  as.numeric(rep(unique(test$ID), 3))
    condition <- rep(unique(test$condition), 3)
    classification <- rep(unique(test$classification), 3)
    df1[3] <-  subj
    df1[4] <-  condition
    df1[5] <- classification
    colnames(df1) <- c("value", "trial_type", "id", "condition", "classification")
    

    然后在value上以2(分类;主体间)混合ANOVA执行3(试验类型;受试者内)2(条件;受试者之间)。

    library(ez)
    mixed_aov <- ezANOVA(
      data = df1
      , dv = value
      , wid = id
      , within = trial_type
      , within_covariates = NULL
      , between = .(classification, condition)
      , observed = NULL
      , diff = NULL
      , reverse_diff = FALSE
      , type = 3
      , white.adjust = FALSE
      , detailed = F
      , return_aov = T
    )
    

    有关ezANOVA()参数的详细信息,请参阅文档here

    输出为您提供所有互动。

    对于对比,您将使用后续t检验。

    P.S。另请注意lme规范(trial_type)中的拼写错误。