Skip to contents

A function to check whether treatment is staggered in a panel data set; that is, whether treatment is absorbing, so that no unit ever reverts from treated back to untreated.

Usage

check_staggered(df, idname, treatname, tname = NULL)

Arguments

df

the data.frame used in the function

idname

name of column that holds the unit id

treatname

name of column with the treatment indicator

tname

name of column that holds the time period. If supplied, each unit's rows are sorted by it before checking. If `NULL` (the default), the rows are assumed to already be in time order.

Value

a logical indicating whether treatment is staggered

Examples

n <- 50
id <- rep(seq_len(n), each = 4)
t <- rep(1:4, n)
g <- rep(sample(c(0, 2, 3), n, replace = TRUE), each = 4)
treat <- as.integer(t >= g & g > 0)
dta <- data.frame(id = id, t = t, treat = treat)
check_staggered(dta, idname = "id", treatname = "treat")
#> [1] TRUE

## treatment that switches back off is not staggered
dta_rev <- data.frame(
  id = c(1, 1, 2, 2), t = c(1, 2, 1, 2), treat = c(0, 1, 1, 0)
)
check_staggered(dta_rev, idname = "id", treatname = "treat")
#> [1] FALSE