Learn R Programming

equate (version 2.0-3)

equate: Observed Score Linking and Equating

Description

This function links the scale of x to the scale of y for the single-group, equivalent-groups, and nonequivalent-groups with anchor test designs.

Usage

## S3 method for class 'default':
equate(x, y, ...)

## S3 method for class 'freqtab': equate(x, y, type = c("identity", "mean", "linear", "general linear", "circle-arc", "equipercentile"), method = c("none", "nominal weights", "tucker", "levine", "frequency estimation", "chained", "braun/holland"), name, lowp, highp, boot = FALSE, verbose = TRUE, ...)

## S3 method for class 'list': equate(x, args, ...)

Arguments

x, y
for the default method, x must be a vector of scores and y an object of class equate, the output of a previous equating. The standard usage is to provide x as a frequency table of class
type
the type of equating. See below for details.
method
the equating method, where "none" (default) indicates equating under the single-group or equivalent-groups design, and "nominal weights", "tucker", "levine", "frequency estimation", "b
name
an optional name, used to label the output. If missing, a name will be created using type and method.
lowp, highp
two vectors, each of length 2, specifying the coordinates for the low and high points of the X and Y scales. lowp defaults to the minimums and highp the maximums of the scales. Recycled if necessary. When lowp = "obs"
boot
logical indicating whether or not bootstrapping should be performed. Default is FALSE. See below and the bootstrap function for details.
verbose
logical, with default TRUE, indicating whether or not full output should be returned. When FALSE, only the equated scores are returned.
args
list of arguments passed to equate. See below for details.
...
further arguments passed to or from other functions, including arguments specific to different equating methods. See below for details.

Value

  • When y contains output from an equating, a vector of equated scores is returned. Otherwise, an object of class equate is returned, listing the following components, some of which are dependent on the equating type, method, and smoothing:
  • namename for the equating
  • typeequating type
  • methodequating method
  • designequating design, inferred from the method
  • x, yoriginal frequency tables for X and Y
  • concordanceconversion table containing scores on X with their form Y equivalents.
  • pointslow and high points defining the identity line, and midpoints for general linear and circle-arc equating
  • weightweights used in general linear equating
  • internal, lts, jmin, degree, xdegree, scorefunadditional arguments, as supplied in ...
  • coefficientsconversion coefficients intercept and slope; for circle-arc equating, circle center points and radius are also included; for general linear equating, slope and intercept components are included
  • wsweight applied to X in synthetic estimation
  • synthstatsmeans and standard deviations for the synthetic distributions
  • xsynthetic, ysyntheticfrequency tables for the synthetic distributions
  • smoothmethodsmoothing method
  • xsmooth, ysmoothsmoothed frequency tables for X and Y
  • bootstrapslist of bootstrap standard errors, and, optionally, bias and RMSE

Details

Equating is typically performed on two frequency tables, x and y. In this case, the scores from both are used to define the equating function that links the scale of x to y. The equivalent-groups design is assumed when x and y are separate, univariate frequency tables. The nonequivalent-groups design is assumed when a method is specified, and x and y are separate multivariate frequency tables. Finally, a single-group design is assumed when x is a bivariate frequency table (containing scores on X and Y) and y is missing.

The single-group design currently only differs from the equivalent groups design in that presmoothing can be used to preserve bivariate moments for x and y in the single-group design, whereas in the equivalent-groups design, with x and y specified separately, presmoothing is performed separately. If presmoothing is not performed via equate, the single-group and equivalent-groups designs produce the same result.

When x is a vector of scores and equating output is supplied for y, no other arguments are required. Scores from x are converted directly to the scale indicated in y. If y is a composite equating, composite equated scores will be returned based on the weighted combination of equating functions included in y.

When x is a list of frequency tables, each element in args must be a named list of equating arguments. In this case, the length of args corresponds to the number of equatings that will be performed. The arguments for each equating are specified as they would be when x and y are frequency tables, except for x and y; the frequency tables to be equated are specified in args by referencing their names in the list of frequency tables. See below for examples. Six equating types are currently supported: identity, mean, linear, and equipercentile, as described by Kolen and Brennan (2004); circle-arc equating, as described by Livingston and Kim (2009); and a general linear function that extends the traditional identity, mean, and linear types. Corresponding linking methods are also supported. The equating design is implied by the method argument, where "none" (default) indicates that no method is needed (because examinees taking forms X and Y are assumed to be the same or equivalent). The nominal weights, Tucker, Levine observed score, Levine true score, frequency estimation, Braun/Holland, and chained equating methods are supported for the nonequivalent-groups with anchor test design. All but the Levine true score and chained method rely on a synthetic distribution of scores (Braun and Holland, 1982), a weighted combination of x and y. Depending on the equating method, the following additional arguments may be required: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] General linear equating is a new approach to estimating a linear linking or equating function. The slope and intercept of the line are estimated based on multiple sources of information, including the means and standard deviations of X and Y, and other values supplied through cx and cy, representing the centrality of X and Y, and sx and sy, representing the scaling or variability of X and Y. The weights wax and way specify the proportional weighting given to the standard deviations of X and Y, and indirectly the weighting given to sx and sy, in determining the slope. wbx and wby specify the proportional weighting given to the means of X and Y, and indirectly the weighting given to cx and cy, in determining the intercept. Synthetic means and standard deviations will be used when appropriate. Chained general linear equating is not currently supported.

For equipercentile equating under the random groups design, three smoothing options are available: smoothmethod = "average" and smoothmethod = "bump" require the additional argument jmin, and loglinear smoothing (smoothmethod = "loglinear") requires either a score function or maximum polynomial terms. For frequency estimation and chained methods, only smoothing methods "bump" and "loglinear" are supported. See the presmoothing function for details and examples. In equipercentile equating, the high point for y, i.e., highp[2], is used to obtain form Y equivalents of form X scores with percentile ranks of 100. Typically this is set to be the number of score points in the form Y scale, which assumes that scores are integers ranging from 1 (or 0) to the total number of items, and that each item is scored correct/incorrect. Scores on other scales (such as scales which include negative values, or which exclude zero) may also be used. In such cases highp[2] can be set to the highest possible score on form Y, or alternatively the highest observed score on Y.

lowp and highp are used to define the slope and intercept of the identity linking function. When the score scales for X and Y are equivalent, the identity function is simply the unequated X scale; however, when forms differ in their scales, e.g., because of changes in content or length, the identity linking function will map X onto Y based on the low and high coordinates.

The simplified approach to circle-arc equating, as demonstrated by Livingston and Kim (2009), involves combining a circle-arc with the identity function. When the low and high scores differ for the X and Y scales, this becomes the identity linking function. The linear component can be omitted, and symmetric circle-arc equating used, with simple = FALSE. The result is an equating function based only on the circle-arc that passes through the points lowp, highp, and the estimated midpoint. Analytical standard errors are not currently returned. With boot = TRUE, bootstrap standard errors are estimated using a default of reps = 100 replications, sampling the maximum amount from each score distribution (controlled by the arguments xn and yn). See bootstrap for details and examples, including how to obtain bootstrap bias and RMSE.

References

Kolen, M. J., and Brennan, R. L. (2004). Test Equating, Scaling, and Linking. (2nd ed.), New York: Springer. Livingston, S. A., and Kim, S. (2009). The circle-arc method for equating in small samples, Journal of Educational Measurement, 46, 330--343.

See Also

freqbump, freqavg, loglinear, bootstrap

Examples

Run this code
# See vignette("equatevignette") for a description of methods
# and additional examples

# Random groups equating for (1) identity, (2) mean, 
# (3) linear, (4) equipercentile with loglinear
# smoothing, and (5) a composite of mean and identity
rx <- as.freqtab(ACTmath[, 1:2])
ry <- as.freqtab(ACTmath[, c(1, 3)])
set.seed(2007)

req1 <- equate(rx, ry, type = "i", boot = TRUE, reps = 5)
req2 <- equate(rx, ry, type = "m", boot = TRUE, reps = 5)
req3 <- equate(rx, ry, type = "l", boot = TRUE, reps = 5)
req4 <- equate(rx, ry, type = "e", boot = TRUE, reps = 5,
  smooth = "loglin", degree = 3)
req5 <- composite(list(req1, req2), wc = .5, symmetric = TRUE)

# Compare equating functions
plot(req1, req2, req3, req4, req5[[1]], addident = FALSE)

# Compare boostrap standard errors
# Bootstrapping isn't supported for composite equating
plot(req1, req2, req3, req4, addident = FALSE, out = "se",
  legendplace = "topleft")

# Nonequivalent groups design for (1) Tucker linear,
# (2) frequency estimation , and (3) Braun/Holland linear
nx <- freqtab(KBneat$x, scales = list(0:36, 0 :12))
ny <- freqtab(KBneat$y, scales = list(0:36, 0 :12))

neq1 <- equate(nx, ny, type = "linear", method = "tuck", ws = 1)
neq2 <- equate(nx, ny, type = "equip", method = "freq", ws = 1)
neq3 <- equate(nx, ny, type = "linear", method = "braun", ws = 1)

# Compare equated scores
round(cbind(xscale = 0:36, tucker = neq1$conc$yx,
	fe = neq2$conc$yx, braun = neq3$conc$yx), 2)

# Multiple linkings using PISA reading booklet 6
# clusters 3a, 5, 6, and 7
r3 <- freqtab(PISA$totals$b6$r3a, scales = 0:15)
r5 <- freqtab(PISA$totals$b6$r5, scales = 0:15)
r6 <- freqtab(PISA$totals$b6$r6, scales = 0:15)
r7 <- freqtab(PISA$totals$b6$r7, scales = 0:14)
eqargs <- list(r3r5 = list(type = "linear", x = "r3", y = "r5",
    name = "Linear Linking PISA r3 to r5"),
  r5r6 = list(type = "linear", x = "r5", y = "r6",
    name = "Linear Linking PISA r5 to r6"),
  r6r7 = list(type = "linear", x = "r6", y = "r7",
    name = "Linear Linking PISA r5 to r7"))
req <- equate(list(r3 = r3, r5 = r5, r6 = r6, r7 = r7), eqargs)

# Put PISA r3 on the scale of r7 using the linking chain
# Compare to a direct linking of r3 to r7
equate(equate(req$r3r5$conc$yx, req$r5r6), req$r6r7)
equate(r3, r7, "linear")$conc$yx

# Linking PISA cluster r3a to r5 with multiple anchors
m367 <- freqtab(PISA$totals$b6[1:198, c("r3a", "r6", "r7")],
	scales = list(0:15, 0:16, 0:14))
m567 <- freqtab(PISA$totals$b6[199:396, c("r5", "r6", "r7")],
	scales = list(0:15, 0:16, 0:14))
meq1 <- equate(m367, m567, type = "mean", method = "nom")
meq2 <- equate(m367, m567, type = "mean", method = "tuck")
meq3 <- equate(m367, m567, type = "lin", method = "tuck")
meq4 <- equate(m367, m567, type = "equip", method = "freq",
	smooth = "log", show = FALSE)
meq <- equate(m367, m567, type = "mean", method = "nom")
plot(meq1, meq2, meq3, meq4, meq, req[[1]])

Run the code above in your browser using DataLab