cNORM

Continuous Norming with R

https://github.com/wlenhard/cnorm

Science Score: 49.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 10 DOI reference(s) in README
  • Academic publication links
  • Committers with academic emails
    2 of 5 committers (40.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (16.3%) to scientific vocabulary

Keywords

beta-binomial biometrics continuous-norming growth-curve norm-scores norm-tables normalization-techniques percentile psychometrics regression-based-norming taylor-series
Last synced: 7 months ago · JSON representation

Repository

Continuous Norming with R

Basic Info
Statistics
  • Stars: 2
  • Watchers: 2
  • Forks: 2
  • Open Issues: 0
  • Releases: 22
Topics
beta-binomial biometrics continuous-norming growth-curve norm-scores norm-tables normalization-techniques percentile psychometrics regression-based-norming taylor-series
Created over 7 years ago · Last pushed 11 months ago
Metadata Files
Readme Changelog Contributing License Code of conduct

README.md

CRAN_Status_Badge CRAN RStudio mirror downloads

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)

Start the graphical user interface (needs shiny installed)

The GUI includes the most important functions. For specific cases,

please use cNORM on the console.

cNORM.GUI()

Using the syntax on the console: The function 'cnorm' performs

all steps automatically. Please specify the raw score and the

grouping variable. The resulting object contains the ranked data

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

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

... and since we love pop music as much as Taylor polynomials, you

can also use the taylorSwift function to swiftly compute a distribution-

free Taylor polynomial model (which is however identical to cnorm). Here

with the sample dataset 'ppvt':

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

Plot different indicators of model fit depending on the number of

predictors

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

NOTE! At this point, you usually select a good fitting model and rerun

the process with a fixed number of terms, e. g. 4. Avoid models

with a high number of terms:

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

Powers of age can be specified via the parameter 't'.

Cubic modeling is usually sufficient, i.e., t = 3.

In contrast, 'k' specifies the power of the person location.

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")

In order to compare different models, generate a series of percentile

plots with an ascending number of predictors, in this example between

5 and 14 predictors.

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

Cross validation of number of terms with 80% of the data for training

and 20% for validation. Due to the time intensity, the maximum

number of terms is restricted to 10 in this example

with 3 repetitions.

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.

Terms of use, license and declaration of interest

cNORM is licensed under GNU Affero General Public License v3 (AGPL-3.0). This means that copyrighted parts of cNORM can be used free of charge for commercial and non-commercial purposes that run under this same license, retain the copyright notice, provide their source code and correctly cite cNORM. Copyright protection includes, for example, the reproduction and distribution of source code or parts of the source code of cNORM or of graphics created with cNORM. The integration of the package into a server environment in order to access the functionality of the software (e.g. for online delivery of norm scores) is also subject to this license. However, a regression function determined with cNORM, the norm tables ... are not subject to copyright protection and may be used freely without preconditions. If you want to apply cNORM in a way that is not compatible with the terms of the AGPL 3.0 license, please do not hesitate to contact us to negotiate individual conditions. If you want to use cNORM for scientific publications, we would also ask you to quote the source.

The authors would like to thank WPS (https://www.wpspublish.com/) for providing funding for developing, integrating and evaluating weighting and post stratification in the cNORM package. The research project was conducted in 2022.

References

  • Gary, S., Lenhard, W., Lenhard, A. et al. A tutorial on automatic post-stratification and weighting in conventional and regression-based norming of psychometric tests. Behav Res (2023a). https://doi.org/10.3758/s13428-023-02207-0
  • Gary, S., Lenhard, A., Lenhard, W., & Herzberg, D. S. (2023b). Reducing the bias of norm scores in non-representative samples: Weighting as an adjunct to continuous norming methods. Assessment, 10731911231153832. https://doi.org/10.1177/10731911231153832
  • Lenhard, A., Lenhard, W., Segerer, R. & Suggate, S. (2015). Peabody Picture Vocabulary Test - Revision IV (Deutsche Adaption). Frankfurt a. M./Germany: Pearson Assessment.
  • Lenhard, A., Lenhard, W., Suggate, S. & Segerer, R. (2016). A continuous solution to the norming problem. Assessment, Online first, 1-14. https://doi.org/10.1177/1073191116656437
  • Lenhard, A., Lenhard, W., Gary, S. (2018). Continuous Norming (cNORM). The Comprehensive R Network, Package cNORM, available: https://CRAN.R-project.org/package=cNORM
  • Lenhard, A., Lenhard, W., Gary, S. (2019). Continuous norming of psychometric tests: A simulation study of parametric and semi-parametric approaches. PLoS ONE, 14(9), e0222279. https://doi.org/10.1371/journal.pone.0222279
  • Lenhard, W., & Lenhard, A. (2020). Improvement of Norm Score Quality via Regression-Based Continuous Norming. Educational and Psychological Measurement(Online First), 1-33. https://doi.org/10.1177/0013164420928457

Owner

  • Name: Wolfgang Lenhard
  • Login: WLenhard
  • Kind: user
  • Location: Wuerzburg
  • Company: Institute of Psychology, Univerity of Wuerzburg

GitHub Events

Total
  • Release event: 1
  • Push event: 36
  • Create event: 1
Last Year
  • Release event: 1
  • Push event: 36
  • Create event: 1

Committers

Last synced: over 2 years ago

All Time
  • Total Commits: 652
  • Total Committers: 5
  • Avg Commits per committer: 130.4
  • Development Distribution Score (DDS): 0.052
Past Year
  • Commits: 25
  • Committers: 1
  • Avg Commits per committer: 25.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Wolfgang Lenhard w****d@u****e 618
Wolfgang Lenhard 4****d 18
Alexandra Lenhard l****d@p****e 10
Alexandra Lenhard 4****d 5
Wolfgang Lenhard g****5@u****u 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 8 months ago

All Time
  • Total issues: 7
  • Total pull requests: 1
  • Average time to close issues: about 1 month
  • Average time to close pull requests: about 2 hours
  • Total issue authors: 7
  • Total pull request authors: 1
  • Average comments per issue: 1.71
  • Average comments per pull request: 0.0
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 0
  • Average time to close issues: about 10 hours
  • Average time to close pull requests: N/A
  • Issue authors: 1
  • Pull request authors: 0
  • Average comments per issue: 2.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • SteHab (1)
  • siwanicki (1)
  • Enchufa2 (1)
  • hynekcigler (1)
  • jirimotyl (1)
  • DSHerzberg (1)
Pull Request Authors
  • AndreyAkinshin (2)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • cran 531 last-month
  • Total docker downloads: 42,767
  • Total dependent packages: 1
  • Total dependent repositories: 1
  • Total versions: 25
  • Total maintainers: 1
cran.r-project.org: cNORM

Continuous Norming

  • Versions: 25
  • Dependent Packages: 1
  • Dependent Repositories: 1
  • Downloads: 531 Last month
  • Docker Downloads: 42,767
Rankings
Docker downloads count: 0.6%
Downloads: 16.7%
Forks count: 17.0%
Average: 17.3%
Dependent packages count: 18.1%
Dependent repos count: 23.9%
Stargazers count: 27.8%
Last synced: 8 months ago

Dependencies

.github/workflows/r.yml actions
  • actions/cache v2 composite
  • actions/checkout v2 composite
  • actions/upload-artifact main composite
  • r-lib/actions/setup-pandoc v1 composite
  • r-lib/actions/setup-r v1 composite
DESCRIPTION cran
  • R >= 4.0.0 depends
  • lattice >= 0.20 imports
  • latticeExtra >= 0.6 imports
  • leaps >= 3.0 imports
  • foreign * suggests
  • knitr * suggests
  • readxl * suggests
  • rmarkdown * suggests
  • shiny * suggests
  • shinycssloaders * suggests
  • testthat * suggests