尽管超过 2 个级别,但 R 中的 rstatix anova_test 给出了对比度错误

问题描述

以下是我的数据集的子集:

structure(list(ID = structure(c(1L,1L,2L,3L,4L,5L,6L,7L,7L),.Label = c("5356","5357","5358","5359","5360","5363","5373","5381","5383","5386","5395","5397","5400","5401","5444","5445","5446","5448","5450","5451","5454","5472","5473","5475","5476","5477","5478","5480","5481","5483","5487","5494","5495","5504","5505","5506","5507","5508","5509","5513","5514","5515","5516","5517","5518","5519","5521","5523","5524","5526","5527","5528","5544","5545","5546","5547","5551","5552","5553","5554","5555","5558","5559","5560","5562","5564","5566","5573","5574","5575","5576","5577","5578","5579","5584","5585","5587","5588","5589","5591","5594","5595","5604","5611","5612","5613","5615","5616","5619","5620","5621","5622","5626","5627","5628","5631","5632","5634","5635","5643","5652","5653","5654","5655","5656","5657","5659","5660","5661","5664","5665","5666","5669","5671","5672","5673","5678","5680","5688","5689","5690","5691","5692","5698","5699","5700","5702","5703","5704","5706","5708","5709","5710","5730","5731","5732","5733","5734","5735","5739","5740","5741","5742","5743","5744","5745","5746","5747","5748","5749","5750","5753","5754","5755","5766","5767","5776","5777","5778","5779","5780","5781","5787","5788","5789","5790","5791","5792","5793","5797","5798","5799","5800","5801","5810","5811","5812","5813","5814","5819","5820","5821","5822","5823","5824","5825","5827","5828","5829","5830","5857","5859","5874","5875","5876","5877","5878","5879","5883","5884","5886","5887","5888","5889","5890","5892","5893","5896","5899","5900","5909","5910","5918","5919","5920","5921","5922","5923","5927","5929","5931","5932","5933","5934","5936","5937","5941","5943","5944","5949","5950","5951","5952","5956","5957","5958","5959","5971","5972","5973","5976","5979","5980","5981","6001","6002","6003","6004","6005","6009","6027","6028","6033","6042","6054","6063","6067","6073","6076","6077","6078","6079","6080","6081","6082","6083","6098","6102","6103","6104","6105","6106","6107","6111","6119","6133","6146","6147","6157","6158","6160","6161","6162","6163","6164","6165","6166","6167","6168","6169","6170","6171","6172","6173","6174","6175","6190","6193","6195","6196","6197","6208","6228","6229","6232","6255","6268","6269","6270","6275"),class = "factor"),Gender = structure(c(1L,1L),.Label = c("Male","Female"),Age = structure(c(2L,2L),.Label = c("Young","Old"),FA = c(0.335363597,0.275185704,0.381515294,0.603494346,0.615962446,0.534368277,0.378798842,0.262283027,0.463445097,0.479340732,0.390655279,0.30846712,0.38545981,0.402050078,0.466983199,0.456424206,0.402167588,0.295976758,0.442705005,0.445807546,0.607728601,0.589604795,0.372361958,0.296392322,0.311423391,0.416039616,0.534221292,0.564736903,0.411948681,0.289896786,0.487889856,0.559963286,0.577650726,0.484459132,0.454060167,0.280332953),leftright = structure(c(1L,.Label = c("left","right"),ROI_Coded = structure(c(2L,.Label = c("LC","noradrenergic","FPT"),class = "factor")),row.names = c(NA,-36L),class = c("tbl_df","tbl","data.frame"),na.action = structure(c(`11` = 11L,`12` = 12L,`54` = 54L,`208` = 208L,`347` = 347L,`348` = 348L,`1089` = 1089L,`1263` = 1263L,`1456` = 1456L),class = "omit"))

其中一个子集看起来像:

  # A tibble: 36 x 6
   ID    Gender Age      FA leftright ROI_Coded    
   <fct> <fct>  <fct> <dbl> <fct>     <fct>        
 1 5356  Male   Old   0.335 left      noradrenergic
 2 5356  Male   Old   0.275 right     noradrenergic
 3 5356  Male   Old   0.382 left      LC           
 4 5356  Male   Old   0.603 right     LC           
 5 5356  Male   Young   0.616 left      FPT          
 6 5356  Male   Young   0.534 right     FPT          
 7 5357  Male   Old   0.379 left      noradrenergic
 8 5357  Male   Old   0.262 right     noradrenergic
 9 5357  Male   Old   0.463 left      LC           
10 5357  Male   Old   0.479 right     LC          

我想使用 rstatix anova_test 函数运行混合方差分析。我试过运行以下:

res.aov <- rstatix::anova_test(
  data = df2,dv = FA,wid = ID,between = c(ROI_Coded,leftright),within = c(Age,Gender)
)

但反复收到以下输出错误

The 'wid' column contains duplicate ids across between-subjects variables. Automatic unique id will be created
Error in `contrasts<-`(`*tmP*`,value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels

但是当我检查我的数据时,我没有 NA 并且至少有两个因素:

sapply(fctr,nlevels)
sapply(df2,function(x) sum(is.na(x)))

NAs:
ID    Gender       Age        FA leftright ROI_Coded 
0         0         0         0         0         0

Factors:
ID    Gender       Age leftright ROI_Coded 
310         2         2         2         3 

我遵循了调试对比错误 here 但仍然收到错误

我不确定为什么或如何继续。

解决方法

我想我按照指示找到了解决方案 here

afex::aov_car(FA ~ Age*Gender*ROI_Coded*leftright + Error(id/ROI_Coded*leftright),data=df2)

输出结果与:

Missing values for following ID(s):
5357,5383,5505,5552,5821,5909,5980
Removing those cases from the analysis.

仔细查看数据,这些 ID 并没有每个级别的 ROI_Coded。因此,rstatix 的因子警告有些误导,因为每个 ID 都有 >=2 个因子。