心理学学生在这里。作为我论文的一部分,我从一个实验中得到了一些数据,其中包括两个主体间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将这些分析为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()
测试此类交互。
答案 0 :(得分:0)
这对你有帮助吗(如果我在某处误解了你,请告诉我):
您提供的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))
我会使用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")
然后在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)中的拼写错误。