R 重复测量/受试者内方差分析

R 重复测量/受试者内方差分析,r,anova,R,Anova,我尝试使用R进行重复测量方差分析。我在各种网站上浏览了各种示例,但它们似乎从未提及我遇到的错误。我想我误解了一些重要的事情 我试图进行的方差分析是基于一项使用人类参与者的实验的一些数据。它有一个DV和三个IV。所有IVs的所有水平均在所有参与者身上运行,使其成为三向重复测量/受试者内方差分析 我在R中运行的代码如下: aov.output = aov(DV~ IV1 * IV2 * IV3 + Error(PARTICIPANT_ID / (IV1 * IV2 * IV3)),

我尝试使用R进行重复测量方差分析。我在各种网站上浏览了各种示例,但它们似乎从未提及我遇到的错误。我想我误解了一些重要的事情

我试图进行的方差分析是基于一项使用人类参与者的实验的一些数据。它有一个DV和三个IV。所有IVs的所有水平均在所有参与者身上运行,使其成为三向重复测量/受试者内方差分析

我在R中运行的代码如下:

aov.output = aov(DV~ IV1 * IV2 * IV3 + Error(PARTICIPANT_ID / (IV1 * IV2 * IV3)),
                 data=fulldata)
运行此操作时,我收到以下警告:

Error() model is singular

知道我可能做错了什么吗?

尝试在lme4包中使用lmer函数。aov函数在这里可能不合适。例如,查找Dougles Bates的参考资料(其他章节也很好,但这是重复测量章节,这是介绍:)。R代码位于同一位置,对于纵向数据,目前普遍认为只拟合OLS而不是像lme4软件包或nlme中那样的方差模型组件是错误的,在我看来,lme4最近在流行程度上已经大大超过了nlme。你可能会注意到Brian Ripley在上面评论部分的参考帖子只是建议也转向lme

顺便说一句,跳转的一个巨大优势是,您将能够通过典型语法对grand mean进行调整,从而获得每个效果级别的估计值:

lmer(DV ~ 1  +IV1*IV2*IV3 +(IV1*IV2*IV3|Subject), dataset))

请注意,您的随机效果将是向量值

我知道这个帖子的答案已经被选中了。我仍然想指出,在将
aov
lmer
模型拟合到多路重复测量数据时,如何指定正确的误差项/随机效应。我假设两个自变量(IVs)都是固定的,并且相互交叉,也与受试者交叉,这意味着所有受试者都暴露于IVs的所有组合中。我将使用来自柯克的实验设计:行为科学程序(2013)的数据

只需在m1中将错误指定为
error(s\u f)
,即可获得与本书中的值相匹配的正确dfs和f比率。m2也给出了与m1相同的值,但也有臭名昭著的“警告:Error()模型是奇异的”。m3正在做一些奇怪的事情。它进一步将m1(634.9)中的残差划分为三个误差项的残差:s_f:a_f(174.2)、s_f:b_f(173.6)和s_f:a_f:b_f(287.1)。这是错误的,因为当我们在受试者之间进行双向方差分析时,我们不会得到三个错误项!多个错误项也与使用块析因设计的观点相反,这允许我们在A、B和AB的测试中使用相同的错误项,而不是分裂图设计需要两个错误项

使用
lmer
如何使用lmer获得相同的dfs和F值?如果您的数据是平衡的,则
lmerTest
中使用的Kenward-Roger近似值将为您提供准确的dfs和F比率

lmer(y ~ a_f*b_f + (1|s_f), data=d) %>% anova()         # mem1

lmer(y ~ a_f*b_f + (1|s_f/a_f:b_f), data=d) %>% anova() # mem2

lmer(y ~ a_f*b_f + (1|s_f/a_f*b_f), data=d) %>% anova() # mem3

lmer(y ~ a_f*b_f + (1|s_f:a_f:b_f), data=d) %>% anova() # mem4

lmer(y ~ a_f*b_f + (a_f*b_f|s_f), data=d) %>% anova()   # mem5

同样,只需将随机效应指定为
(1 | sf)
即可获得正确的dfs和f比率(mem1)。mem2-5甚至没有给出结果,可能它需要估计的随机效应的数量大于样本量。

快速搜索这个错误(这通常是一个很好的策略)让我进入了这个页面:相关部分在这里:我认为这意味着正确的错误模型是错误(Subject/T.norm.Class)当前位置我猜WasSick是一个主题级的观察,因此每个主题只有一个级别。当然,这就是安装的型号。-布莱恩·里普利教授/结束引用。我怀疑您指定的错误分布不正确,但如果没有更多信息,很难确定您的随机效果部分是否非常复杂。单一模型通常表明你试图拟合一个太复杂的模型,但没有足够的数据/观察。顺便说一句,这个Q不适合这个网站-你最好在@richiemorrisroe上问一下,我在谷歌上搜索了这个,但是错过了你指向的链接。对于所有参与者来说,IVs是在所有级别上给出的,因此并非每个受试者都只有一个级别。为此,有2个级别的IV1、5个级别的IV2和2个级别的IV3。@Gavin Simpson什么算“模型太复杂”?另外,感谢您提供stats.stackexchange的提示-我以后会在这里发布类似的问题。我已经看过了,但这似乎有更多关于纯统计和理论的问题,而不是R和脚本/编程的问题,stackoverflow似乎迎合了更多。太好了,谢谢!它现在似乎起作用了。非常感谢您的提示,lmers似乎是一个不错的选择:)
aov(y ~ a_f*b_f + Error(s_f), data=d) %>% summary()         # m1

aov(y ~ a_f*b_f + Error(s_f/a_f:b_f), data=d) %>% summary() # m2

aov(y ~ a_f*b_f + Error(s_f/a_f*b_f), data=d) %>% summary() # m3
lmer(y ~ a_f*b_f + (1|s_f), data=d) %>% anova()         # mem1

lmer(y ~ a_f*b_f + (1|s_f/a_f:b_f), data=d) %>% anova() # mem2

lmer(y ~ a_f*b_f + (1|s_f/a_f*b_f), data=d) %>% anova() # mem3

lmer(y ~ a_f*b_f + (1|s_f:a_f:b_f), data=d) %>% anova() # mem4

lmer(y ~ a_f*b_f + (a_f*b_f|s_f), data=d) %>% anova()   # mem5