如何解决与rstatix中anova_test函数相关的错误

How to solve error related to anova_test function in rstatix

提问人:12666727b9 提问时间:9/2/2023 最后编辑:12666727b9 更新时间:9/6/2023 访问量:112

问:

我正在对此类数据运行以下重复测量方差分析

res.aov = anova_test(data_ex,
                     dv = D, 
                     wid = A, 
                     within = B,
                     between = C,
                     type = 3)

但是我收到以下错误:

Run `rlang::last_trace()` to see where the error occurred.
> rlang::last_trace()
<error/rlang_error>
Error in `spread()`:
! Each row of output must be identified by a unique combination of keys.
ℹ Keys are shared for 402 rows
• 1, 2
• 19, 20
• 21, 22
• 24, 25
• 26, 27
• 28, 29
• 30, 31
• 32, 33
• 34, 35
• 36, 37
• 3, 4
• 38, 39
• 40, 41
• 42, 43
• 44, 45
• 46, 47
• 48, 49
• 50, 51
• 52, 53
• 54, 55
• 56, 57
• 5, 6
• 58, 59
• 60, 61
• 62, 63
• 64, 65
• 66, 67
• 68, 69
• 71, 72
• 73, 74
• 75, 76
• 7, 8
• 77, 78
• 79, 80
• 81, 82
• 83, 84
• 85, 86
• 87, 88
• 89, 90
• 91, 92
• 93, 94
• 95, 96
• 9, 10
• 97, 98
• 99, 100
• 101, 102
• 103, 104
• 105, 106
• 107, 108
• 109, 110
• 111, 112
• 113, 114
• 115, 116
• 11, 12
• 117, 118
• 119, 120
• 121, 122
• 123, 124
• 125, 126
• 127, 128
• 129, 130
• 131, 132
• 133, 134
• 135, 136
• 13, 14
• 15, 16
• 17, 18
• 137, 138
• 155, 156
• 157, 158
• 160, 161
• 162, 163
• 164, 165
• 166, 167
• 168, 169
• 170, 171
• 172, 173
• 139, 140
• 174, 175
• 176, 177
• 178, 179
• 180, 181
• 182, 183
• 184, 185
• 186, 187
• 188, 189
• 190, 191
• 192, 193
• 141, 142
• 194, 195
• 196, 197
• 198, 199
• 200, 201
• 202, 203
• 204, 205
• 207, 208
• 209, 210
• 211, 212
• 143, 144
• 213, 214
• 215, 216
• 217, 218
• 219, 220
• 221, 222
• 223, 224
• 225, 226
• 227, 228
• 229, 230
• 231, 232
• 145, 146
• 233, 234
• 235, 236
• 237, 238
• 239, 240
• 241, 242
• 243, 244
• 245, 246
• 247, 248
• 249, 250
• 251, 252
• 147, 148
• 253, 254
• 255, 256
• 257, 258
• 259, 260
• 261, 262
• 263, 264
• 265, 266
• 267, 268
• 269, 270
• 271, 272
• 149, 150
• 151, 152
• 153, 154
• 273, 274
• 291, 292
• 293, 294
• 296, 297
• 298, 299
• 300, 301
• 302, 303
• 304, 305
• 306, 307
• 308, 309
• 275, 276
• 310, 311
• 312, 313
• 314, 315
• 316, 317
• 318, 319
• 320, 321
• 322, 323
• 324, 325
• 326, 327
• 328, 329
• 277, 278
• 330, 331
• 332, 333
• 334, 335
• 336, 337
• 338, 339
• 340, 341
• 343, 344
• 345, 346
• 347, 348
• 279, 280
• 349, 350
• 351, 352
• 353, 354
• 355, 356
• 357, 358
• 359, 360
• 361, 362
• 363, 364
• 365, 366
• 367, 368
• 281, 282
• 369, 370
• 371, 372
• 373, 374
• 375, 376
• 377, 378
• 379, 380
• 381, 382
• 383, 384
• 385, 386
• 387, 388
• 283, 284
• 389, 390
• 391, 392
• 393, 394
• 395, 396
• 397, 398
• 399, 400
• 401, 402
• 403, 404
• 405, 406
• 407, 408
• 285, 286
• 287, 288
• 289, 290
---
Backtrace:
     ▆
  1. ├─rstatix::anova_test(...)
  2. │ ├─... %>% .append_anova_class()
  3. │ └─rstatix (local) .anova_test(...)
  4. │   └─rstatix:::car_anova(.args)
  5. │     └─rstatix::factorial_design(...)
  6. │       └─... %>% as_tibble()
  7. ├─rstatix (local) .append_anova_class(.)
  8. ├─tibble::as_tibble(.)
  9. ├─tidyr::spread(., key = ".group.", value = dv)
 10. └─tidyr:::spread.data.frame(., key = ".group.", value = dv)
Run rlang::last_trace(drop = FALSE) to see 2 hidden frames.

任何看过这个的人都能理解它发生了什么吗?

这是我可重复的例子

structure(list(A = c("1", "1", "1", "1", "1", "1", "2", "2", 
"2", "2", "2", "2", "3", "3", "3", "3", "3", "3", "4", "4", "4", 
"4", "4", "4", "5", "5", "5", "5", "5", "5", "6", "6", "6", "6", 
"6", "6", "7", "7", "7", "7", "7", "7", "8", "8", "8", "8", "8", 
"8", "9", "9"), B = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L), levels = c("1", "2", 
"3"), class = "factor"), C = c("0", "0", "0", "0", "0", "0", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "1", "1", "1", 
"1", "1", "1", "0", "0"), D = c(1016.66666666667, 1016.66666666667, 
1018.05555555556, 1016.66666666667, 1016.66666666667, 1015.27777777778, 
1017.36111111111, 1017.36111111111, 1016.66666666667, 1015.97222222222, 
1015.97222222222, 1016.66666666667, 1018.05555555556, 1016.66666666667, 
1016.66666666667, 1015.27777777778, 1016.66666666667, 1016.66666666667, 
1017.36111111111, 1017.36111111111, 1019.44444444444, 1015.97222222222, 
1015.97222222222, 1013.88888888889, 1017.36111111111, 1018.05555555556, 
1017.36111111111, 1015.97222222222, 1015.27777777778, 1015.97222222222, 
1018.05555555556, 1017.36111111111, 1016.66666666667, 1015.27777777778, 
1015.97222222222, 1016.66666666667, 1016.66666666667, 1016.66666666667, 
1016.66666666667, 1016.66666666667, 1016.66666666667, 1016.66666666667, 
1016.66666666667, 1016.66666666667, 1016.66666666667, 1016.66666666667, 
1016.66666666667, 1016.66666666667, 1021.52777777778, 1018.05555555556
)), row.names = c(NA, 50L), class = "data.frame")
r anova rstatix

评论

0赞 scott.pilgrim.vs.r 9/2/2023
你试过添加一个参数吗?我不太确定你想运行什么。也许是这样的::。此外,变量应该是您的因变量列,但现在它是......那是数据框吗?此外,如果您运行: 并将输出粘贴到您的帖子中,其中是数据框的名称,这将有所帮助。这有助于我们更快地查看您的数据并回答您的问题。formulaformula=dvar ~ ivardvdatadput(data)data
0赞 12666727b9 9/2/2023
因变量是我这边的一个错误。也许我以后可以添加这个
0赞 neilfws 9/5/2023
似乎是这个问题的重复。问题是该函数使用(已弃用)并且行不是唯一的,因此失败。tidyr::spreadspread()
0赞 12666727b9 9/5/2023
@neilfws谢谢,让我知道。我鼓励你把这个作为下面的答案,表明鳕鱼可以工作,所以如果允许的话,我可以向你提供赏金。
1赞 neilfws 9/6/2023
很遗憾,代码无法使用您的示例数据。可以为每行分配一个唯一标识符来工作,但这会导致一个新错误:“对比度只能应用于具有 2 个或更多水平的因子”。因此,我认为您需要更好的示例数据,并更好地了解方差分析中正在比较的内容。spread

答:

2赞 jared_mamrot #1

编辑

这基本上就是@neilfws评论的;除非您调整输入数据,否则我不知道如何运行方差分析。


您是否尝试过删除“重复项”?例如

library(rstatix)
#> 
#> Attaching package: 'rstatix'
#> The following object is masked from 'package:stats':
#> 
#>     filter

data_ex <- structure(list(A = c("1", "1", "1", "1", "1", "1", "2", "2", 
                                "2", "2", "2", "2", "3", "3", "3", "3", "3", "3", "4", "4", "4", 
                                "4", "4", "4", "5", "5", "5", "5", "5", "5", "6", "6", "6", "6", 
                                "6", "6", "7", "7", "7", "7", "7", "7", "8", "8", "8", "8", "8", 
                                "8", "9", "9"), B = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
                                                                3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
                                                                1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
                                                                2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L), levels = c("1", "2", 
                                                                                                                    "3"), class = "factor"), C = c("0", "0", "0", "0", "0", "0", 
                                                                                                                                                   "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
                                                                                                                                                   "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
                                                                                                                                                   "1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "1", "1", "1", 
                                                                                                                                                   "1", "1", "1", "0", "0"), D = c(1016.66666666667, 1016.66666666667, 
                                                                                                                                                                                   1018.05555555556, 1016.66666666667, 1016.66666666667, 1015.27777777778, 
                                                                                                                                                                                   1017.36111111111, 1017.36111111111, 1016.66666666667, 1015.97222222222, 
                                                                                                                                                                                   1015.97222222222, 1016.66666666667, 1018.05555555556, 1016.66666666667, 
                                                                                                                                                                                   1016.66666666667, 1015.27777777778, 1016.66666666667, 1016.66666666667, 
                                                                                                                                                                                   1017.36111111111, 1017.36111111111, 1019.44444444444, 1015.97222222222, 
                                                                                                                                                                                   1015.97222222222, 1013.88888888889, 1017.36111111111, 1018.05555555556, 
                                                                                                                                                                                   1017.36111111111, 1015.97222222222, 1015.27777777778, 1015.97222222222, 
                                                                                                                                                                                   1018.05555555556, 1017.36111111111, 1016.66666666667, 1015.27777777778, 
                                                                                                                                                                                   1015.97222222222, 1016.66666666667, 1016.66666666667, 1016.66666666667, 
                                                                                                                                                                                   1016.66666666667, 1016.66666666667, 1016.66666666667, 1016.66666666667, 
                                                                                                                                                                                   1016.66666666667, 1016.66666666667, 1016.66666666667, 1016.66666666667, 
                                                                                                                                                                                   1016.66666666667, 1016.66666666667, 1021.52777777778, 1018.05555555556
                                                                                                                                                   )), row.names = c(NA, 50L), class = "data.frame")

res.aov = anova_test(data_ex %>% dplyr::distinct(A,B,C, .keep_all = TRUE),
                     dv = D, 
                     wid = A, 
                     within = B,
                     between = C,
                     type = 3)
res.aov
#> ANOVA Table (type III tests)
#> 
#> $ANOVA
#>   Effect DFn DFd     F     p p<.05   ges
#> 1      C   1   6 1.325 0.294       0.076
#> 2      B   2  12 0.362 0.704       0.037
#> 3    C:B   2  12 0.672 0.529       0.066
#> 
#> $`Mauchly's Test for Sphericity`
#>   Effect     W     p p<.05
#> 1      B 0.599 0.278      
#> 2    C:B 0.599 0.278      
#> 
#> $`Sphericity Corrections`
#>   Effect   GGe     DF[GG] p[GG] p[GG]<.05   HFe      DF[HF] p[HF] p[HF]<.05
#> 1      B 0.714 1.43, 8.57 0.638           0.874 1.75, 10.49 0.677          
#> 2    C:B 0.714 1.43, 8.57 0.487           0.874 1.75, 10.49 0.512

创建于 2023-09-06 使用 reprex v2.0.2