Skip to content

Commit 1a201d9

Browse files
Consistently show labels for ordinal variables (#403)
* consistently show labels for ordinal variables * Update renv.lock --------- Co-authored-by: RensDofferhoff <20978635+RensDofferhoff@users.noreply.github.com>
1 parent db0a5b9 commit 1a201d9

File tree

4 files changed

+110
-363
lines changed

4 files changed

+110
-363
lines changed

R/descriptives.R

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -447,26 +447,26 @@ DescriptivesInternal <- function(jaspResults, dataset, options) {
447447
if (options$shapiroWilkTest) { stats$addColumnInfo(name="Shapiro-Wilk", title=gettext("Shapiro-Wilk"), type="number")
448448
stats$addColumnInfo(name="P-value of Shapiro-Wilk", title=gettext("P-value of Shapiro-Wilk"), type="pvalue") }
449449
if (options$range) stats$addColumnInfo(name="Range", title=gettext("Range"), type="number")
450-
if (options$minimum) stats$addColumnInfo(name="Minimum", title=gettext("Minimum"), type="number")
451-
if (options$maximum) stats$addColumnInfo(name="Maximum", title=gettext("Maximum"), type="number")
450+
if (options$minimum) stats$addColumnInfo(name="Minimum", title=gettext("Minimum"), type="mixed")
451+
if (options$maximum) stats$addColumnInfo(name="Maximum", title=gettext("Maximum"), type="mixed")
452452

453453
if (options$quartiles) {
454-
stats$addColumnInfo(name="q1", title=gettext("25th percentile"), type="number")
455-
stats$addColumnInfo(name="q2", title=gettext("50th percentile"), type="number")
456-
stats$addColumnInfo(name="q3", title=gettext("75th percentile"), type="number")
454+
stats$addColumnInfo(name="q1", title=gettext("25th percentile"), type="mixed")
455+
stats$addColumnInfo(name="q2", title=gettext("50th percentile"), type="mixed")
456+
stats$addColumnInfo(name="q3", title=gettext("75th percentile"), type="mixed")
457457
}
458458

459459
if (options$quantilesForEqualGroups) { # I've read that there are several ways how to estimate percentiles so it should be checked if it match the SPSS way
460460
tempPercentNames <- 1 / equalGroupsNo * 1:(equalGroupsNo - 1) * 100
461461

462462
for (i in seq_along(tempPercentNames))
463-
stats$addColumnInfo(name = paste0("eg", i), title = gettextf("%gth percentile", round(tempPercentNames[i], 2)), type = "number")
463+
stats$addColumnInfo(name = paste0("eg", i), title = gettextf("%gth percentile", round(tempPercentNames[i], 2)), type = "mixed")
464464
}
465465

466466
if (options$percentiles) {
467467
for (i in percentilesPercentiles) {
468468
if (i >= 0 && i <= 100) {
469-
stats$addColumnInfo(name = paste0("pc", i), title = gettextf("%gth percentile", i), type = "number")
469+
stats$addColumnInfo(name = paste0("pc", i), title = gettextf("%gth percentile", i), type = "mixed")
470470
} else {
471471
.quitAnalysis(gettext("Error in Percentiles, all values should >=0 and <=100"))
472472
}
@@ -568,6 +568,12 @@ DescriptivesInternal <- function(jaspResults, dataset, options) {
568568
rows <- length(column)
569569
na.omitted <- na.omit(column)
570570

571+
# for ordinals, we show the label (a string) rather than the value
572+
mixedRowType <- if (columnType == "scale") "number" else "string"
573+
maybeToString <- if (columnType == "scale") identity else as.character
574+
toMixedCol <- \(x) jaspBase::createMixedColumn(maybeToString(x), mixedRowType)
575+
576+
571577
shouldAddIdenticalFootnote <- all(na.omitted[1] == na.omitted) && (options$skewness || options$kurtosis || options$shapiroWilkTest)
572578

573579
valid <- length(na.omitted)
@@ -591,12 +597,13 @@ DescriptivesInternal <- function(jaspResults, dataset, options) {
591597
resultsCol[["Shapiro-Wilk"]] <- .descriptivesDescriptivesTable_subFunction_OptionChecker(options$shapiroWilkTest, na.omitted, function(param) { res <- try(shapiro.test(param)$statistic); if(isTryError(res)) NaN else res })
592598
resultsCol[["P-value of Shapiro-Wilk"]] <- .descriptivesDescriptivesTable_subFunction_OptionChecker(options$shapiroWilkTest, na.omitted, function(param) { res <- try(shapiro.test(param)$p.value); if(isTryError(res)) NaN else res })
593599
resultsCol[["Sum"]] <- .descriptivesDescriptivesTable_subFunction_OptionChecker(options$sum, na.omitted, sum)
600+
resultsCol[["Range"]] <- .descriptivesDescriptivesTable_subFunction_OptionChecker(options$range, na.omitted, function(param) { range(param)[2] - range(param)[1]})
594601
}
595602

596603
if (columnType == "scale" || columnType == "ordinal") {
597-
resultsCol[["Range"]] <- .descriptivesDescriptivesTable_subFunction_OptionChecker(options$range, na.omitted, function(param) { range(param)[2] - range(param)[1]})
598-
resultsCol[["Minimum"]] <- .descriptivesDescriptivesTable_subFunction_OptionChecker(options$minimum, na.omitted, min)
599-
resultsCol[["Maximum"]] <- .descriptivesDescriptivesTable_subFunction_OptionChecker(options$maximum, na.omitted, max)
604+
if (options$minimum) resultsCol[["Minimum"]] <- toMixedCol(min(na.omitted))
605+
if (options$maximum) resultsCol[["Maximum"]] <- toMixedCol(max(na.omitted))
606+
600607
}
601608
# validator for meanCi, sdCi, and varianceCi
602609
ciOptionChecker <- function(fun, na.omitted, columnType, options, jaspResults, variableName) {
@@ -673,9 +680,10 @@ DescriptivesInternal <- function(jaspResults, dataset, options) {
673680
# Type 3: Nearest even order statistic (SAS default till ca. 2010).
674681
quartileType <- ifelse(columnType == "scale", 7, 3)
675682
q123 <- quantile(na.omitted, c(.25, .5, .75), names = FALSE, type = quartileType)
676-
resultsCol[["q1"]] <- q123[1]
677-
resultsCol[["q2"]] <- q123[2]
678-
resultsCol[["q3"]] <- q123[3]
683+
684+
resultsCol[["q1"]] <- toMixedCol(q123[1])
685+
resultsCol[["q2"]] <- toMixedCol(q123[2])
686+
resultsCol[["q3"]] <- toMixedCol(q123[3])
679687
} else {
680688
resultsCol[["q1"]] <- ""
681689
resultsCol[["q2"]] <- ""
@@ -714,14 +722,14 @@ DescriptivesInternal <- function(jaspResults, dataset, options) {
714722
if (options$quantilesForEqualGroups) {
715723

716724
for (i in seq(equalGroupsNo - 1))
717-
resultsCol[[paste0("eg", i)]] <- quantile(na.omitted, c(i / equalGroupsNo), names=FALSE, type=quartileType)
725+
resultsCol[[paste0("eg", i)]] <- toMixedCol(quantile(na.omitted, c(i / equalGroupsNo), names = FALSE, type = quartileType))
718726

719727
}
720728

721729
if (options$percentiles) {
722730

723731
for (i in percentilesPercentiles)
724-
resultsCol[[paste0("pc", i)]] <- quantile(na.omitted, c(i / 100), names=FALSE, type=quartileType)
732+
resultsCol[[paste0("pc", i)]] <- toMixedCol(quantile(na.omitted, c(i / 100), names = FALSE, type = quartileType))
725733

726734
}
727735
} else {

0 commit comments

Comments
 (0)