## ----data1, eval=FALSE-------------------------------------------------------- # library(matchMulti) # # data(catholic_schools) # # catholic_schools$sectorf <- factor(catholic_schools$sector, # label=c("Public", "Catholic")) # # #Number of Treated Schools # length(table(catholic_schools$school[ # catholic_schools$sector==1])) # # #Number of Controls Schools # length(table(catholic_schools$school[ # catholic_schools$sector==0])) # ## ----plot, eval=FALSE--------------------------------------------------------- # # Create Discrete Measures from Continuous Covariates # library(ggplot2) # # # A Boxplot for the size of the school # ggplot(catholic_schools, aes(x=sectorf, y=size, # fill=sectorf)) + # geom_boxplot() + guides(fill="none") + # xlab("") + ylab("School Enrollment") ## ----plot2, eval=FALSE-------------------------------------------------------- # ggplot(catholic_schools, aes(x=sectorf, y=female_mean, # fill=sectorf)) + # geom_boxplot() + guides(fill="none") + # xlab("") + ylab("Percentage of Female Students") ## ----trim, eval=FALSE--------------------------------------------------------- # library(dplyr) # summary(catholic_schools$female_mean) # summary(catholic_schools$female_mean[ # catholic_schools$sector==1]) # summary(catholic_schools$female_mean[ # catholic_schools$sector==0]) # catholic_schools <- catholic_schools %>% # filter(female_mean>.30, female_mean<.75) # summary(catholic_schools$female_mean) ## ----bal, eval=FALSE---------------------------------------------------------- # student.cov <- c('minority','female','ses') # school.cov <- c('minority_mean', 'female_mean', 'size', # 'acad', 'discrm', 'ses_mean') # all.cov <- c('minority','female','ses','minority_mean', # 'female_mean', 'size', 'acad', # 'discrm', 'ses_mean') # # #look at balance on students before matching # balanceTable(catholic_schools[c(all.cov,'sector')], # treatment = 'sector') ## ----no_stu, eval=FALSE------------------------------------------------------- # match.simple <- matchMulti(catholic_schools, # treatment = 'sector', # school.id = 'school', # match.students = FALSE, # student.vars = student.cov, # verbose=TRUE) # # # Check Balance # bal.tab <- balanceMulti(match.simple, # student.cov = student.cov, # school.cov = school.cov) # # out <- cbind(bal.tab$schools[,3], bal.tab$schools[,6]) # colnames(out) <- c("S.Diff Before", "S.Diff After") # round(out, 3) ## ----no_stu2, eval=FALSE------------------------------------------------------ # match.out <- matchMulti(catholic_schools, # treatment = 'sector', # school.id = 'school', # match.students = TRUE, # student.vars = student.cov) # # Check Balance # bal.tab.stu <- balanceMulti(match.out, # student.cov = student.cov, # school.cov = school.cov) ## ----cut, eval=FALSE---------------------------------------------------------- # # Create Discrete Measures from Continuous Covariates # catholic_schools$acad_cut <- cut(catholic_schools$acad, 6) # catholic_schools$size_cut <- cut(catholic_schools$size, 6) # catholic_schools$discrm_cut <- cut(catholic_schools$discrm, 6) # catholic_schools$ses_cut <- cut(catholic_schools$ses_mean, 6) ## ----fine.bal, eval=FALSE----------------------------------------------------- # # Match with Fine Balance # match.fb <- matchMulti(catholic_schools, # treatment = 'sector', # school.id = 'school', # match.students = TRUE, # verbose=TRUE, # student.vars = student.cov, # school.fb = list(c('size_cut', # 'acad_cut', # 'discrm_cut', # 'ses_cut'))) # # Balance Check # bal.tab.fb <- balanceMulti(match.fb, # student.cov = student.cov, # school.cov) ## ----match.fb2, eval=FALSE---------------------------------------------------- # match.fb2 <- rematchSchools(match.fb, # catholic_schools, # school.fb = list(c('acad_cut', # 'discrm_cut'), # c('size_cut', # 'acad_cut', # 'discrm_cut', # 'ses_cut'))) # # # bal.tab3 <- balanceMulti(match.fb2, # student.cov = student.cov, # school.cov) ## ----opt_subset, eval=FALSE--------------------------------------------------- # # Trim Schools # # How many treated schools are left after # # dropping single-gender schools? # length(table(catholic_schools$school[ # catholic_schools$sector==1])) # # match.fb4 <- rematchSchools(match.fb, # catholic_schools, # school.fb = list(c('acad_cut', # 'discrm_cut'), # c('size_cut', # 'acad_cut', # 'discrm_cut', # 'ses_cut')), # keep.target = 10, # tol = 0.1) # # bal.tab4 <- balanceMulti(match.fb4, # student.cov = student.cov, # school.cov = c(school.cov)) # ## ----hlm, eval=FALSE---------------------------------------------------------- # #Use an HLM for Outcome Analysis # match.data <- as.data.frame(match.fb4$matched) # head(match.data) # library(nlme) # out <- lme(mathach ~ sector, random = ~ 1 | # pair.id/school, data=match.data) # summary(out) # ## ----randinf, eval=FALSE------------------------------------------------------ # output.fb <- matchMultioutcome(match.fb4, out.name = "mathach", # schl_id_name = "school", # treat.name = "sector") ## ----sens1, eval=FALSE-------------------------------------------------------- # #Compare to Less Balanced Match # matchMultisens(match.fb4, out.name = "mathach", # schl_id_name = "school", # treat.name = "sector") ## ----sens2, eval=FALSE-------------------------------------------------------- # matchMultisens(match.fb, out.name = "mathach", # schl_id_name = "school", # treat.name = "sector") # ## ----sens3, eval=FALSE-------------------------------------------------------- # matchMultisens(match.fb, out.name = "mathach", # schl_id_name = "school", # treat.name = "sector", Gamma=2.17)