Skip to content

Instantly share code, notes, and snippets.

@kylebutts
Last active May 3, 2021 20:10
Show Gist options
  • Select an option

  • Save kylebutts/3829464a22fff16a0e70b82ac558f897 to your computer and use it in GitHub Desktop.

Select an option

Save kylebutts/3829464a22fff16a0e70b82ac558f897 to your computer and use it in GitHub Desktop.
Export did aggregation to tables
reg_format <- function(pt, se, crit) {
pt_str <- sprintf("%0.4f", pt)
t_stat <- abs(pt/se)
if(t_stat > crit) {
pt_str <- paste0("$", pt_str, "^{**}$")
}
return(pt_str)
}
export_did_effects <- function(obj) {
tex <- ""
type <- obj$type
# Overall Row
if(type == "simple"){
att <- obj$overall.att
se <- obj$overall.se
# p-value
p <- qnorm(1 - obj$DIDparams$alp/2)
att_str <- reg_format(att, se, p)
tex <- paste(tex, glue::glue("ATT & {att_str} & {format(se, digits=3)} & {format(att - 1.96 * se, digits=3)} & {format(att + 1.96 * se, digits=3)}"))
tex <- paste(tex, "\n")
}
if(type %in% c("group", "calendar", "dynamic")) {
egt <- obj$egt
att.egt <- obj$att.egt
se.egt <- obj$se.egt
crit.val.egt <- obj$crit.val.egt
for(i in 1:length(att.egt)){
att_str <- reg_format(att.egt[i], se.egt[i], crit.val.egt)
tex <- paste(tex, glue::glue("ATT({egt[i]}) & {att_str} & {format(se.egt[i], digits=3)} & {format(att.egt[i] - crit.val.egt * se.egt[i], digits=3)} & {format(att.egt[i] - crit.val.egt * se.egt[i], digits=3)}"))
if(i != length(att.egt)) {
tex <- paste(tex, "\\\\")
}
tex <- paste(tex, "\n")
}
}
return(tex)
}
# Example Code
library(tidyverse)
library(did)
data(mpdta)
out <- att_gt(yname = "lemp",
gname = "first.treat",
idname = "countyreal",
tname = "year",
xformla = ~1,
data = mpdta,
est_method = "reg"
)
group_effects <- aggte(out, type = "group")
export_did_effects(group_effects) %>% cat()
dynamic_effects <- aggte(out, type="dynamic")
export_did_effects(dynamic_effects) %>% cat()
calendar_effects <- aggte(out, type="calendar")
export_did_effects(calendar_effects) %>% cat()
simple_effects <- aggte(out, type="simple")
export_did_effects(simple_effects) %>% cat()
@kylebutts

kylebutts commented Apr 30, 2021

Copy link
Copy Markdown
Author

To write to file just change %>% cat() to %>% cat(file = "filename.tex")

# Example Code
library(tidyverse)
library(did)
data(mpdta)

out <- att_gt(yname = "lemp",
              gname = "first.treat",
              idname = "countyreal",
              tname = "year",
              xformla = ~1,
              data = mpdta,
              est_method = "reg"
)

group_effects <- aggte(out, type = "group")

export_did_effects(group_effects) %>% cat()
#>  ATT(2004) & $-0.0797^{**}$ & 0.029 & -0.142 & -0.142 \\ 
#>  ATT(2006) & -0.0229 & 0.0168 & -0.0593 & -0.0593 \\ 
#>  ATT(2007) & -0.0261 & 0.0182 & -0.0655 & -0.0655

dynamic_effects <- aggte(out, type="dynamic")

export_did_effects(dynamic_effects) %>% cat()
#>  ATT(-3) & 0.0305 & 0.0153 & -0.00899 & -0.00899 \\ 
#>  ATT(-2) & -0.0006 & 0.0142 & -0.037 & -0.037 \\ 
#>  ATT(-1) & -0.0245 & 0.0142 & -0.0609 & -0.0609 \\ 
#>  ATT(0) & -0.0199 & 0.0124 & -0.0518 & -0.0518 \\ 
#>  ATT(1) & $-0.0510^{**}$ & 0.017 & -0.0947 & -0.0947 \\ 
#>  ATT(2) & $-0.1373^{**}$ & 0.0395 & -0.239 & -0.239 \\ 
#>  ATT(3) & $-0.1008^{**}$ & 0.0354 & -0.192 & -0.192

calendar_effects <- aggte(out, type="calendar")

export_did_effects(calendar_effects) %>% cat()
#>  ATT(2004) & -0.0105 & 0.0245 & -0.0673 & -0.0673 \\ 
#>  ATT(2005) & -0.0704 & 0.0321 & -0.145 & -0.145 \\ 
#>  ATT(2006) & $-0.0488^{**}$ & 0.0208 & -0.0969 & -0.0969 \\ 
#>  ATT(2007) & $-0.0371^{**}$ & 0.0142 & -0.0699 & -0.0699

simple_effects <- aggte(out, type="simple")

export_did_effects(simple_effects) %>% cat()
#>  ATT & $-0.0400^{**}$ & 0.0131 & -0.0656 & -0.0143

Created on 2021-05-03 by the reprex package (v0.3.0)

@kylebutts

Copy link
Copy Markdown
Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment