Another retrospective on the year just gone (2025)

Created 10.i.26

Wow I really haven’t been posting here have I?! I see that I started quite a substantial post back in May but never came back to it. Looking at it now I think I decided it was getting dangerously closer to being a draft paper rather than a blog post. OK, 2025 was a difficult year for me, my personal blog post here summarises that for anyone interested in back stories. That did impact on my work and particularly on the non-CORE work that I try to focus on here. I am interested, having spent an hour or so collating this, to feel that it’s not so shabby a package of work. That wasn’t what I felt as I started on this!

Papers

I think I got out six peer-reviewed papers but I think it says much about 2025 that I’m not 100% certain that that’s the full count! Anyway, here are the ones I’m sure of!

  • Areas, M., Varela, C., Roussos, A. J., Paz, C., Evans, C., & Gómez Penedo, J. M. (2025). Propiedades psicométricas del Clinical Outcomes in Routine Evaluation (CORE-10) en Argentina. Revista Argentina de Ciencias Del Comportamiento, 17(1), 61–71. https://doi.org/10.32348/1852.4206.v17.n1.37272
  • Paz, C., Saúl, L. Á., Lafuente, P. R., & Evans, C. (2025). Psychometric properties and score distributions of the Clinical Outcomes in Routine Evaluation measures within a non-help-seeking population from Spain. Psicologia: Reflexão e Crítica, 38(1), 25. https://doi.org/10.1186/s41155-025-00341-6
  • Paz, C., Unda-López, A., Valdiviezo-Oña, J., Fernando Chávez, J., Elias Herrera Criollo, J., Toscano-Molina, L., & Evans, C. (2025). Mapping the growth of the CORE system tools in psychotherapy research from 1998 to 2021: Learning from historical evidence. Psychotherapy Research, 1–12. https://doi.org/10.1080/10503307.2025.2457389
  • Shahid, E., Suneel, I. S., & Evans, C. (2025). Standardized Outcomes Measure in Urdu – Clinical Outcomes in Routine Evaluation Outcome Measure – Translation, Cultural Challenges and Implications. Journal of Professional & Applied Psychology, 6(2), 175–192. https://doi.org/10.52053/jpap.v6i2.364
  • Valdiviezo-Oña, J., Evans, C., Montesano, A., March-Llanes, J., & Paz, C. (2025). Exploring the Psychometric Properties of the Systemic Clinical Outcome and Routine Evaluation-15 in a Psychotherapy Training Service in Ecuador. Collabra: Psychology, 11(1), 147246. https://doi.org/10.1525/collabra.147246
  • Zurita‐Calderón, S., Valdiviezo‐Oña, J., Evans, C., & Paz, C. (2025). What Stories Does Routine Outcome Monitoring Tell? Contrasting Psychological Distress Scores With In‐Therapy Narratives. Counselling and Psychotherapy Research, 25(2), e70023. https://doi.org/10.1002/capr.70023

If any of them is not open access do just contact me giving me the reference and I will send you a copy.

We did also publish what I think is my first dataverse dataset:

  • Valdiviezo-Oña, J., Evans, C., & Paz, C. (2025). Data for Exploring the psychometric properties of the Systemic Clinical Outcome and Routine Evaluation-15 in a psychotherapy training service in Ecuador (Version 1.1, pp. 557368, 2230412, 12171, 11916) [Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,text/tab-separated-values,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet]. Harvard Dataverse. https://doi.org/10.7910/DVN/NRIAHH

Technically it’s a product of 2026 but I’m also pleased that I now have a page on this site (https://www.psyctc.org/psyctc/root/stats/datasets/) collecting together datasets that relate to my shiny apps and/or Rblog posts. That should become a genuinely useful resource.

One reason I am a bit vague about my paper output is that I’ve become increasingly conscious of the problems of the 21st Century research/academic world being so organised around peer-reviewed journal publication and I’ve been trying to give more of my time and energy to creating other resources so, continuing from last year’s review here are summaries of what I’ve achieved in the OMbook glossary, the Rblog, my shiny apps and the CECPfuns R package.

The OMbook glossary

I seem to have added 75 entries taking the glossary from 340 to 415 entries. Do have a look at it and see if it’s a useful resource for you and perhaps for your colleagues and students. If you don’t know the “OMbook” (Evans, C., & Carlyle, J. (2021). Outcome measures and evaluation in counselling and psychotherapy (1st edn). SAGE Publishing. https://ombook.psyctc.org/book/) that spawned the glossary, do have a look at that. If you are teaching a course I think I an arrange for SAGE to give you a free evaluation copy.

The Rblog

The title is a bit misleading, I have employed a bit of the R project (https://www.r-project.org), specifically the distill package to create all of the posts and some are specifically about how to do things using R, however, others are opportunities to develop more extensive explanations of things than I could in the OMbook glossary and a few are about how to do IT technical things that don’t involve R at all. I seem to have added seven posts in 2025:

  • Autocorrelation: an explanation of what autocorrelation is and how it matters, there’s more to come on this in 2026.
  • Mapping dates to episodes: this is a pure R technique piece about how to handle the situation in which you have dates for data and start and finish dates for episodes and need to map the data, per participant, to the episodes and identify any that don’t map. A bit specific but it’s a challenge you might well meet using routine service data and R can make it very easy.
  • F-measure: ‘positive specific agreement’ index: another explanation. The F-measure was new to me, it’s an index of agreement when you have occasions/objects rated by two people and you can see when both agreed about the rating and when only one gave the rating but you can’t know how often neither rater gave the rating.
  • League tables: these can be very helpful but they can also be very dangerously misleading, this post unpacks and illustrates some of the issues.
  • Pseudonymisation and hashing ID values: another “howto” piece showing how easy it is to pseudonymise data using R. Vital to understand if you are taking data protection and confidentiality seriously.
  • Distribution overlays in ggplot: after_stat(), stat_function() and facets: another “howto” showing how to overlay things, for example a best Gaussian (“Normal”) distribution fit to a histogram and to be able to do this cleanly even when facetting the histogram by other variables. There are several ways to approach it.
  • Modelling the CTT RCI (Reliable Change Index): (CTT = Classical Test Theory). This is explanatory. I like the RCI and have been using it probably for over 30 years but it is widely misused and misundertood and those uses of it can be quite misleading, this illustrates some of the issues.
  • Weighted kappa: this is typical of an Rblog post that allows me to expand on and clarify entries in the OMbook glossary.
My shiny apps

Although some glossary entries and Rblog posts evolve a bit this is much more the case for shiny apps particularly now I am getting more confident of my shiny programming and am developing more sophisticated and complex than I was. I am happy to have a new page on this site (https://www.psyctc.org/psyctc/root/stats/datasets/) that holds datasets useful for people wanting to play with some of these shiny apps before using the app on their own data. I think the other main things to index here are as follows.

  • The CORE papers search interface: this was created in 2024 but tweaked a bit in 2025 but is probably stable now unless anyone asks for changes.
  • App that generates hash codes for IDs: this impletements the hash coding described in the Rblog post (Pseudonymisation and hashing ID values) so it makes it easy for anyone to upload their own dataset (in various formats) and to pull down the data with the hashed/pseudonymised ID codes. I think this may be the first example of an app that really does make it easy for someone to do something useful that they might otherwise have found impossible.
  • App that gets the s value from p value: what it says! See glossary entry here.
  • App that analyses datasets of one or two YP-CORE scores: another genuinely useful app I’d say. As that says it can take data with one or two (start/finish) YP-CORE scores from a few or many participants and gives analyses of the sociodemographics (if you had them), breakdowns by therapist (if multiple therapists), attendance breakdowns (if you …), score distributions and summaries and various analyses of change including RCSC categorisation and the Jacobson plot. This is an app that will definitely evolve and it will be complemented by another that will handle arbitrary numbers of YP-CORE completions per participant.
  • An app that scores CORE-OM item data: this takes an Excel file of the format I created to score CORE-OM data collected with Microsoft forms. This is proof of concept really and should be followed by apps allowing CORE-OM, and then other CORE measures’ item scores to be uploaded and scored. It gives all the CORE-OM scores including the CORE-6D utility score and also gives the scores for the embedded items of all the shorter adult measures that are derived from the CORE-OM.
  • App that gives correct overall (and non-risk) scores for the CORE-OM if you only have mean domain scores (and no missing data). I created this for an English NHS Trust where their software scored the CORE-OM returning mean domain scores but no overall or non-risk score. Simply taking the mean of the domain scores gives potentially quite incorrect overall and non-risk scores because of the varying numbers of items per domain and the arithmetic to get the correct scores is tedious. Others may find themselves in the same situation.
CECPfuns package of R functions

The functions added or improved in 2025 were:

  • checkIsOneDim(): does what it says, pretty niche but there are occasions when you might need to check this and the immediately obvious ways to check this that cover the various data structures for which the test migth apply aren’t all robust to all situations.
  • checkIsVector(): similar need case to the above but a different issue.
  • convertVectorToSentence(): created in 2021, small tweak to improve warning/error handling.
  • getSvalFromPval(): trivial function that does what it says: you give it an observed p value and it returns the corresponding surprisal index. See glossary entry here, underpins the shiny app that gets the s value from p value.

That’s it. Hm, not as bad as I feared

History

Created 10.i.26.