Skip to content

Instantly share code, notes, and snippets.

@dbetebenner
Created September 17, 2021 03:57
Show Gist options
  • Save dbetebenner/0bd0bb771a4c19091275602153936dc7 to your computer and use it in GitHub Desktop.
Save dbetebenner/0bd0bb771a4c19091275602153936dc7 to your computer and use it in GitHub Desktop.
R script using multiple imputation to create percent proficient summaries for grade x school combinations for Rhode Island
###################################################################################
###
### Function to create imputations for percent Proficient
### by school/grade/content area
###
###################################################################################
### Load packages
require(data.table)
require(SGP)
### Utility Functions
percent_proficient <- function(achievement_level) {
tmp.table <- table(achievement_level)
round(100*sum(tmp.table[c("Meeting Expectations", "Exceeding Expectations")], na.rm=TRUE)/sum(tmp.table, na.rm=TRUE), digits=1)
}
### Load data
load("/Users/conet/Dropbox (SGP)/State_Alt_Analyses/Rhode_Island/Learning_Loss_Analysis/Data/Imputation/Rhode_Island_SGP_Data_Imputed.rda")
### Create LONG data file based upon 30 imputations
meas.list <- vector(mode = "list", length = 3)
meas.list[["SCALE_SCORE_IMPUTED"]] <- grep("SCALE_SCORE_IMPUTED", names(Rhode_Island_SGP_Data_Imputed), value = TRUE)
meas.list[["SGP_IMPUTED"]] <- grep("SGP_IMPUTED", names(Rhode_Island_SGP_Data_Imputed), value = TRUE)
meas.list[["SGP_BASELINE_IMPUTED"]] <- grep("SGP_BASELINE_IMPUTED", names(Rhode_Island_SGP_Data_Imputed), value = TRUE)
id.vars <- c("ID", "CONTENT_AREA", "GRADE", "SCHOOL_NUMBER", "SCALE_SCORE_OBSERVED", "SGP_OBSERVED", "SGP_BASELINE_OBSERVED")
tmp.vars <- c(id.vars, meas.list[["SCALE_SCORE_IMPUTED"]], meas.list[["SGP_IMPUTED"]], meas.list[["SGP_BASELINE_IMPUTED"]])
tmp_wide <- Rhode_Island_SGP_Data_Imputed[, ..tmp.vars]
Rhode_Island_SGP_Data_Imputed_LONG <- melt(tmp_wide, id = id.vars, variable.name = "IMP", measure=meas.list[lengths(meas.list) != 0])
Rhode_Island_SGP_Data_Imputed_LONG[,VALID_CASE:="VALID_CASE"][,YEAR:="2020_2021"]
### Create ACHIEVEMENT_LEVEL variable
Rhode_Island_SGP_Data_Imputed_LONG <- SGP:::getAchievementLevel(
sgp_data=Rhode_Island_SGP_Data_Imputed_LONG,
state="RI",
year="2020_2021",
content_area=c("ELA", "MATHEMATICS"),
grade=as.character(3:8),
achievement.level.name="ACHIEVEMENT_LEVEL_OBSERVED",
scale.score.name="SCALE_SCORE_OBSERVED"
)
Rhode_Island_SGP_Data_Imputed_LONG <- SGP:::getAchievementLevel(
sgp_data=Rhode_Island_SGP_Data_Imputed_LONG,
state="RI",
year="2020_2021",
content_area=c("ELA", "MATHEMATICS"),
grade=as.character(3:8),
achievement.level.name="ACHIEVEMENT_LEVEL_IMPUTED",
scale.score.name="SCALE_SCORE_IMPUTED"
)
Rhode_Island_SGP_Data_Imputed_LONG[,ACHIEVEMENT_LEVEL_HOSS:=ACHIEVEMENT_LEVEL_OBSERVED]
Rhode_Island_SGP_Data_Imputed_LONG[is.na(ACHIEVEMENT_LEVEL_OBSERVED) & !is.na(ACHIEVEMENT_LEVEL_IMPUTED), ACHIEVEMENT_LEVEL_HOSS:="Exceeding Expectations"]
Rhode_Island_SGP_Data_Imputed_LONG[,ACHIEVEMENT_LEVEL_LOSS:=ACHIEVEMENT_LEVEL_OBSERVED]
Rhode_Island_SGP_Data_Imputed_LONG[is.na(ACHIEVEMENT_LEVEL_OBSERVED) & !is.na(ACHIEVEMENT_LEVEL_IMPUTED), ACHIEVEMENT_LEVEL_LOSS:="Not Meeting Expectations"]
### Create summaries
Rhode_Island_Summaries_by_Imputation <- Rhode_Island_SGP_Data_Imputed_LONG[VALID_CASE=="VALID_CASE",
list(PERCENT_PROFICIENT_OBSERVED=percent_proficient(ACHIEVEMENT_LEVEL_OBSERVED),
PERCENT_PROFICIENT_LOSS=percent_proficient(ACHIEVEMENT_LEVEL_LOSS),
PERCENT_PROFICIENT_HOSS=percent_proficient(ACHIEVEMENT_LEVEL_HOSS),
PERCENT_PROFICIENT_IMPUTED=percent_proficient(ACHIEVEMENT_LEVEL_IMPUTED),
COUNT_OBSERVED=sum(!is.na(ACHIEVEMENT_LEVEL_OBSERVED)),
COUNT_IMPUTED=sum(!is.na(ACHIEVEMENT_LEVEL_IMPUTED))),
keyby=c("SCHOOL_NUMBER", "CONTENT_AREA", "GRADE", "IMP")]
Rhode_Island_Summaries <- Rhode_Island_Summaries_by_Imputation[,
list(PERCENT_PROFICIENT_OBSERVED=PERCENT_PROFICIENT_OBSERVED[1],
PERCENT_PROFICIENT_LOSS=PERCENT_PROFICIENT_LOSS[1],
PERCENT_PROFICIENT_HOSS=PERCENT_PROFICIENT_HOSS[1],
MEAN_PERCENT_PROFICIENT_IMPUTED=mean(PERCENT_PROFICIENT_IMPUTED, na.rm=TRUE),
MEDIAN_PERCENT_PROFICIENT_IMPUTED=median(PERCENT_PROFICIENT_IMPUTED, na.rm=TRUE),
MIN_PERCENT_PROFICIENT_IMPUTED=min(PERCENT_PROFICIENT_IMPUTED, na.rm=TRUE),
MAX_PERCENT_PROFICIENT_IMPUTED=max(PERCENT_PROFICIENT_IMPUTED),
SD_PERCENT_PROFICIENT_IMPUTED=sd(PERCENT_PROFICIENT_IMPUTED, na.rm=TRUE),
MEAN_DIFF_OBSERVED_IMPUTED=mean(PERCENT_PROFICIENT_IMPUTED, na.rm=TRUE)-PERCENT_PROFICIENT_OBSERVED[1],
COUNT_OBSERVED=COUNT_OBSERVED[1],
COUNT_IMPUTED=COUNT_IMPUTED[1],
PARTICIPATION_RATE=100*COUNT_OBSERVED[1]/COUNT_IMPUTED[1]),
keyby=c("SCHOOL_NUMBER", "CONTENT_AREA", "GRADE")][strtail(SCHOOL_NUMBER, 3)!="190"]
### Save Data
save(Rhode_Island_Summaries, file="Data/Rhode_Island_Summaries.Rdata")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment