对于使用lme
函数的重复度量分析,我可以使用以下命令省略不可用(na
)数据。na.action=na.omit
。
anova_lme_loc<-lme(data=rm1, fixed=Nmin~location*date, random=~1|subject,
na.action=na.omit)
但是,当我尝试使用ezANOVA功能时,我收到了以下通知:
anova_ez_loc=ezANOVA(data=rm1, dv=Nmin, wid=subject, within=date,
between=location, na.action=na.omit)
ezANOVA出错(data = rm1,dv = Nmin,wid = subject,= = date,: 未使用的参数(na.action = na.omit)
如何在ezANOVA
中省略我的na数据? - 解决使用:
rm1_na <- na.omit(rm1)
但现在我收到以下错误:
anova_ez_loc = ezANOVA(data = rm1_na,dv = Nmin,wid = subject,within = date,between = location)
警告:将“主题”转换为ANOVA因子。
警告:数据不平衡(每组不等N)。确保为ezANOVA()的type参数指定了一个考虑周全的值。
ezANOVA_main出错(data = data,dv = dv,wid = wid,within = within,: 一个或多个单元格缺少数据。尝试使用ezDesign()检查数据。
答案 0 :(得分:2)
ezANOVA
无法处理缺失的数据,因为作者在this reponse中概述了类似的问题。您有两种选择:
complete.cases
可能会有所帮助。ezMixed
,这个软件包更复杂,但可以处理丢失的数据。要手动删除数据,您可以执行以下操作:
rm1.complete <- rm1[complete.cases(rm1),]
然后在分析中使用rm1.complete
。
答案 1 :(得分:0)
@Jonathan Christensen答案的补充:
使用内部主题因素时,complete.cases
不起作用,因为它会逐行考虑案例,而您需要删除包含不完整案例ID的所有行。
这是一个小脚本,它将complete.cases
扩展到一个名为complete.cases.within
的自定义函数,该函数可以为您完成所有操作:
if(!require(tidyverse)) install.packages("tidyverse"); library(tidyverse) #useful package for clean code
#helper function that returns ALL indices of matches of x in table instead of just the first one
#we need this to get all rows containing the ID of incomplete cases.
matchAll = function(x, table, nomatch=NA_integer_, incomparables=NULL) {
which(!is.na(match(table, x, nomatch, incomparables)))
}
complete.cases.within = function(data, dv, wid) {
incomplete = data %>% select(dv) %>% complete.cases() %>% !. #boolean vector containing incomplete rows
toRemove = data %>% select(wid) %>% filter(incomplete) %>% .[,1] %>% unique() #all IDs containing incomplete rows
positions = matchAll(toRemove, data[,wid])
return(if (length(positions)==0) data else data[-positions,]) #drop all rows matching toRemove IDs
}