# alternative-decks

# Alternative Decks in mmcards

This vignette explores three alternative types of decks offered by the ‘mmcards’ package that may better suit your specific use case compared to a standard 52-card deck. First, load the ‘mmcards’ library, and then we’ll play simple games to illustrate how each deck works.

    library(mmcards)

## AnonymousDeck

Suppose you’re teaching a statistical concept and want to simulate drawing samples from a population. In that case, you can define a custom AnonymousDeck and play a game to drive the idea home.

### Whose Card is Closer to the Population Mean?

    # Define the Players
    p1 <- NULL
    p2 <- NULL

    # Create a shuffled anonymous deck of 10 cards using a random number seed for reproducibility
    game_deck <- shuffle_deck(deck_of_cards = function(x){rnorm(10, 0, 5)},
                              seed = 147)

    # Deal a card to each player
    game_deck <- deal_card(game_deck)
    p1 <- game_deck$dealt_card

    game_deck <- deal_card(game_deck)
    p2 <- game_deck$dealt_card

    # Display the cards and determine the winner
    paste("p1 has:", p1$card, "with a value of", p1$value)
    #> [1] "p1 has: 8 with a value of 2.21542965936812"
    paste("p2 has:", p2$card, "with a value of", p2$value)
    #> [1] "p2 has: 1 with a value of -9.39463929631786"
    paste0("The winner is: ", ifelse(abs(p1$value) < abs(p2$value), "p1", "p2"))
    #> [1] "The winner is: p1"

    # Here are the remaining 8 cards in the deck
    print(game_deck$updated_deck)
    #>    card     value
    #> 5     5 -2.519066
    #> 3     3 -2.771481
    #> 4     4 -2.678679
    #> 6     6 -1.461480
    #> 2     2 -3.768717
    #> 9     9  4.658202
    #> 10   10  8.255931
    #> 7     7  1.201079

## InterleavedDeck

If you want to simulate drawing samples from two distinct populations, an InterleavedDeck can be useful.

### Whose Card is Closer to the Population Mean? with Biased Decks

    # Define the Players
    p1 <- NULL
    p2 <- NULL

    # Create a shuffled interleaved deck of 10 cards using a random number seed for reproducibility
    game_deck <- shuffle_deck(deck_of_cards = function(x){list(rnorm(5, 0, 5),
                                                               rnorm(5, 0, 3))},
                              seed = 157)

    # Deal a card to each player
    game_deck <- deal_card(game_deck)
    p1 <- game_deck$dealt_card

    game_deck <- deal_card(game_deck)
    p2 <- game_deck$dealt_card

    # Display the cards and determine the winner
    paste("p1 has:", p1$card, "with a value of", p1$value)
    #> [1] "p1 has: A_3 with a value of 2.5268783375614"
    paste("p2 has:", p2$card, "with a value of", p2$value)
    #> [1] "p2 has: B_2 with a value of -1.45153422895941"
    paste0("The winner is: ", ifelse(abs(p1$value) < abs(p2$value), "p1", "p2"))
    #> [1] "The winner is: p2"

    # Here are the remaining 8 cards in the deck
    print(game_deck$updated_deck)
    #>    card       value
    #> 2   A_2  2.58087475
    #> 41  B_4  3.56098941
    #> 4   A_4  9.75742338
    #> 51  B_5  2.71402888
    #> 1   A_1  0.06059832
    #> 31  B_3 -3.18706595
    #> 5   A_5  8.46972493
    #> 11  B_1 -0.79511543

## PairedDeck

A PairedDeck is ideal for games that require maintaining a natural pairing between cards, such as in a paired t-test scenario.

### Hanging from Pull-up Bar: Left Hand vs Right Hand

    # Define the hands
    LH <- NULL
    RH <- NULL

    # Create a shuffled paired deck of 20 cards using a random number seed for reproducibility
    game_deck <- shuffle_deck(deck_of_cards = function(x){list(rpois(10, 30),
                                                               rnorm(10, 40))},
                              seed = 232,
                              paired = TRUE)

    # For the student whose cards came out on top, get the hang time for each hand
    game_deck <- deal_card(game_deck)
    LH <- game_deck$dealt_card

    game_deck <- deal_card(game_deck)
    RH <- game_deck$dealt_card

    # Display the cards and determine which hand was stronger
    paste("This student's left hand card is:",
          LH$card, "with a value of", LH$value)
    #> [1] "This student's left hand card is: A_6 with a value of 32"
    paste("This student's right hand card is:", RH$card, "with a value of", RH$value)
    #> [1] "This student's right hand card is: B_6 with a value of 40.8653697233691"
    paste0("Did this student hang for longer with left hand?: ",
           ifelse(LH$value > RH$value, "Yes", "No"))
    #> [1] "Did this student hang for longer with left hand?: No"

    # Here are the remaining students' hang times
    print(game_deck$updated_deck)
    #>     card    value
    #> 2    A_2 23.00000
    #> 21   B_2 41.56952
    #> 9    A_9 30.00000
    #> 91   B_9 39.67030
    #> 5    A_5 32.00000
    #> 51   B_5 39.52775
    #> 7    A_7 23.00000
    #> 71   B_7 40.55928
    #> 4    A_4 21.00000
    #> 41   B_4 41.16555
    #> 3    A_3 36.00000
    #> 31   B_3 41.39362
    #> 10  A_10 31.00000
    #> 101 B_10 37.64896
    #> 8    A_8 21.00000
    #> 81   B_8 40.62200
    #> 1    A_1 39.00000
    #> 11   B_1 40.82121

Notice that the students’ order is shuffled but the LH and RH pairs are intact.