Использование R для расчета контрастов взаимодействия ANOVA между субъектами с использованием автомобиля или lme

Студентка психологии здесь. В рамках моей диссертации у меня есть некоторые данные эксперимента с двумя межсубъектными IV, classification и condition, и внутрисубъектным 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, и сгенерировал SS типа 3, так как это то, что требует мой курс.

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

Я хотел бы исследовать взаимодействие, присутствующее в моих данных. В частности, я хочу посмотреть, выше ли значения для «обученных» испытаний в условии «seq», чем в двух других. В прошлом я использовал convert() из пакета 'contrast' для создания контрастной матрицы, которую затем отправлял в glht() из пакета multcomp. В этом случае я пробовал:

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

Кажется, это как-то связано с матрицей дисперсии-ковариации, но я не совсем уверен, в чем проблема.

Мой вопрос, есть ли способ решить эту проблему? Если нет, есть ли способ запустить аналогичный контраст в другом пакете, например, «автомобиль»? Я могу сгенерировать тот же омнибусный F-тест, используя Anova из пакета car, преобразовав данные так, чтобы каждый тип испытания имел свой собственный столбец, но я не уверен, как протестировать такое взаимодействие с помощью Anova().


person user3106040    schedule 26.07.2015    source источник
comment
Возможно, вы захотите взглянуть на пакет ezAnova. Это может помочь вам.   -  person ben_aaron    schedule 26.07.2015


Ответы (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-тесты.

P.S. Также следите за своей опечаткой в ​​спецификации lme (trial_type).

person ben_aaron    schedule 26.07.2015
comment
Исправил опечатку, ура. Я, возможно, был неясен. Меня в первую очередь интересуют контрасты. Результаты ezANOVA() и anova(model, type='marginal) идентичны. Я хочу знать, есть ли способ проверить контрасты, включающие IV между субъектами и внутри них, который не прибегает к использованию пакета nlme, потому что (по какой-то причине) данные, с которыми я работаю, дают ошибку в дисперсии -ковариационная матрица. Тем не менее спасибо за подробный ответ! - person ; 27.07.2015