Skip to content

Kendalls W#319

Open
juliuspfadt wants to merge 14 commits into
jasp-stats:masterfrom
juliuspfadt:kendallsW
Open

Kendalls W#319
juliuspfadt wants to merge 14 commits into
jasp-stats:masterfrom
juliuspfadt:kendallsW

Conversation

@juliuspfadt

Copy link
Copy Markdown
Collaborator

adds Kendalls coefficient of concordance with the irr::kendall function.
also restructures the agreement analysis a bit
fixes jasp-stats/jasp-issues#2151

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 info metadata to many tables/plots/controls; bump version + update renv.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: krippendorffsAlphaBootstrapSamplesForCIbootstrapSamples.
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 thread R/raterAgreement.R Outdated
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 thread R/raterAgreement.R
Comment on lines +369 to +372
.kendallWBootRA <- function(jaspResults, dataset, options, ready) {
if (!ready || !is.null(jaspResults[["kendallWBootstrapSamples"]]$object))
return()

Comment thread R/raterAgreement.R
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 thread .Rbuildignore
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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juliuspfadt maybe good points?

Comment thread inst/qml/RaterAgreement.qml Outdated
info: qsTr("Number of bootstrap replications used to compute confidence intervals. Higher values give more stable estimates.")
}

SetSeed {}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juliuspfadt maybe good points?

Comment thread R/standardErrorOfMeasurement.R Outdated
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"]])
Comment thread R/standardErrorOfMeasurement.R Outdated
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"]])
Comment thread R/standardErrorOfMeasurement.R Outdated
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)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 27 out of 64 changed files in this pull request and generated 10 comments.

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
Comment thread R/standardErrorOfMeasurement.R Outdated
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"]])
Comment thread R/standardErrorOfMeasurement.R Outdated
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 thread R/raterAgreement.R Outdated
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 thread R/raterAgreement.R
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

Comment thread inst/qml/RaterAgreement.qml Outdated
checked: true
childrenOnSameRow: true
id: ciOpt
info: qsTr("Report a bootstrap confidence interval for each agreement coefficient.")
Comment thread inst/qml/RaterAgreement.qml Outdated
label: qsTr("Confidence interval")
checked: true
childrenOnSameRow: true
id: ciOpt
Comment thread .Rbuildignore
Comment on lines 7 to +12
^\.github$
^tests/upgrades$
^examples$
^jasp_dev_work_dir$
^\.positai$
^\.claude$
@juliuspfadt juliuspfadt force-pushed the kendallsW branch 2 times, most recently from ef4171f to 354a13e Compare June 11, 2026 12:11
juliuspfadt and others added 3 commits June 11, 2026 15:05
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>
@juliuspfadt juliuspfadt requested a review from FBartos June 11, 2026 15:02
@FBartos

FBartos commented Jun 15, 2026

Copy link
Copy Markdown

build builder bot!

Comment thread inst/qml/RaterAgreement.qml Outdated
info: qsTr("Number of bootstrap replications used to compute confidence intervals. Higher values give more stable estimates.")
}

SetSeed {}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juliuspfadt maybe good points?

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juliuspfadt maybe good points?

@FBartos

FBartos commented Jun 16, 2026

Copy link
Copy Markdown

build builder bot!

@juliuspfadt juliuspfadt requested review from FBartos and Copilot June 16, 2026 14:54
@github-actions

Copy link
Copy Markdown
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).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 29 out of 66 changed files in this pull request and generated 3 comments.

Comment thread R/raterAgreement.R
Comment on lines 345 to 346

bootstrapSamples <- createJaspState()
Comment thread R/raterAgreement.R
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"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request]: Kendall's coefficient of concordance (Kendall's W)

3 participants