Function to calculate percentile growth projections/trajectories using large scale assessment data and results derived from student growth percentile calculation. Function can produce percentile growth trajectories, as well as growth percentiles, sufficient for each student to reach a set of predefined scale score cut.

studentGrowthProjections(panel.data, sgp.labels, grade.progression, content_area.progression=NULL, year_lags.progression=NULL, grade.projection.sequence=NULL, content_area.projection.sequence=NULL, year_lags.projection.sequence=NULL, max.forward.progression.years=NULL, max.forward.progression.grade=NULL, max.order.for.progression, use.my.knots.boundaries, use.my.coefficient.matrices, panel.data.vnames, achievement.level.prior.vname=NULL, performance.level.cutscores, calculate.sgps=TRUE, convert.0and100=TRUE, trajectories.chunk.size=50000L, sgp.projections.equated=NULL, projection.unit="YEAR", projection.unit.label=NULL, percentile.trajectory.values=NULL, return.percentile.trajectory.values=NULL, return.projection.group.identifier=NULL, return.projection.group.scale.scores=NULL, return.projection.group.dates=NULL, isotonize=TRUE, lag.increment=0L, sgp.exact.grade.progression=FALSE, projcuts.digits=NULL, sgp.projections.use.only.complete.matrices=NULL, SGPt=NULL, print.time.taken=TRUE)

panel.data | Object of class |
---|---|

sgp.labels | REQUIRED. A list, |

grade.progression | REQUIRED. Argument to specify a student grade/time progression in the data to be used for percentile growth projection/trajectory calculation.
This argument helps in replacing previous arguments |

content_area.progression | Argument to specify a student content area progression in the data supplied for percentile growth projection/trajectory calculation. Defaults to NULL and is calculated from supplied argument 'sgp.labels'. |

year_lags.progression | Argument to specify a student year progression lags in the data supplied for percentile growth projection/trajectory calculation. Defaults to NULL assuming annual increment calculated from supplied argument 'sgp.labels' and 'grade.progression'. |

grade.projection.sequence | Argument to manually supply grade sequence over which projection is made. Defaults to NULL and is calculated from available data. |

content_area.projection.sequence | Argument to manually supply content area sequence over which projection is made. Defaults to NULL and assumes current year content area is repeated going forward. |

year_lags.projection.sequence | Argument to manually supply year lags sequence over which projection is made. Length of supplied sequence should be 1 less than length of supplied 'grade.projection.sequence' and 'content_area.projection.sequence'. Defaults to NULL and assumes annual (1 year lags). |

max.forward.progression.years | The MAXIMUM number of years/grades/time periods to project forward conditional upon available coefficient matrices. If missing/NULL (the default), function will project forward as far as allowed by available coefficient matrices. |

max.forward.progression.grade | The MAXIMUM grade to project forward based upon available coefficient matrices. If missing/NULL (the default), function will project forward as far as allowed by available coefficient matrices. |

max.order.for.progression | Argument to specify the maximum coefficient matrix order to be used for percentile growth projection/trajectory calculation. If missing, the function utilizes the highest matrix order available. |

use.my.knots.boundaries | A list of the form |

use.my.coefficient.matrices | A list of the form |

panel.data.vnames | Vector of variables to use in percentile growth projection/trajectory calculations. If not specified, function attempts to use all available variables. |

achievement.level.prior.vname | Character vector indicating variable is supplied panel data corresponding to the prior achievement level to be added to the output. Used in the production of growth to standard analyses. |

performance.level.cutscores | Argument for supplying performance level cutscores to be used for determining growth-to-standard percentile growth trajectory calculations. Argument accepts a two letter state acronym (e.g., "CO") that retrieves cutscores that are automatically embedded in a data set contained in the SGP package. Argument also accepts a subject specific list of the form: performance.level.cutscores <- list( Reading=list(GRADE_3=c(cut1, cut2, cut3), GRADE_4=c(cut1, cut2, cut3), . . . GRADE_8=c(cut1, cut2, cut3)), Math=list(GRADE_3=c(cut1, cut2, cut3), . . . GRADE_7=c(cut1, cut2, cut3), GRADE_8=c(cut1, cut2, cut3))) Note that the subject name must match that provided by |

calculate.sgps | Boolean argument (defaults to TRUE) indicating whether to calculate student growth projections. Currently used to bypass calculations in |

convert.0and100 | Boolean argument (defaults to TRUE) indicating whether conversion of growth percentiles of 0 and 100 to growth percentiles of 1 and 99, respectively, occurs. The default produces growth percentiles ranging from 1 to 99. |

trajectories.chunk.size | To enhance speed, large data sets are broken up into smaller data sets before trajectories and cuts are calculated. The default chunk.size is 50,000 and is utilized
when data sets of over 150 percent of the |

sgp.projections.equated | A list (defaults to NULL) specifying the Year and Linkages associated with the equating used for projection purposes. |

projection.unit | Argument specifying the units in which the projections/trajectories and cuts are reported. Either |

projection.unit.label | Argument specifying the label associated with the units in which the projections/trajectories and cuts are reported. Defaults to NULL utilizing the value associated
with the argument supplied to |

percentile.trajectory.values | An integer argument with values ranging from 1 to 100 that returns a vector of percentile trajectory cuts (default is NULL, no percentile trajectory values returned). The returned values are the lower bound for the interval associated with the percentile(s) requested. For example, by specifying 'percentile.trajectory.values=1' the user would receive the conditional .005 quantile associated with each student's distribution. Supplied values can also be a vector of targets that will return Scale Scores associated with those targets. |

return.percentile.trajectory.values | A Boolean variable indicating whether to return the percentile trajectory values when they are supplied as targets via panel.data. Default is NULL/FALSE. |

return.projection.group.identifier | A Boolean variable indicating whether to return the projection group identifier to distinguish different projection trajectories. Defaults to NULL/FALSE. |

return.projection.group.scale.scores | A Boolean variable indicating whether to return the projection group scale scores for each student. Defaults to NULL/FALSE. |

return.projection.group.dates | A Boolean variable indicating whether to return the projection group dates associated with the students' scale scores. Defaults to NULL/FALSE. |

isotonize | Boolean argument (defaults to TRUE) indicating whether quantile regression results are isotonized to prevent quantile crossing following the methods derived by Chernozhukov, Fernandez-Val and Glichon (2010). |

lag.increment | A non-negative integer (defaults to 0) indicating the lag associated with the data supplied for projections. Only relevant if Cutscores or Knots and Boundaries are year dependent. |

sgp.exact.grade.progression | A Boolean argument (defaults to FALSE) indicating whether to use the exact grade progression supplied or all orders up to the grade progression supplied. |

projcuts.digits | The number of digits (defaults to NULL/0) percentile trajectories (if requested) are formatted. |

sgp.projections.use.only.complete.matrices | A Boolean argument (defaults to TRUE) indicating whether projections should be
calculated even when all matrices are not available for the given |

SGPt | Character vector indicating the name of the 'DATE' variable to be used for time dependent student growth projection calculations. Defaults to NULL, non-time-dependent SGP calculations. |

print.time.taken | Boolean argument (defaults to TRUE) indicating whether to print message indicating information on |

Function returns the input `panel.data`

list object with the additional percentile growth trajectories/percentiles stored in
`panel.data$SGProjections$my.year.my.subject`

consisting of student IDs and the associated percentile growth projections/trajectories and cuts.
The data frame contains projections/trajectories for each performance level cut-point supplied and each percentile cut the user specifies.

Betebenner, D. W. (2008). Toward a normative understanding of student growth. In K. E. Ryan &
L. A. Shepard (Eds.), *The Future of Test Based Accountability* (pp. 155-170). New York: Routledge.

Betebenner, D. W. (2009). Norm- and criterion-referenced student growth. Educational Measurement: Issues and Practice, 28(4):42-51.

Betebenner, D. W. (2012). Growth, standards, and accountability. In G. J. Cizek,
*Setting Performance Standards: Foundations, Methods & Innovations. 2nd Edition* (pp. 439-450).
New York: Routledge.

Chernozhukov, V., Fernandez-Val, I. and Galichon, A. (2010), Quantile and Probability Curves Without Crossing. Econometrica, 78: 1093-1125.

Use of this function assumes prior calculation of student growth percentiles, making the coefficient matrices available within the `panel.data$Coefficient_Matrices`

list object. Additionally, if cutscores are desired they must be supplied explicitly by the user (as detailed above in
`performance.level.cutscores`

) or included in the `SGPstateData`

data set. If your state's cutscores are not included or are incorrect, please contact [email protected] to have cutscores added or corrected!

`studentGrowthPercentiles`

, `sgpData`

not_run({ ## First calculate SGPs for 2014 my.grade.sequences <- list(3:4, 3:5, 3:6, 3:7, 4:8) my.sgpData <- list(Panel_Data = sgpData) for (i in seq_along(my.grade.sequences)) { my.sgpData <- studentGrowthPercentiles(panel.data=my.sgpData, sgp.labels=list(my.year=2014, my.subject="Reading"), use.my.knots.boundaries="DEMO", grade.progression=my.grade.sequences[[i]]) } ## Calculate Growth Projections my.grade.progressions <- list(3, 3:4, 3:5, 3:6, 4:7) for (i in seq_along(my.grade.progressions)) { my.sgpData <- studentGrowthProjections(panel.data=my.sgpData, sgp.labels=list(my.year=2014, my.subject="Reading"), projcuts.digits=0, projection.unit="GRADE", performance.level.cutscores="DEMO", percentile.trajectory.values=c(25, 50, 75), grade.progression=my.grade.progressions[[i]]) } ## Save the Student Growth Projections Results to a .csv file: write.csv(my.sgpData$SGProjections$READING.2014, file= "2014_Reading_SGProjections.csv", row.names=FALSE, quote=FALSE) })