`updateSGP` <-
function(what_sgp_object=NULL,
with_sgp_data_LONG=NULL,
with_sgp_data_INSTRUCTOR_NUMBER=NULL,
state=NULL,
steps=c("prepareSGP", "analyzeSGP", "combineSGP", "summarizeSGP", "visualizeSGP", "outputSGP"),
years=NULL,
content_areas=NULL,
grades=NULL,
sgp.percentiles=TRUE,
sgp.projections=TRUE,
sgp.projections.lagged=TRUE,
sgp.percentiles.baseline=TRUE,
sgp.projections.baseline=TRUE,
sgp.projections.lagged.baseline=TRUE,
sgp.test.cohort.size=NULL,
return.sgp.test.results=FALSE,
simulate.sgps=TRUE,
save.old.summaries=NULL,
save.intermediate.results=TRUE,
calculate.simex=NULL,
calculate.simex.baseline=NULL,
sgp.use.my.coefficient.matrices=NULL,
sgp.target.scale.scores=FALSE,
sgp.target.scale.scores.only=FALSE,
overwrite.existing.data=TRUE,
update.old.data.with.new=TRUE,
output.updated.data=TRUE,
sgPlot.demo.report=TRUE,
plot.types=c("bubblePlot", "studentGrowthPlot", "growthAchievementPlot"),
outputSGP.output.type=c("LONG_Data", "LONG_FINAL_YEAR_Data", "WIDE_Data", "INSTRUCTOR_Data"),
outputSGP.directory="Data",
sgp.config=NULL,
goodness.of.fit.print=TRUE,
parallel.config=NULL,
sgp.sqlite=FALSE,
SGPt=NULL,
sgp.percentiles.equated=NULL,
sgp.percentiles.equating.method=NULL,
sgp.percentiles.calculate.sgps=TRUE,
fix.duplicates=NULL,
get.cohort.data.info=FALSE,
...) {
SGPstateData <- SGP::SGPstateData ### Needed due to possible assignment of values to SGPstateData
started.at <- proc.time()
messageSGP(paste("\nStarted updateSGP", prettyDate()), "\n")
messageSGP(match.call())
### Create state (if NULL) from sgp_object (if possible)
if (is.null(state)) {
tmp.name <- toupper(gsub("_", " ", deparse(substitute(what_sgp_object))))
state <- getStateAbbreviation(tmp.name, "updateSGP")
}
### Configure arguments
if (is.null(fix.duplicates) & !is.null(SGPstateData[[state]][["SGP_Configuration"]][["fix.duplicates"]])) {
fix.duplicates <- SGPstateData[[state]][["SGP_Configuration"]][["fix.duplicates"]]
}
if (!is.null(calculate.simex) | !is.null(calculate.simex.baseline)) {
if (is.null(SGPstateData[[state]][["Assessment_Program_Information"]][["CSEM"]])) {
messageSGP("\tNOTE: CSEMs are required in 'SGPstateData' (either as a data.frame of CSEMs or as a variable name of CSEMsin @Data) to produce SIMEX corrected SGPs. SIMEX corrected SGPs will NOT be calculated.")
calculate.simex <- calculate.simex.baseline <- NULL
}
}
if (identical(calculate.simex, TRUE)) {
## Enforce that simex.use.my.coefficient.matrices must be TRUE for updating COHORT SIMEX SGPs (ONLY WHEN USING PRE-EXISTING COEFFICIENT MATRICES)
if (is.character(csem.variable <- SGPstateData[[state]][["Assessment_Program_Information"]][["CSEM"]])) {
calculate.simex <- list(csem.data.vnames=csem.variable, lambda=seq(0,2,0.5), simulation.iterations=75, simex.sample.size=5000, extrapolation="linear", save.matrices=TRUE, simex.use.my.coefficient.matrices = sgp.use.my.coefficient.matrices)
} else calculate.simex <- list(state=state, lambda=seq(0,2,0.5), simulation.iterations=75, simex.sample.size=5000, extrapolation="linear", save.matrices=TRUE, simex.use.my.coefficient.matrices = sgp.use.my.coefficient.matrices)
}
if (identical(calculate.simex.baseline, TRUE)) {
## Enforce that simex.use.my.coefficient.matrices must be TRUE for updating BASELINE SIMEX SGPs
if (is.character(csem.variable <- SGPstateData[[state]][["Assessment_Program_Information"]][["CSEM"]])) {
calculate.simex.baseline <- list(csem.data.vnames=csem.variable, lambda=seq(0,2,0.5), simulation.iterations=75, simex.sample.size=5000, extrapolation="linear", save.matrices=TRUE, simex.use.my.coefficient.matrices = TRUE, use.cohort.for.ranking=TRUE)
} else calculate.simex.baseline <- list(state=state, lambda=seq(0,2,0.5), simulation.iterations=75, simex.sample.size=5000, extrapolation="linear", save.matrices=TRUE, simex.use.my.coefficient.matrices = TRUE, use.cohort.for.ranking=TRUE)
}
if (is.null(save.old.summaries) && overwrite.existing.data) save.old.summaries <- FALSE else save.old.summaries <- TRUE
### Utility functions
"%w/o%" <- function(x,y) x[!x %in% y]
### Argument checks
if (is.null(what_sgp_object)) {
stop("\tNOTE: Argument 'what_sgp_object' must be supplied to updateSGP (at a minimum). See man page for 'updateSGP' for details.")
}
if (is.null(with_sgp_data_LONG)) {
sgp.use.my.coefficient.matrices <- TRUE
}
if (identical(sgp.use.my.coefficient.matrices, FALSE)) {
sgp.use.my.coefficient.matrices <- NULL
}
matrix.names <- names(what_sgp_object@SGP[['Coefficient_Matrices']])
##############################################################################
### DOESN'T supply 'with_sgp_data_LONG'
##############################################################################
if (is.null(with_sgp_data_LONG)) {
tmp.years <- tmp.content_areas.years <- list()
if (is.null(content_areas)) {
content_areas <- sort(unique(sapply(strsplit(matrix.names, "[.]"), '[', 1)))
}
for (i in content_areas) {
tmp.content_area.matrix.names <- grep(i, matrix.names, value=TRUE)
tmp.years[[i]] <- sort(unique(sapply(strsplit(tmp.content_area.matrix.names, "[.]"), '[', 2))) %w/o% "BASELINE"
}
if (!is.null(years)) {
for (i in content_areas) {
tmp.years[[i]] <- intersect(tmp.years[[i]], years)
}
}
for (i in names(tmp.years)) {
tmp.content_areas.years[[i]] <- paste(i, tmp.years[[i]], sep=".")
}
tmp.content_areas.years <- as.character(unlist(tmp.content_areas.years))
### NULL out existing results to be re-calculated
what_sgp_object@SGP[['Goodness_of_Fit']][grep(paste(tmp.content_areas.years, collapse="|"), names(what_sgp_object@SGP[['Goodness_of_Fit']]))] <- NULL
what_sgp_object@SGP[['SGPercentiles']][grep(paste(tmp.content_areas.years, collapse="|"), names(what_sgp_object@SGP[['SGPercentiles']]))] <- NULL
what_sgp_object@SGP[['SGProjections']][grep(paste(tmp.content_areas.years, collapse="|"), names(what_sgp_object@SGP[['SGProjections']]))] <- NULL
what_sgp_object@SGP[['Simulated_SGPs']][grep(paste(tmp.content_areas.years, collapse="|"), names(what_sgp_object@SGP[['Simulated_SGPs']]))] <- NULL
### Add in INSTRUCTOR_NUMBER data is supplied
if (!is.null(with_sgp_data_INSTRUCTOR_NUMBER)) {
what_sgp_object@Data_Supplementary[['INSTRUCTOR_NUMBER']] <-
data.table(rbindlist(list(what_sgp_object@Data_Supplementary[['INSTRUCTOR_NUMBER']], with_sgp_data_INSTRUCTOR_NUMBER), fill=TRUE),
key=c("ID", "CONTENT_AREA", "YEAR"))
}
### Update results
sgp_object <- abcSGP(
sgp_object=what_sgp_object,
state=state,
steps=steps,
years=years,
content_areas=content_areas,
grades=grades,
sgp.percentiles=sgp.percentiles,
sgp.projections=sgp.projections,
sgp.projections.lagged=sgp.projections.lagged,
sgp.percentiles.baseline=sgp.percentiles.baseline,
sgp.projections.baseline=sgp.projections.baseline,
sgp.projections.lagged.baseline=sgp.projections.lagged.baseline,
save.intermediate.results=save.intermediate.results,
save.old.summaries=save.old.summaries,
sgPlot.demo.report=sgPlot.demo.report,
sgp.use.my.coefficient.matrices=sgp.use.my.coefficient.matrices,
calculate.simex = calculate.simex,
calculate.simex.baseline=calculate.simex.baseline,
sgp.test.cohort.size=sgp.test.cohort.size,
return.sgp.test.results=return.sgp.test.results,
simulate.sgps = simulate.sgps,
sgp.target.scale.scores=sgp.target.scale.scores,
sgp.target.scale.scores.only=sgp.target.scale.scores.only,
sgp.config=sgp.config,
plot.types=plot.types,
goodness.of.fit.print=goodness.of.fit.print,
outputSGP.output.type=outputSGP.output.type,
outputSGP.directory=outputSGP.directory,
SGPt=SGPt,
sgp.percentiles.equated=sgp.percentiles.equated,
sgp.percentiles.equating.method=sgp.percentiles.equating.method,
sgp.percentiles.calculate.sgps=sgp.percentiles.calculate.sgps,
parallel.config=parallel.config,
fix.duplicates=fix.duplicates,
get.cohort.data.info=get.cohort.data.info,
...
)
### Print finish and return SGP object
messageSGP(paste("Finished updateSGP", prettyDate(), "in", convertTime(timetakenSGP(started.at)), "\n"))
return(sgp_object)
} ### END is.null(with_sgp_data_LONG)
#############################################################################################
### DOES supply 'with_sgp_data_LONG'
#############################################################################################
if (!is.null(with_sgp_data_LONG)) {
HIGH_NEED_STATUS <- YEAR <- ID <- VALID_CASE <- CONTENT_AREA <- FIRST_OBSERVATION <- LAST_OBSERVATION <- NULL
tmp_sgp_object <- prepareSGP(with_sgp_data_LONG, state=state, create.additional.variables=FALSE, fix.duplicates=NULL)
if (!is.null(sgp.config)) years <- unique(sapply(lapply(sgp.config, '[[', 'sgp.panel.years'), tail, 1))
if (is.null(years)) update.years <- sort(unique(tmp_sgp_object@Data$YEAR)) else update.years <- years
if (is.null(content_areas)) update.content_areas <- sort(unique(tmp_sgp_object@Data["VALID_CASE"]$CONTENT_AREA)) else update.content_areas <- content_areas
if (is.null(grades)) update.grades <- sort(unique(tmp_sgp_object@Data["VALID_CASE"]$GRADE)) else update.grades <- grades
if (overwrite.existing.data) {
what_sgp_object@Data <- rbindlist(list(what_sgp_object@Data[!YEAR %in% update.years], tmp_sgp_object@Data), fill=TRUE)
what_sgp_object@SGP[['Goodness_of_Fit']][grep(update.years, names(what_sgp_object@SGP[['Goodness_of_Fit']]))] <- NULL
what_sgp_object@SGP[['Linkages']][grep(update.years, names(what_sgp_object@SGP[['Linkages']]))] <- NULL
what_sgp_object@SGP[['SGPercentiles']][grep(update.years, names(what_sgp_object@SGP[['SGPercentiles']]))] <- NULL
what_sgp_object@SGP[['SGProjections']][grep(update.years, names(what_sgp_object@SGP[['SGProjections']]))] <- NULL
what_sgp_object@SGP[['Simulated_SGPs']][grep(update.years, names(what_sgp_object@SGP[['Simulated_SGPs']]))] <- NULL
if (is.null(sgp.use.my.coefficient.matrices)) {
what_sgp_object@SGP[['Coefficient_Matrices']][grep(update.years, names(what_sgp_object@SGP[['Coefficient_Matrices']]))] <- NULL
}
if (!is.null(with_sgp_data_INSTRUCTOR_NUMBER)) {
what_sgp_object@Data_Supplementary[['INSTRUCTOR_NUMBER']] <- rbindlist(list(what_sgp_object@Data_Supplementary[['INSTRUCTOR_NUMBER']][which(YEAR!=update.years)], with_sgp_data_INSTRUCTOR_NUMBER), fill=TRUE)
}
if ("YEAR_WITHIN" %in% names(what_sgp_object@Data)) {
what_sgp_object@Data[, FIRST_OBSERVATION := NULL]
what_sgp_object@Data[, LAST_OBSERVATION := NULL]
what_sgp_object <- suppressMessages(prepareSGP(what_sgp_object, state=state, create.additional.variables=FALSE, fix.duplicates=fix.duplicates))
}
if ("HIGH_NEED_STATUS" %in% names(what_sgp_object@Data)) {
what_sgp_object@Data[, HIGH_NEED_STATUS := NULL]
what_sgp_object <- suppressMessages(prepareSGP(what_sgp_object, state=state, fix.duplicates=fix.duplicates))
}
what_sgp_object <- abcSGP(
what_sgp_object,
steps=steps,
years=update.years,
content_areas=update.content_areas,
grades=update.grades,
state=state,
sgp.percentiles=sgp.percentiles,
sgp.projections=sgp.projections,
sgp.projections.lagged=sgp.projections.lagged,
sgp.percentiles.baseline=sgp.percentiles.baseline,
sgp.projections.baseline=sgp.projections.baseline,
sgp.projections.lagged.baseline=sgp.projections.lagged.baseline,
save.intermediate.results=save.intermediate.results,
save.old.summaries=FALSE,
sgPlot.demo.report=sgPlot.demo.report,
sgp.use.my.coefficient.matrices=sgp.use.my.coefficient.matrices,
calculate.simex = calculate.simex,
calculate.simex.baseline=calculate.simex.baseline,
sgp.test.cohort.size=sgp.test.cohort.size,
return.sgp.test.results=return.sgp.test.results,
simulate.sgps = simulate.sgps,
sgp.target.scale.scores=sgp.target.scale.scores,
sgp.target.scale.scores.only=sgp.target.scale.scores.only,
sgp.config=sgp.config,
plot.types=plot.types,
goodness.of.fit.print=goodness.of.fit.print,
outputSGP.output.type=outputSGP.output.type,
outputSGP.directory=outputSGP.directory,
SGPt=SGPt,
sgp.percentiles.equated=sgp.percentiles.equated,
sgp.percentiles.equating.method=sgp.percentiles.equating.method,
sgp.percentiles.calculate.sgps=sgp.percentiles.calculate.sgps,
parallel.config=parallel.config,
fix.duplicates=fix.duplicates,
get.cohort.data.info=get.cohort.data.info,
...)
### Print finish and return SGP object
messageSGP(paste("Finished updateSGP", prettyDate(), "in", convertTime(timetakenSGP(started.at)), "\n"))
return(what_sgp_object)
} else { ### END if (overwrite.existing.data)
if (!is.null(sgp.use.my.coefficient.matrices)) {
# Extract score histories. Don't use CONTENT_AREA due to potential use of EOCT course progressions.
tmp.long.data <- rbindlist(list(data.table(what_sgp_object@Data[!YEAR %in% update.years], key=c("VALID_CASE", "ID"))[ # add update.years exclusion to avoid pulling in current year students from other content areas that are not being updated
unique(data.table(tmp_sgp_object@Data, key=c("VALID_CASE", "ID"))[,list(VALID_CASE, ID)], by=c("VALID_CASE", "ID")), nomatch=0], tmp_sgp_object@Data), fill=TRUE)
if ("YEAR_WITHIN" %in% names(tmp.long.data)) {
tmp.long.data[, FIRST_OBSERVATION := NULL]
tmp.long.data[, LAST_OBSERVATION := NULL]
}
tmp.sgp_object.update <- prepareSGP(tmp.long.data, state=state, create.additional.variables=FALSE, fix.duplicates=fix.duplicates)
tmp.sgp_object.update@SGP$Coefficient_Matrices <- what_sgp_object@SGP$Coefficient_Matrices
if (is.null(SGPstateData[[state]][["SGP_Configuration"]])) {
SGPstateData[[state]][["SGP_Configuration"]] <- list(return.prior.scale.score.standardized=FALSE)
} else SGPstateData[[state]][["SGP_Configuration"]][["return.prior.scale.score.standardized"]] <- FALSE
tmp.sgp_object.update <- analyzeSGP(
tmp.sgp_object.update,
years=update.years,
content_areas=update.content_areas,
grades=update.grades,
state=state,
sgp.percentiles=sgp.percentiles,
sgp.projections=sgp.projections,
sgp.projections.lagged=sgp.projections.lagged,
sgp.percentiles.baseline=sgp.percentiles.baseline,
sgp.projections.baseline=sgp.projections.baseline,
sgp.projections.lagged.baseline=sgp.projections.lagged.baseline,
sgp.use.my.coefficient.matrices=sgp.use.my.coefficient.matrices,
calculate.simex=calculate.simex,
calculate.simex.baseline=calculate.simex.baseline,
sgp.test.cohort.size=sgp.test.cohort.size,
return.sgp.test.results=return.sgp.test.results,
simulate.sgps=simulate.sgps,
sgp.config=sgp.config,
goodness.of.fit.print=FALSE,
sgp.sqlite=sgp.sqlite,
SGPt=SGPt,
sgp.percentiles.equated=sgp.percentiles.equated,
sgp.percentiles.equating.method=sgp.percentiles.equating.method,
sgp.percentiles.calculate.sgps=sgp.percentiles.calculate.sgps,
parallel.config=parallel.config,
fix.duplicates=fix.duplicates,
get.cohort.data.info=get.cohort.data.info,
...)
if ("combineSGP" %in% steps) {
tmp.sgp_object.update <- suppressMessages(combineSGP(tmp.sgp_object.update,
state=state,
sgp.percentiles=sgp.percentiles,
sgp.projections=sgp.projections,
sgp.projections.lagged=sgp.projections.lagged,
sgp.percentiles.baseline=sgp.percentiles.baseline,
sgp.projections.baseline=sgp.projections.baseline,
sgp.projections.lagged.baseline=sgp.projections.lagged.baseline,
sgp.target.scale.scores=sgp.target.scale.scores,
sgp.target.scale.scores.only=sgp.target.scale.scores.only,
SGPt=SGPt,
fix.duplicates=fix.duplicates,
parallel.config=parallel.config))
}
### Output of INTERMEDIATE results including full student history
if (output.updated.data) {
dir.create(file.path("Data", "Updated_Data"), recursive=TRUE, showWarnings=FALSE)
tmp.file.name <- paste(gsub(" ", "_", toupper(getStateAbbreviation(state, type="name"))), "SGP_Update", paste(update.years, collapse=","), sep="_")
assign(tmp.file.name, tmp.sgp_object.update)
save(list=tmp.file.name, file=file.path("Data", "Updated_Data", paste(tmp.file.name, "Rdata", sep=".")))
outputSGP(tmp.sgp_object.update, state=state, output.type=union(outputSGP.output.type, intersect(outputSGP.output.type, "LONG_FINAL_YEAR_Data")),
outputSGP.directory=file.path(outputSGP.directory, "Updated_Data"))
}
### Merge update with original SGP object
what_sgp_object@Data <- data.table(rbindlist(list(what_sgp_object@Data, tmp_sgp_object@Data), fill=TRUE), key=getKey(what_sgp_object))
if ("HIGH_NEED_STATUS" %in% names(what_sgp_object@Data)) {
what_sgp_object@Data[, HIGH_NEED_STATUS := NULL]
what_sgp_object <- suppressMessages(prepareSGP(what_sgp_object, state=state, fix.duplicates=fix.duplicates))
}
what_sgp_object@SGP <- mergeSGP(what_sgp_object@SGP, tmp.sgp_object.update@SGP)
### Filter out any exact duplicates in projections and percentiles (duplicates because score histories not subsetted based on CONTENT_AREA).
if (sgp.projections | sgp.projections.lagged | sgp.projections.baseline | sgp.projections.lagged.baseline) {
for (ca in grep(update.years, names(what_sgp_object@SGP[["SGProjections"]]), value=TRUE)) {
tmp_proj <- data.table(what_sgp_object@SGP[["SGProjections"]][[ca]])
setkey(tmp_proj)
what_sgp_object@SGP[["SGProjections"]][[ca]]<- tmp_proj[!duplicated(tmp_proj, by=key(tmp_proj))]
}
}
if (sgp.percentiles | sgp.percentiles.baseline) {
for (ca in grep(update.years, names(what_sgp_object@SGP[["SGPercentiles"]]), value=TRUE)) {
tmp_sgp <- data.table(what_sgp_object@SGP[["SGPercentiles"]][[ca]])
setkeyv(tmp_sgp, names(tmp_sgp)[grep("ID|SGP|SGP_NORM_GROUP", names(tmp_sgp))])
what_sgp_object@SGP[["SGPercentiles"]][[ca]] <- tmp_sgp[!duplicated(tmp_sgp, by=key(tmp_sgp))]
}
}
if ("combineSGP" %in% steps) {
what_sgp_object <- combineSGP(
what_sgp_object,
years=update.years,
state=state,
sgp.percentiles=sgp.percentiles,
sgp.projections=sgp.projections,
sgp.projections.lagged=sgp.projections.lagged,
sgp.percentiles.baseline=sgp.percentiles.baseline,
sgp.projections.baseline=sgp.projections.baseline,
sgp.projections.lagged.baseline=sgp.projections.lagged.baseline,
sgp.target.scale.scores=sgp.target.scale.scores,
sgp.target.scale.scores.only=sgp.target.scale.scores.only,
SGPt=SGPt,
fix.duplicates=fix.duplicates,
parallel.config=parallel.config)
}
### Add in INSTRUCTOR_NUMBER data for summarizeSGP if supplied
if (!is.null(with_sgp_data_INSTRUCTOR_NUMBER)) {
what_sgp_object@Data_Supplementary[['INSTRUCTOR_NUMBER']] <-
data.table(rbindlist(list(what_sgp_object@Data_Supplementary[['INSTRUCTOR_NUMBER']], with_sgp_data_INSTRUCTOR_NUMBER), fill=TRUE),
key=c("ID", "CONTENT_AREA", "YEAR"))
}
if ("summarizeSGP" %in% steps) what_sgp_object <- summarizeSGP(what_sgp_object, state=state, parallel.config=parallel.config)
if ("visualizeSGP" %in% steps) visualizeSGP(what_sgp_object, state=state, plot.types=plot.types, sgPlot.demo.report=sgPlot.demo.report)
if ("outputSGP" %in% steps) outputSGP(what_sgp_object, state=state, output.type=outputSGP.output.type, outputSGP.directory=outputSGP.directory)
### Re-establish FIRST_ & LAST_OBSERVATION variables
if ("YEAR_WITHIN" %in% names(what_sgp_object@Data)) {
what_sgp_object@Data[, LAST_OBSERVATION := NULL]
what_sgp_object@Data[, FIRST_OBSERVATION := NULL]
what_sgp_object <- suppressMessages(prepareSGP(what_sgp_object, state=state, create.additional.variables=FALSE, fix.duplicates=fix.duplicates))
}
### Print finish and return SGP object
messageSGP(paste("Finished updateSGP", prettyDate(), "in", convertTime(timetakenSGP(started.at)), "\n"))
return(what_sgp_object)
} else {
if (update.old.data.with.new) {
what_sgp_object@Data <- data.table(rbindlist(list(what_sgp_object@Data, tmp_sgp_object@Data), fill=TRUE), key=getKey(what_sgp_object))
} else {
what_sgp_object@Data <- data.table(rbindlist(list(what_sgp_object@Data[which(ID %in% tmp_sgp_object@Data$ID)], tmp_sgp_object@Data), fill=TRUE),
key=getKey(what_sgp_object))
}
### Re-establish FIRST_ & LAST_OBSERVATION variables
if ("YEAR_WITHIN" %in% names(what_sgp_object@Data)) {
what_sgp_object@Data[, LAST_OBSERVATION := NULL]
what_sgp_object@Data[, FIRST_OBSERVATION := NULL]
}
### prepareSGP
if ("HIGH_NEED_STATUS" %in% names(what_sgp_object@Data)) {
what_sgp_object@Data[, HIGH_NEED_STATUS := NULL]
what_sgp_object <- prepareSGP(what_sgp_object, state=state, fix.duplicates=fix.duplicates)
} else {
what_sgp_object <- prepareSGP(what_sgp_object, state=state, create.additional.variables=FALSE, fix.duplicates=fix.duplicates)
}
### Add in INSTRUCTOR_NUMBER data for summarizeSGP if supplied
if (!is.null(with_sgp_data_INSTRUCTOR_NUMBER)) {
what_sgp_object@Data_Supplementary[['INSTRUCTOR_NUMBER']] <-
data.table(rbindlist(list(what_sgp_object@Data_Supplementary[['INSTRUCTOR_NUMBER']], with_sgp_data_INSTRUCTOR_NUMBER), fill=TRUE),
key=c("ID", "CONTENT_AREA", "YEAR"))
}
### abcSGP
what_sgp_object <- abcSGP(
what_sgp_object,
steps=(steps %w/o% "prepareSGP"),
years=update.years,
content_areas=update.content_areas,
grades=update.grades,
state=state,
sgp.percentiles=sgp.percentiles,
sgp.projections=sgp.projections,
sgp.projections.lagged=sgp.projections.lagged,
sgp.percentiles.baseline=sgp.percentiles.baseline,
sgp.projections.baseline=sgp.projections.baseline,
sgp.projections.lagged.baseline=sgp.projections.lagged.baseline,
save.intermediate.results=save.intermediate.results,
save.old.summaries=save.old.summaries,
sgPlot.demo.report=sgPlot.demo.report,
sgp.use.my.coefficient.matrices=sgp.use.my.coefficient.matrices,
calculate.simex = calculate.simex,
calculate.simex.baseline=calculate.simex.baseline,
sgp.test.cohort.size=sgp.test.cohort.size,
return.sgp.test.results=return.sgp.test.results,
simulate.sgps = simulate.sgps,
sgp.target.scale.scores=sgp.target.scale.scores,
sgp.target.scale.scores.only=sgp.target.scale.scores.only,
sgp.config=sgp.config,
plot.types=plot.types,
goodness.of.fit.print=goodness.of.fit.print,
outputSGP.output.type=outputSGP.output.type,
outputSGP.directory=outputSGP.directory,
SGPt=SGPt,
sgp.percentiles.equated=sgp.percentiles.equated,
sgp.percentiles.equating.method=sgp.percentiles.equating.method,
sgp.percentiles.calculate.sgps=sgp.percentiles.calculate.sgps,
parallel.config=parallel.config,
fix.duplicates=fix.duplicates,
get.cohort.data.info=get.cohort.data.info,
...)
### Print finish and return SGP object
messageSGP(paste("Finished updateSGP", prettyDate(), "in", convertTime(timetakenSGP(started.at)), "\n"))
return(what_sgp_object)
} ### END if else (!is.null(sgp.use.my.coefficient.matrices))
} ### END if (overwrite.existing.data)
} ### END !is.null(with_sgp_data_LONG)
} ## END updateSGP Function
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.