ranovarstatix

How to solve error related to anova_test function in rstatix


I am running the following repeated measure ANOVA on such data

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

But I am getting the following error:

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.

Can anyone having a look to this can understand what it is happening?

Here it is my reproducible example

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")

Solution

  • Edit

    This is basically what @neilfws commented; unless you adjust your input data, I don't know how you can run an ANOVA.


    Have you tried removing your 'duplicates'? E.g.

    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
    

    Created on 2023-09-06 with reprex v2.0.2