-
Notifications
You must be signed in to change notification settings - Fork 15
Description
Hi Guys,
First - thanks a bunch for translating this package to R, I really appreciate it. I just wanted to flag a small issue I've found when using the bacon() function.
It seems that bacon() does not currently allow our groups to be different sizes. I've appended the code to generate a minimal example. In the dataset I create, we have 3 groups (id == 1, 2, 3), where id == 1 | 3 contain one individual, and id == 2 contains two individuals (ind_id is the individual id).
If I run bacon(id_var == "group_id", ...) the function will throw an error for an "Unbalanced Panel", because group 2 has twice as many time periods within it as group 1 (because there are two individuals in group 2).
But, I don't think you want to call that an error; otherwise, you cannot demonstrate 2x2 weighting heterogeneity arising from the size of the groups. And, from what I understand, this is one of the key takeaways of the Bacon decomposition: the larger groups retain higher weights in the 2x2.
Alternatively, if you do want to call that an unbalanced panel, I don't think you need the code calculating "n_k, n_u, n_ku", because n_k = n_u by definition and n_ku = 0.5.
Thanks again,
Alec
library(dplyr)
df <-
expand.grid(
group_id = c(1, 2, 3), # Group ID (treatment level ID)
t = c(0, 1, 2) # Time
) %>%
mutate(
# Treatment status
a = case_when(
group_id == 2 & t > 0 ~ 1, # 1 time period untreated 2 periods treated
group_id == 3 & t > 1 ~ 1, # 2 untreated 1 treated
T ~ 0 # id == 1 never treated
)
)
# Expand dataset with "individual" level observations
df <- df %>% left_join(
expand.grid(
group_id = c(1, 2, 3),
ind_id = seq(1, 2)
) %>%
filter(group_id == 2 | ind_id < 2) ## Leave only group id == 2 with two individuals
) %>%
select(group_id, ind_id, everything()) %>%
arrange(group_id, ind_id, t)