方差分析数据参数错误

ANOVA data argument error

我正在尝试 运行 对混合效应模型的协方差进行分析。 我的数据集如下

> str(try)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   864 obs. of  7 variables:
$ Site      : chr  "BISC1" "BISC1" "BISC1" "BISC1" ...
$ SET       : Factor w/ 3 levels "SET1","SET2",..: 1 1 1 1 1 1 1 1 1 1 ...
$ ARM       : chr  "A_0001" "A_0001" "A_0001" "A_0001" ...
$ Pin       : num  1 2 3 4 5 6 7 8 9 1 ...
$ SETarmpin : chr  "SET1_A_0001_1" "SET1_A_0001_2" "SET1_A_0001_3" 
"SET1_A_0001_4" ...
$ Days      : num  145 145 145 145 145 145 145 145 145 145 ...
$ AbsPinDiff: num  -1 -4 7 -12 -5 0 -5 -1 0 -22 ...

> dput(head(try))
structure(list(Site = c("BISC1", "BISC1", "BISC1", "BISC1", "BISC1", 
"BISC1"), SET = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("SET1", 
"SET2", "SET3"), class = "factor"), ARM = c("A_0001", "A_0001", 
"A_0001", "A_0001", "A_0001", "A_0001"), Pin = c(1, 2, 3, 4, 
5, 6), SETarmpin = c("SET1_A_0001_1", "SET1_A_0001_2", "SET1_A_0001_3", 
"SET1_A_0001_4", "SET1_A_0001_5", "SET1_A_0001_6"), Days = c(145, 
145, 145, 145, 145, 145), AbsPinDiff = c(-1, -4, 7, -12, -5, 
0)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))

我的混合效果模型如下:

trymodel<-lme(AbsPinDiff~Days+SET, random = ~1|SETarmpin,
           correlation = corAR1(form=~Days|SETarmpin),
           data = try, na.action = na.exclude, method="REML")

我正在使用 'car' 包中的 Anova 函数。然而,当我 运行 上述模型上的函数时,我收到如下错误消息:

> Anova(trymodel4)
Error in terms.formula(object, data = data) : 
'data' argument is of the wrong type

我有点困惑,因为据我推测,方差分析函数没有 'data' 参数。

大多数情况下,当您为数据集指定与内置 R 对象相同的名称时(例如 try),R 很聪明,会发现它需要一个不是函数的对象。这似乎是令人困惑的情况之一 - 导致一般建议不要以这种方式命名你的对象...

加载 ggplot2 包(报告 here)时存在奇怪的交互(我还没有弄清楚)。在这两种情况下我都会收到错误消息,但是如果加载了 ggplot2(在 nlme 之前或之后,这有时会有所不同),那么我会收到您报告的错误;否则我会得到一个不同的错误。 (请注意,如果您要对此进行试验,则需要确保在干净的 R 会话中开始每个测试。)

在任何一种情况下,更改数据集的名称都会使 car::Anova() 对我有用。

test <- FALSE
test_before <- TRUE
if (test_before) library(ggplot2)
library(nlme)
if (test) library(ggplot2)
data("sleepstudy",package="lme4")
try <- sleepstudy ## rename data set
m1 <- lme(Reaction~Days,random=~1|Subject,
          correlation=corAR1(form=~Days|Subject),data=try)
car::Anova(m1)
## with only nlme: cannot coerce class "function" to a data.frame
car::Anova(update(m1,data=sleepstudy)) ## works 

这个 可能 可以在 car 包内部修复(有一些方法可以告诉 R 只查找非函数对象)。

我的会话信息:

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] nlme_3.1-137       ggplot2_2.2.1.9000

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.17      bindr_0.1.1       magrittr_1.5      tidyselect_0.2.4 
 [5] munsell_0.5.0     colorspace_1.3-2  lattice_0.20-35   R6_2.2.2         
 [9] rlang_0.2.1       carData_3.0-1     car_3.0-0         plyr_1.8.4       
[13] dplyr_0.7.5       tools_3.6.0       grid_3.6.0        data.table_1.11.4
[17] gtable_0.2.0      rio_0.5.10        withr_2.1.2       abind_1.4-5      
[21] readxl_1.1.0      lazyeval_0.2.1    assertthat_0.2.0  tibble_1.4.2     
[25] zip_1.0.0         bindrcpp_0.2.2    purrr_0.2.5       curl_3.2         
[29] glue_1.2.0        haven_1.1.1       openxlsx_4.1.0    cellranger_1.1.0 
[33] compiler_3.6.0    pillar_1.2.3      forcats_0.3.0     scales_0.5.0.9000
[37] foreign_0.8-70    pkgconfig_2.0.1  
>