cNORM

cNORM (W. Lenhard, Lenhard & Gary) is a package for the R environment for statistical computing that aims at generating continuous test norms in psychometrics and biometrics and to analyze the model fit. Originally, cNorm exclusively used an approach that makes no assumptions about the specific distribution of the raw data (A. Lenhard, Lenhard, Suggate & Segerer, 2016). Since version 3.2 (2024), however, the package also offers the option of parametric modeling using the beta-binomial distribution.

cNORM was developed specifically for achievement tests (e.g. vocabulary development: A. Lenhard, Lenhard, Segerer & Suggate, 2015; written language acquisition: W. Lenhard, Lenhard & Schneider, 2017). However, the package can be used wherever mental (e.g. reaction time), physical (e.g. body weight) or other test scores depend on continuous (e.g. age, duration of schooling) or discrete explanatory variables (e.g. sex, test form). In addition, the package can also be used for “conventional” norming based on individual groups, i.e. without including explanatory variables.

The package estimates percentiles as a function of the explanatory variable. This is done either parametrically on the basis of the beta-binomial distribution or distribution-free using Taylor polynomials. For an in-depth tutorial, visit the project homepage, try the online demonstration and have a look at the vignettes.

In a nutshell

A quick guide to distribution-free modeling with the essential cNORM functions: {r example} ## Basic example code for modeling the sample dataset library(cNORM)

cNORM.GUI()

via object$$data and the model via object$$model.

cnorm.elfe <- cnorm(raw = elfe$$raw, group = elfe$$group)

with the sample dataset ‘ppvt’:

model <- taylorSwift(ppvt$$raw, ppvt$$group)

predictors

plot(cnorm.elfe, “subset”, type=0) # plot R2 plot(cnorm.elfe, “subset”, type=3) # plot MSE

with a high number of terms:

cnorm.elfe <- cnorm(raw = elfe$$raw, group = elfe$$group, terms = 4)

This parameter should be somewhat higher, e.g., k = 5.

cnorm.elfe <- cnorm(raw = elfe$$raw, group = elfe$$group, k = 5, t = 3)

Visual inspection of the percentile curves of the fitted model

plot(cnorm.elfe, “percentiles”)

Visual inspection of the observed and fitted raw and norm scores

plot(cnorm.elfe, “norm”) plot(cnorm.elfe, “raw”)

5 and 14 predictors.

plot(cnorm.elfe, “series”, start=5, end=14)

cnorm.cv(cnorm.elfe$data, max=10, repetitions=3) Cross validation with prespecified terms of an already existing model cnorm.cv(cnorm.elfe, repetitions=3) Print norm table (in this case: 0, 3 or 6 months at grade level 3) normTable(c(3, 3.25, 3.5), cnorm.elfe) The other way round: Print raw table (grade level 3; 0 months) together with 90% confidence intervalls for a test with a reliability of .94 rawTable(3, cnorm.elfe, CI = .9, reliability = .94)  Modelling norm data using beta-binomial distributions: {r example} library(cNORM) # cNORM can as well model norm data using the beta-binomial # distribution, which usually performs well on tests with # a fixed number of dichotomous items. model.betabinomial <- cnorm.betabinomial(ppvt$age, ppvt$raw) # Adapt the power parameters for α and β to increase or decrease # the fit: model.betabinomial <- cnorm.betabinomial(ppvt$age, ppvt$raw, alpha = 4) # Plot percentile curves and display manifest and modelled norm scores. plot(model.betabinomial, ppvt$age, ppvt$raw) plotNorm(model.betabinomial, ppvt$age, ppvt$raw, width = 1) # Display fit statistics: summary(model.betabinomial) # Prediction of norm scores for new data and generating norm tables predict(model.betabinomial, c(8.9, 10.1), c(153, 121)) tables <- normTable.betabinomial(model.betabinomial, c(2, 3, 4), reliability=0.9) Conventional norming: {r example} library(cNORM) cNORM can as well be used for conventional norming: cnorm(raw=elfe$raw)



Start vignettes in cNORM:
{r example}
library(cNORM)

vignette("cNORM-Demo", package = "cNORM")
vignette("WeightedRegression", package = "cNORM")
vignette("BetaBinomial", package = "cNORM")

Sample Data

The package includes data from two large test norming projects, namely ELFE 1-6 (Lenhard & Schneider, 2006) and German adaption of the PPVT4 (A. Lenhard, Lenhard, Suggate & Seegerer, 2015), which can be used to run the analysis. Furthermore, large samples from the Center of Disease Control (CDC) on growth curves in childhood and adolescence (for computing Body Mass Index ‘BMI’ curves), Type ?elfe, ?ppvt or ?CDC to display information on the data sets.