{"id":32209704,"url":"https://github.com/ejikeugba/serp","last_synced_at":"2026-07-18T00:11:15.268Z","repository":{"id":46661143,"uuid":"318330253","full_name":"ejikeugba/serp","owner":"ejikeugba","description":"Smooth Effects on Response Penalty for CLM","archived":false,"fork":false,"pushed_at":"2024-11-25T13:36:50.000Z","size":1059,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-19T02:29:28.425Z","etag":null,"topics":["categorical-data","ordinal-regression","penalized-regression","proportional-odds-regression","regularization-techniques"],"latest_commit_sha":null,"homepage":"https://ejikeugba.github.io/serp","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ejikeugba.png","metadata":{"files":{"readme":"README.Rmd","changelog":"NEWS.md","contributing":"contributing.md","funding":null,"license":null,"code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-12-03T21:57:07.000Z","updated_at":"2024-11-25T13:36:54.000Z","dependencies_parsed_at":"2025-04-14T15:40:31.950Z","dependency_job_id":"996a95b2-5aa4-4b33-a986-6f134480123d","html_url":"https://github.com/ejikeugba/serp","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ejikeugba/serp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejikeugba%2Fserp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejikeugba%2Fserp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejikeugba%2Fserp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejikeugba%2Fserp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ejikeugba","download_url":"https://codeload.github.com/ejikeugba/serp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejikeugba%2Fserp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35291639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["categorical-data","ordinal-regression","penalized-regression","proportional-odds-regression","regularization-techniques"],"created_at":"2025-10-22T06:14:32.992Z","updated_at":"2026-07-18T00:11:15.262Z","avatar_url":"https://github.com/ejikeugba.png","language":"R","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\noutput: github_document\n---\n\n\u003c!-- README.md is generated from README.Rmd. Please edit that file --\u003e\n\n```{r, include = FALSE}\nknitr::opts_chunk$set(\n  collapse = TRUE,\n  comment = \"#\u003e\",\n  fig.path = \"man/figures/README-\",\n  out.width = \"100%\"\n)\n```\n\n\n# serp \u003ca href=\"https://ejikeugba.github.io/serp/\"\u003e\u003cimg src='man/figures/hex_logo.png' align=\"right\" height=\"139\" /\u003e\u003c/a\u003e\n\n\n\u003c!-- badges: start --\u003e\n[![Project Status: Active – The project has reached a stable, usable state and is being activelydeveloped](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)\n[![Codecov test coverage](https://codecov.io/gh/ejikeugba/serp/branch/master/graph/badge.svg)](https://app.codecov.io/gh/ejikeugba/serp?branch=master)\n[![Total Downloads](http://cranlogs.r-pkg.org/badges/grand-total/serp)](https://CRAN.R-project.org/package=serp)\n[![CRAN status](https://www.r-pkg.org/badges/version/serp )](https://CRAN.R-project.org/package=serp)\n[![DOI](https://joss.theoj.org/papers/10.21105/joss.03705/status.svg)](https://doi.org/10.21105/joss.03705)\n[![AppVeyor build status](https://ci.appveyor.com/api/projects/status/github/ejikeugba/serp?branch=master\u0026svg=true)](https://ci.appveyor.com/project/ejikeugba/serp)\n[![license](https://img.shields.io/badge/license-GPL--2-blue.svg)](https://www.gnu.org/licenses/gpl-2.0.en.html)\n[![R build status](https://github.com/ejikeugba/serp/workflows/R-CMD-check/badge.svg)](https://github.com/ejikeugba/serp/actions)\n\n\u003c!-- badges: end --\u003e\n\n\n### Overview\nThe `serp` R package fits cumulative link models (CLMs) with the `smooth-effect-on-response penalty (SERP)`. The `cumulative model` developed by McCullagh (1980) is probably the most frequently used ordinal model in empirical studies. However, the stochastic ordering property of the general form of the model poses a very serious challenge in most empirical applications of the model. For instance, unstable likelihoods with ill-conditioned parameter space are frequently encountered during the iterative process. `serp` implements a unique regularization method for CLMs that provides the means of smoothing the adjacent categories in the model. At extreme shrinkage, SERP causes all subject-specific effects associated with each variable in the model to shrink towards unique global effects. Fitting is done using a modified Newton's method. Several standard model performance and descriptive methods are also available. See [Ugba, 2021](https://doi.org/10.21105/joss.03705), [Ugba et al., 2021](https://doi.org/10.3390/stats4030037) and [Tutz and Gertheiss, 2016](https://doi.org/10.1177/1471082X16642560) for further details on the implemented penalty.\n\n\n### Example\nConsider the cumulative logit model of the [wine dataset](https://ejikeugba.github.io/serp/reference/wine.html), where the rating of wine bitterness is predicted with the two treatment factors, temperature and contact.\n\n```R\n## The unpenalized non-proportional odds model returns unbounded estimates, hence,\n## not fully identifiable.\nf1 \u003c- serp(rating ~ temp + contact, slope = \"unparallel\",\n           reverse = TRUE, link = \"logit\", data = wine)\ncoef(f1)\n```\n\n```R\n## The penalized non-proportional odds model with a user-supplied lambda gives \n## a fully identified model having bounded estimates. A suitable tuning criterion\n## could as well be used to select lambda (e.g., aic or cv) \nf2 \u003c- serp(rating ~ temp + contact, slope = \"penalize\",\n           link = \"logit\", reverse = TRUE, tuneMethod = \"user\",\n           lambda = 1e1 ,data = wine)\ncoef(f2)\n```\n\n```R\n## A penalized partial proportional odds model with one variable set to \n## global effect is also possible.\nf3 \u003c- serp(rating ~ temp + contact, slope = \"penalize\",\n           reverse = TRUE, link = \"logit\", tuneMethod = \"user\",\n           lambda = 2e1, globalEff = ~ temp, data = wine)\ncoef(f3)\n```\n\n```R\n## The unpenalized proportional odds model with constrained estimates. \n## Under estreme shrinkage, estimates in f2 equal those in this model.  \nf4 \u003c-  serp(rating ~ temp + contact, slope = \"parallel\",\n            reverse = FALSE, link = \"logit\", data = wine)\nsummary(f4)\n```\n\n### Installation and Use\n\nBefore installing `serp`, it is encouraged to have a recent version of [R](https://cran.r-project.org/bin/windows/base/) installed. The released version of `serp` can be installed from [CRAN](https://cran.r-project.org/package=serp) with:\n\n``` r\ninstall.packages(\"serp\")\n```\n\nor the development version from [GitHub](https://github.com/ejikeugba/serp) with:\n\n``` r\nif (!require(\"devtools\")) install.packages(\"devtools\")\ndevtools::install_github(\"ejikeugba/serp\")\n```\n\nLoad `serp` into R environment with:\n```{r, eval = FALSE}\nlibrary(serp)\n```\n\n\n### Community Guidelines\n\nPull requests are welcomed! Please submit your contributions to `serp` through the list of `Pull Requests`, following the [contributing guidelines](https://ejikeugba.github.io/serp/CONTRIBUTING.html). To report issues and/or seek support, please file a new ticket in the [issue](https://github.com/ejikeugba/serp/issues) tracker, and expect a feedback ASAP! \n\n\n### Code of Conduct\n\nPlease note that `serp` is released with a [Contributor Code of Conduct](https://github.com/ejikeugba/serp/blob/master/CODE_OF_CONDUCT.md). By contributing to this project, you agree to abide by its terms.\n\n\n### References\nMcCullagh, P. (1980). Regression Models for Ordinal Data. *Journal of the Royal Statistical Society. Series B (Methodological)*, 42, 109-142. https://doi.org/10.1111/j.2517-6161.1980.tb01109.x \n\nRandall, J (1989). The analysis of sensory data by generalized linear model. *Biometrical Journal*, 31, 781--793. https://doi.org/10.1002/bimj.4710310703\n\nTutz, G. and Gertheiss, J. (2016). Regularized Regression for Categorical Data (With Discussion and Rejoinder).  *Statistical Modelling*, 16, 161-260. https://doi.org/10.1177/1471082X16642560\n\nUgba, E. R., Mörlein, D. and Gertheiss, J. (2021). Smoothing in Ordinal Regression: An Application to Sensory Data. *Stats*, 4, 616–633. https://doi.org/10.3390/stats4030037\n\nUgba, E. R. (2021). serp: An R package for smoothing in ordinal regression *Journal of Open Source Software*, 6(66), 3705. https://doi.org/10.21105/joss.03705\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fejikeugba%2Fserp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fejikeugba%2Fserp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fejikeugba%2Fserp/lists"}