0

心理学学生来了。作为我论文的一部分,我从一个实验中获得了一些数据,该实验有两个主体间 IVclassificationcondition,以及一个主体内 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 将这些分析为方差分析,并生成 3 型 SS,因为这是我的课程所需要的

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

我想调查我的数据中存在的交互。具体来说,我想看看在“seq”条件下“训练”试验的值是否高于其他两个。过去,我使用“对比度”包中的 contrast() 来生成对比度矩阵,然后将其从 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

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

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

4

1 回答 1

1

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

  1. 您提供的组合太少,test无法执行混合方差分析。所有可能的组合中的每一种都只有一个实例。出于说明目的,我对此进行了调整:

    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它,它提供了你想要的所有交互:

首先重新排列数据更适合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")

然后执行您的 3(Trial_type;学科内)乘 2(条件;学科间)乘 2(分类;学科间)混合方差分析value

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()的文档。

输出为您提供所有交互。

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

PS 还要注意lme规范 (trial_type) 中的拼写错误。

于 2015-07-26T14:44:04.583 回答