tests/testthat/test-ComputeShifts.R

test_that("correctly recognizes wrong variable types", {
    df_test <- read.csv("./input/df_test.csv")

    # Character variables
    expect_error(ComputeShifts(df_test, 1,        "periods", "values",  3, F, T))
    expect_error(ComputeShifts(df_test, "country", 1,        "values",  3, F, T))
    expect_error(ComputeShifts(df_test, "country", "periods", 1,        3, F, T))
    expect_error(ComputeShifts(df_test, "country", "periods", "policy", 3, F, T))

    # Logical variables
    expect_error(ComputeShifts(df_test, "country", "periods", "values", 3, "T", F))
    expect_error(ComputeShifts(df_test, "country", "periods", "values", 3, T, "T"))

    # Numeric variables
    expect_error(ComputeShifts(df_test, "country", "periods", "values", "2", F, T))
})

test_that("correctly recognizes variables missing from dataset", {
    df_test <- read.csv("./input/df_test.csv")

    # Character variables
    expect_error(ComputeShifts(df_test, "country", "periods", "policy", 3, F, T))
    expect_error(ComputeShifts(df_test, "state",  "periods", "values", 3, F, T))
})

test_that("correctly adds the desired number of shifts", {
    df_test <- read.csv("./input/df_test.csv")

    # Add 1 lead/lag
    expect_equal(ncol(ComputeShifts(df_test, idvar = "country", timevar = "periods",
                                    shiftvar = "values",
                                    shiftvalues = 2)),
                 ncol(df_test) + 1)
    expect_equal(ncol(ComputeShifts(df_test, idvar = "country", timevar = "periods",
                                    shiftvar = "values",
                                    shiftvalues = -2)),
                 ncol(df_test) + 1)

    # Add multiple leads/lags
    expect_equal(ncol(ComputeShifts(df_test, idvar = "country", timevar = "periods",
                                    shiftvar = "values",
                                    shiftvalues = 1:2)),
                 ncol(df_test) + 2)
    expect_equal(ncol(ComputeShifts(df_test, idvar = "country", timevar = "periods",
                                    shiftvar = "values",
                                    shiftvalues = -2:-1)),
                 ncol(df_test) + 2)
})

test_that("the columns added have correct suffixes", {
    df_test <- read.csv("./input/df_test.csv")

    df_lags <- ComputeShifts(df_test, idvar = "country", timevar = "periods",
                             shiftvar = "values",
                             shiftvalues = 1:2)

    v_newvars <- setdiff(colnames(df_lags), colnames(df_test))

    expect_true(all(grepl("_lag", v_newvars)))

    df_leads <- ComputeShifts(df_test, idvar = "country", timevar = "periods",
                              shiftvar = "values",
                              shiftvalues = -2:-1)

    v_newvars <- setdiff(colnames(df_leads), colnames(df_test))

    expect_true(all(grepl("_lead", v_newvars)))
})

test_that("correctly shifts variable when there are no holes in timevar", {
    df <- data.frame(
        id      = c(rep("A", 4), rep("B", 2), rep("C", 3)),
        time    = c(1, 2, 3, 4, 1, 2, 1, 2, 3),
        z       = c(10, 12, 13, 14, 8, 9, 10, 11, 12),
        z_lag1  = c(NA, 10, 12, 13, NA, 8, NA, 10, 11),
        z_lead1 = c(12, 13, 14, NA, 9, NA, 11, 12, NA)
    )

    df_shifts <- ComputeShifts(df[, c("id", "time", "z")],
                               idvar = "id", timevar = "time",
                               shiftvar = "z",
                               shiftvalues = c(-1, 1),
                               timevar_holes = FALSE)

    expect_equal(df$z_lead1, df_shifts$z_lead1)
    expect_equal(df$z_lag1,  df_shifts$z_lag1)

    expect_true(all(c("id", "time", "z") %in% colnames(df_shifts)))
})

test_that("correctly shifts variable when there are holes in timevar", {
    df <- data.frame(
        id      = c(rep("A", 4), rep("B", 2), rep("C", 3)),
        time    = c(1, 2, 4, 5, 2, 3, 2, 3, 4),
        z       = c(10, 12, 13, 14, 8, 9, 10, 11, 12),
        z_lag1  = c(NA, 10, NA, 13, NA, 8, NA, 10, 11),
        z_lead1 = c(12, NA, 14, NA, 9, NA, 11, 12, NA)
    )

    df_shifts <- ComputeShifts(df[, c("id", "time", "z")],
                               idvar = "id", timevar = "time",
                               shiftvar = "z",
                               shiftvalues = c(-1, 1),
                               timevar_holes = TRUE)

    expect_equal(df$z_lead1, df_shifts$z_lead1)
    expect_equal(df$z_lag1,  df_shifts$z_lag1)

    expect_true(all(c("id", "time", "z") %in% colnames(df_shifts)))
})

Try the eventstudyr package in your browser

Any scripts or data that you put into this service are public.

eventstudyr documentation built on May 29, 2024, 10:38 a.m.