Kendalls W#319
Open
juliuspfadt wants to merge 14 commits into
Open
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Adds Kendall’s coefficient of concordance (W) to the Reliability module’s Rater Agreement analysis (using irr::kendall()), and refactors the Rater Agreement UI/options around a shared bootstrap/CI + seed “Advanced Options” section. Also adds extensive info tooltips across multiple analyses and updates tests + versioning.
Changes:
- Add Kendall’s W computation + bootstrap CI support to
raterAgreement(R + QML) and extend unit tests with a published reference dataset. - Restructure Rater Agreement options (new
bootstrapSamples, coefficient checkboxes default off) + add upgrade mapping for renamed option. - Add
infometadata to many tables/plots/controls; bump version + updaterenv.lock.
Reviewed changes
Copilot reviewed 27 out of 64 changed files in this pull request and generated 11 comments.
Show a summary per file
| File | Description |
|---|---|
| R/raterAgreement.R | Adds Kendall’s W + placeholder table; renames bootstrap option usage; adds info strings. |
| inst/qml/RaterAgreement.qml | Adds Kendall’s W UI + “Advanced Options” section for CI/bootstrap/seed; expands allowed variable types. |
| tests/testthat/test-raterAgreement.R | Updates options for new defaults; adds Kendall’s W tests + reference check. |
| tests/testthat/anxietyRatings.csv | New reference dataset for Kendall’s W verification test. |
| inst/Upgrades.qml | Adds rename upgrade: krippendorffsAlphaBootstrapSamplesForCI → bootstrapSamples. |
| R/standardErrorOfMeasurement.R | Adds info metadata; adjusts $dependOn() wiring for CI tables/plots. |
| inst/qml/StandardErrorOfMeasurement.qml | Adds info tooltips across SEM UI controls. |
| R/unidimensionalReliabilityFrequentist.R | Adds info metadata to tables. |
| inst/qml/UnidimensionalReliabilityFrequentist.qml | Adds info tooltips and minor UI restructuring (e.g., Samples section). |
| R/unidimensionalReliabilityBayesian.R | Adds info metadata to tables/containers/plots. |
| inst/qml/UnidimensionalReliabilityBayesian.qml | Adds info tooltips across Bayesian UI controls. |
| R/intraclassCorrelation.R | Adds info metadata to main ICC table. |
| inst/qml/IntraclassCorrelation.qml | Adds info tooltips to ICC controls. |
| R/blandAltman.R | Adds info metadata to Bland–Altman containers/plots/tables. |
| inst/qml/BlandAltman.qml | Adds info tooltips to Bland–Altman controls. |
| NEWS.md | Adds release notes for 0.97.1 (Kendall’s W + UI restructuring). |
| DESCRIPTION | Bumps package version/date. |
| renv.lock | Updates pinned dependency metadata (incl. jaspTools entry) + updates JASP GitHub SHAs. |
| .Rbuildignore | Ignores additional dev directories (.positai, .claude). |
| .gitignore | Ignores .positai. |
| .vscode/settings.json | Adds workspace R LSP setting. |
| inst/Description.qml | Minor formatting change (blank line). |
| inst/help/unidimensionalReliabilityFrequentist.md | Deleted help page. |
| inst/help/unidimensionalReliabilityBayesian.md | Deleted help page. |
| inst/help/standardErrorOfMeasurement.md | Deleted help page. |
| inst/help/raterAgreement.md | Deleted help page. |
| inst/help/intraclassCorrelation.md | Deleted help page. |
| inst/help/toolTip/sampleSavingFreq.md | Deleted tooltip help page (replaced by info). |
| inst/help/toolTip/sampleSavingBayes.md | Deleted tooltip help page (replaced by info). |
Comment on lines
286
to
290
| jaspTable <- createJaspTable(title = "Krippendorff's alpha") | ||
| jaspTable$info <- gettext("Krippendorff's alpha: reliability coefficient applicable to any number of raters, any scale level (nominal/ordinal/interval/ratio), and incomplete data.") | ||
| jaspTable$addColumnInfo(name = "method", title = gettext("Method"), type = "string") | ||
| jaspTable$addColumnInfo(name = "kAlpha", title = "Krippendorff's alpha", type = "number") | ||
| jaspTable$position <- 2 |
Comment on lines
+369
to
+372
| .kendallWBootRA <- function(jaspResults, dataset, options, ready) { | ||
| if (!ready || !is.null(jaspResults[["kendallWBootstrapSamples"]]$object)) | ||
| return() | ||
|
|
Comment on lines
+404
to
+407
| jaspTable$addColumnInfo(name = "W", title = gettext("W"), type = "number") | ||
| jaspTable$addColumnInfo(name = "chisq", title = gettext("Chi-square"), type = "number") | ||
| jaspTable$addColumnInfo(name = "df", title = gettext("df"), type = "integer") | ||
| jaspTable$addColumnInfo(name = "p", title = gettext("p"), type = "pvalue") |
Comment on lines
+11
to
+12
| ^\.positai$ | ||
| ^\.claude$ |
Comment on lines
155
to
+159
| { | ||
| name: "krippendorffsAlpha" | ||
| label: qsTr("Krippendorff's alpha") | ||
| checked: true | ||
|
|
||
| DropDown | ||
| { | ||
| name: "krippendorffsAlphaMethod" | ||
| label: qsTr("Method") | ||
| values: | ||
| [ | ||
| {label: qsTr("Nominal"), value: "nominal"}, | ||
| {label: qsTr("Ordinal"), value: "ordinal"}, | ||
| {label: qsTr("Interval"), value: "interval"}, | ||
| {label: qsTr("Ratio"), value: "ratio"} | ||
| ] | ||
| } | ||
| IntegerField | ||
| name: "ci" | ||
| label: qsTr("Confidence interval") | ||
| checked: true | ||
| childrenOnSameRow: true |
| info: qsTr("Number of bootstrap replications used to compute confidence intervals. Higher values give more stable estimates.") | ||
| } | ||
|
|
||
| SetSeed {} |
| ciTable$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]], | ||
| options = c("ciLevelTable", "sumScoreCiTable")) | ||
| ciTable$info <- gettext("Confidence intervals for the true score at each sum score level, computed from the conditional SEM.") | ||
| ciTable$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]]) |
| plot$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]], | ||
| options = "combinedPointPlot") | ||
| plot$info <- gettext("Overlay of all selected methods' conditional SEM across the full range of sum scores.") | ||
| plot$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]]) |
| ciPlotsContainer$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]], | ||
| options = c("sumScoreCiPlots", "sumScoreCiPlotsCutoff", "sumScoreCiPlotsCutoffValue", "ciLevelPlots")) | ||
| ciPlotsContainer$info <- gettext("True-score confidence interval plotted against sum score for each selected method.") | ||
| ciPlotsContainer$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]]) |
|
|
||
| g <- jaspGraphs::themeJasp(g) | ||
|
|
||
| plot <- createJaspPlot(plot = g, title = "Posterior Predictive Check Omega", width = 350) |
Comment on lines
265
to
268
| ciTable <- createJaspTable(gettext("Sum Score CI Table")) | ||
| ciTable$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]], | ||
| options = c("ciLevelTable", "sumScoreCiTable")) | ||
| ciTable$info <- gettext("Confidence intervals for the true score at each sum score level, computed from the conditional SEM.") | ||
| ciTable$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]]) | ||
| ciTable$position <- 2 |
| plot$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]], | ||
| options = "combinedPointPlot") | ||
| plot$info <- gettext("Overlay of all selected methods' conditional SEM across the full range of sum scores.") | ||
| plot$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]]) |
| ciPlotsContainer$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]], | ||
| options = c("sumScoreCiPlots", "sumScoreCiPlotsCutoff", "sumScoreCiPlotsCutoffValue", "ciLevelPlots")) | ||
| ciPlotsContainer$info <- gettext("True-score confidence interval plotted against sum score for each selected method.") | ||
| ciPlotsContainer$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]]) |
Comment on lines
321
to
329
| .semPointPlots <- function(jaspResults, dataset, options, ready) { | ||
|
|
||
| if (!is.null(jaspResults[["semMainContainer"]][["pointPlots"]]) || !options[["pointPlots"]] | ||
| || !ready || jaspResults[["semMainContainer"]]$getError()) {return()} | ||
|
|
||
| pointPlotsContainer <- createJaspContainer(title = gettext("Point Plots")) | ||
| pointPlotsContainer$info <- gettext("Conditional SEM plotted as a function of sum score for each selected method.") | ||
| pointPlotsContainer$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]], options = "pointPlots") | ||
| jaspResults[["semMainContainer"]][["pointPlotsContainer"]] <- pointPlotsContainer |
Comment on lines
434
to
444
| .semSumScoreCiPlots <- function(jaspResults, dataset, options, ready) { | ||
|
|
||
| if (!is.null(jaspResults[["semMainContainer"]][["ciPlots"]]) || !options[["sumScoreCiPlots"]] | ||
| || !ready || jaspResults[["semMainContainer"]]$getError()) {return()} | ||
|
|
||
| nc <- length(unique(c(as.matrix(dataset)))) # may be needed for IRT | ||
|
|
||
| ciPlotsContainer <- createJaspContainer(title = gettext("Sum Score CI Plots")) | ||
| ciPlotsContainer$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]], | ||
| options = c("sumScoreCiPlots", "sumScoreCiPlotsCutoff", "sumScoreCiPlotsCutoffValue", "ciLevelPlots")) | ||
| ciPlotsContainer$info <- gettext("True-score confidence interval plotted against sum score for each selected method.") | ||
| ciPlotsContainer$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]]) | ||
| jaspResults[["semMainContainer"]][["ciPlotsContainer"]] <- ciPlotsContainer |
Comment on lines
286
to
289
| jaspTable <- createJaspTable(title = "Krippendorff's alpha") | ||
| jaspTable$info <- gettext("Krippendorff's alpha: reliability coefficient applicable to any number of raters, any scale level (nominal/ordinal/interval/ratio), and incomplete data.") | ||
| jaspTable$addColumnInfo(name = "method", title = gettext("Method"), type = "string") | ||
| jaspTable$addColumnInfo(name = "kAlpha", title = "Krippendorff's alpha", type = "number") |
Comment on lines
+369
to
+379
| .kendallWBootRA <- function(jaspResults, dataset, options, ready) { | ||
| if (!ready || !is.null(jaspResults[["kendallWBootstrapSamples"]]$object)) | ||
| return() | ||
|
|
||
| bootstrapSamples <- createJaspState() | ||
| bootstrapSamples$dependOn(options = c( | ||
| "variables", "kendallW", "ci", "bootstrapSamples", | ||
| "correctForTies", "dataStructure", "setSeed", "seed" | ||
| )) | ||
| jaspResults[["kendallWBootstrapSamples"]] <- bootstrapSamples | ||
|
|
| checked: true | ||
| childrenOnSameRow: true | ||
| id: ciOpt | ||
| info: qsTr("Report a bootstrap confidence interval for each agreement coefficient.") |
| label: qsTr("Confidence interval") | ||
| checked: true | ||
| childrenOnSameRow: true | ||
| id: ciOpt |
Comment on lines
7
to
+12
| ^\.github$ | ||
| ^tests/upgrades$ | ||
| ^examples$ | ||
| ^jasp_dev_work_dir$ | ||
| ^\.positai$ | ||
| ^\.claude$ |
ef4171f to
354a13e
Compare
CRAN binary for dcurver on aarch64-apple-darwin20 links against libiomp5 (Intel OpenMP), unavailable on CI (fopenmp stripped). Source install compiles without OpenMP. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jaspTools now uses getFromNamespace instead of sourcing R files, requiring jaspReliability to be loaded before analysisOptions() is called. test-blandAltman and test-intraclassCorrelation ran before library tests that incidentally loaded the package, causing only those two to fail. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…mpat)" This reverts commit ed50a8e.
|
build builder bot! |
FBartos
requested changes
Jun 16, 2026
| info: qsTr("Number of bootstrap replications used to compute confidence intervals. Higher values give more stable estimates.") | ||
| } | ||
|
|
||
| SetSeed {} |
Comment on lines
155
to
+159
| { | ||
| name: "krippendorffsAlpha" | ||
| label: qsTr("Krippendorff's alpha") | ||
| checked: true | ||
|
|
||
| DropDown | ||
| { | ||
| name: "krippendorffsAlphaMethod" | ||
| label: qsTr("Method") | ||
| values: | ||
| [ | ||
| {label: qsTr("Nominal"), value: "nominal"}, | ||
| {label: qsTr("Ordinal"), value: "ordinal"}, | ||
| {label: qsTr("Interval"), value: "interval"}, | ||
| {label: qsTr("Ratio"), value: "ratio"} | ||
| ] | ||
| } | ||
| IntegerField | ||
| name: "ci" | ||
| label: qsTr("Confidence interval") | ||
| checked: true | ||
| childrenOnSameRow: true |
|
build builder bot! |
Contributor
✅ Build Complete!Your JASP module bundles have been successfully built for macOS (ARM) and Windows. 👉 Click here to download the artifacts (Scroll to the bottom of the page to find the "Artifacts" section). |
Comment on lines
345
to
346
|
|
||
| bootstrapSamples <- createJaspState() |
Comment on lines
+370
to
+371
| if (!ready || !is.null(jaspResults[["kendallWBootstrapSamples"]]$object)) | ||
| return() |
Comment on lines
267
to
+268
| ciTable$dependOn(optionsFromObject = jaspResults[["semMainContainer"]][["coefficientTable"]], | ||
| options = c("ciLevelTable", "sumScoreCiTable")) | ||
| options = c("sumScoreCiTable", "ciLevelTable")) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
adds Kendalls coefficient of concordance with the irr::kendall function.
also restructures the agreement analysis a bit
fixes jasp-stats/jasp-issues#2151