-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.qmd
139 lines (112 loc) · 4.27 KB
/
README.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%",
message = FALSE,
warning = FALSE,
dev = "svg"
)
```
# [unitdid](https://kazuyanagimoto.com/unitdid/)
<!-- badges: start -->
<a href="https://kazuyanagimoto.r-universe.dev"><img src="https://kazuyanagimoto.r-universe.dev/badges/unitdid" class="img-fluid" alt="R-universe status badge"></a>
[![R-CMD-check](https://github.com/kazuyanagimoto/unitdid/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/kazuyanagimoto/unitdid/actions/workflows/R-CMD-check.yaml)
<a href = "https://github.com/kazuyanagimoto/unitdid/blob/main/LICENSE.md" target = "_blank"><img src="https://img.shields.io/badge/license-MIT-blue"></a>
[![Docs](https://img.shields.io/badge/docs-homepage-blue.svg)](https://kazuyanagimoto.com/unitdid/index.html)
<!-- badges: end -->
The `unitdid` package provides a set of functions for the analysis of
the unit-level difference-in-differences ([Arkhangelsky, Yanagimoto, and Zohar 2024](https://arxiv.org/abs/2403.19563)).
## Installation
You can install the development version of unitdid from R-universe with:
``` r
install.packages('unitdid',
repos = 'https://kazuyanagimoto.r-universe.dev')
```
## Example
This is a basic example with the simulated `base_heterocp` data set:
```{r example}
library(unitdid)
library(dplyr)
library(ggplot2)
base_heterocp |>
head()
```
Individual-level child penalties are estimated by `unitdid()`:
```{r mdl_unitdid}
mdl_base <- base_heterocp |>
unitdid(yname = "y",
iname = "id",
tname = "year",
ename = "cyear",
bname = "byear")
# Estimated individual-level child penalties (y_tilde)
get_unitdid(mdl_base)
```
### Aggregation of Individual-level Child Penalties
They can be aggregated to the `full`,
`event` (year at event (treatment). Mainly for staggered DiD design),
`event_age` (age at event. Mainly for child penalties) levels:
```{r agg_full}
summary(mdl_base) # default agg = "full"
```
```{r agg_cage}
sum_eage <- summary(mdl_base, agg = "event_age")
sum_eage |>
filter(rel_time == 0) |>
mutate(rel_time = -1,
mean = 0) |>
bind_rows(sum_eage) |>
filter(between(event_age, 25, 34)) |>
mutate(lbl_facet = paste0("Age ", event_age)) |>
ggplot(aes(x = rel_time, y = mean)) +
geom_point() +
geom_line() +
geom_vline(xintercept = -1, linetype = "dashed") +
geom_hline(yintercept = 0) +
facet_wrap(~lbl_facet, ncol = 5) +
labs(x = "Time to First Childbirth",
y = "Child Penalties on y") +
theme_minimal() +
theme(panel.grid.major.x = element_blank(),
panel.grid.minor = element_blank())
```
### Variance of Individual-level Child Penalties
Since the individual-level child penalties are estimated with measurement errors,
the variance of the `y_tilde` is not equal to the variance of
the individual-level child penalties.
The `compute_varcov = "var"` option of the `unitdid` estimates the variance of
the measurement errors and the variance of the individual-level child penalties
by subtracting the variance of the measurement errors from the variance of `y_tilde`
```{r var_cage}
mdl_base <- base_heterocp |>
unitdid(yname = "y",
iname = "id",
tname = "year",
ename = "cyear",
bname = "byear",
compute_varcov = "var")
sum_eage <- summary(mdl_base, agg = "event_age")
sum_eage |>
filter(rel_time == 0) |>
mutate(rel_time = -1,
var = 0) |>
bind_rows(sum_eage) |>
filter(between(event_age, 25, 34)) |>
mutate(lbl_facet = paste0("Age ", event_age)) |>
ggplot(aes(x = rel_time, y = sqrt(var))) +
geom_point() +
geom_line() +
geom_vline(xintercept = -1, linetype = "dashed") +
geom_hline(yintercept = 0) +
facet_wrap(~lbl_facet, ncol = 5) +
labs(x = "Time to First Childbirth",
y = "S.D. of Child Penalties") +
theme_minimal() +
theme(panel.grid.major.x = element_blank(),
panel.grid.minor = element_blank())
```
## References
Arkhangelsky, Dmitry, Kazuharu Yanagimoto, and Tom Zohar. 2024. "Flexible Analysis of Individual Heterogeneity in Event Studies: Application to the Child Penalty." arXiv. [https://arxiv.org/abs/2403.19563](https://arxiv.org/abs/2403.19563).