diff --git a/DESCRIPTION b/DESCRIPTION index e8780ed..b5c7227 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: SummaryTables Title: Publication-Ready Summary Tables for Jamovi -Version: 1.3.0 +Version: 1.3.1 Authors@R: person("Nour Edin", "Darwish", , "nouredindarwish@gmail.com", role = c("aut", "cre"), comment = c(ORCID = "0009-0009-5527-4539")) diff --git a/NEWS.md b/NEWS.md index 9944330..8d61c44 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +## SummaryTables 1.3.1 + +* Improved the message shown when required variables are missing. + ## SummaryTables 1.3.0 * Added Standardized Coefficients for Linear Regression analyses (both Univariable and Multivariable). diff --git a/R/tblcontinuous.b.R b/R/tblcontinuous.b.R index 6c359fc..6fdc911 100644 --- a/R/tblcontinuous.b.R +++ b/R/tblcontinuous.b.R @@ -8,7 +8,7 @@ tblContinuousClass <- R6::R6Class( if (is.null(contVar) || length(varsCat) == 0) { renderPlaceholder( - "Add a continuous variable and at least one categorical variable to generate the table", # nolint + "Add a Continuous Variable and at least one Categorical Variable to generate the table", # nolint self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tblcross.b.R b/R/tblcross.b.R index dd7f8f4..9e216bb 100644 --- a/R/tblcross.b.R +++ b/R/tblcross.b.R @@ -7,7 +7,7 @@ tblCrossClass <- R6::R6Class( col <- self$options$col if (is.null(row) || is.null(col)) { renderPlaceholder( - "Add a row variable and a column variable to generate the table", + "Add a Row Variable and a Column Variable to generate the table", self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tbllikert.b.R b/R/tbllikert.b.R index 9208a1a..332d9d7 100644 --- a/R/tbllikert.b.R +++ b/R/tbllikert.b.R @@ -6,7 +6,7 @@ tblLikertClass <- R6::R6Class( vars <- self$options$vars if (length(vars) == 0) { renderPlaceholder( - "Add Likert scale variables to generate the table", + "Add at least one Likert-scale Variable to generate the table", self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tblregcox.b.R b/R/tblregcox.b.R index 76af27c..dc37782 100644 --- a/R/tblregcox.b.R +++ b/R/tblregcox.b.R @@ -9,7 +9,7 @@ tblRegCoxClass <- R6::R6Class( if (is.null(elapsed) || is.null(event) || length(terms) == 0) { renderPlaceholder( - "Add a time variable, an event variable, and at least one term to generate the table", #nolint + "Add a Time variable, an Event variable, and at least one Model Term to generate the table", #nolint self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tblreglinear.b.R b/R/tblreglinear.b.R index 1fcc9c7..4344017 100644 --- a/R/tblreglinear.b.R +++ b/R/tblreglinear.b.R @@ -8,7 +8,7 @@ tblRegLinearClass <- R6::R6Class( if (is.null(dep) || length(terms) == 0) { renderPlaceholder( - "Add a dependent variable and at least one term to generate the table", #nolint + "Add a Dependent Variable and at least one Model Term to generate the table", #nolint self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tblreglogistic.b.R b/R/tblreglogistic.b.R index eb19f81..1f4162a 100644 --- a/R/tblreglogistic.b.R +++ b/R/tblreglogistic.b.R @@ -8,7 +8,7 @@ tblRegLogisticClass <- R6::R6Class( if (is.null(dep) || length(terms) == 0) { renderPlaceholder( - "Add a dependent variable and at least one term to generate the table", #nolint + "Add a Dependent Variable and at least one Model Term to generate the table", #nolint self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tblsummary.b.R b/R/tblsummary.b.R index 892fe05..e0a72cd 100644 --- a/R/tblsummary.b.R +++ b/R/tblsummary.b.R @@ -10,7 +10,7 @@ tblSummaryClass <- R6::R6Class( if (!hasCont && !hasCat) { renderPlaceholder( - "Add continuous or categorical variables to generate the table", + "Add at least one Continuous or Categorical Variable to generate the table", self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tblsurvfit.b.R b/R/tblsurvfit.b.R index 87a15f7..ed8fbbe 100644 --- a/R/tblsurvfit.b.R +++ b/R/tblsurvfit.b.R @@ -8,7 +8,7 @@ tblSurvfitClass <- R6::R6Class( if (is.null(elapsed) || is.null(event)) { renderPlaceholder( - "Add a time variable and an event variable to generate the table", + "Add a Time variable and an Event variable to generate the table", self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tbluniregcox.b.R b/R/tbluniregcox.b.R index f2e22d2..1b552cc 100644 --- a/R/tbluniregcox.b.R +++ b/R/tbluniregcox.b.R @@ -14,7 +14,7 @@ tblUniRegCoxClass <- R6::R6Class( (length(covs) == 0 && length(factors) == 0) ) { renderPlaceholder( - "Add a time variable, an event variable, and at least one covariate or factor to generate the table", #nolint + "Add a Time variable, an Event variable, and at least one Covariate or Factor to generate the table", #nolint self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tblunireglinear.b.R b/R/tblunireglinear.b.R index 9935e1e..2f0bc52 100644 --- a/R/tblunireglinear.b.R +++ b/R/tblunireglinear.b.R @@ -9,7 +9,7 @@ tblUniRegLinearClass <- R6::R6Class( if (is.null(dep) || (length(covs) == 0 && length(factors) == 0)) { renderPlaceholder( - "Add a dependent variable and at least one covariate or factor to generate the table", #nolint + "Add a Dependent Variable and at least one Covariate or Factor to generate the table", #nolint self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/R/tblunireglogistic.b.R b/R/tblunireglogistic.b.R index fd3714d..ab31f44 100644 --- a/R/tblunireglogistic.b.R +++ b/R/tblunireglogistic.b.R @@ -9,7 +9,7 @@ tblUniRegLogisticClass <- R6::R6Class( if (is.null(dep) || (length(covs) == 0 && length(factors) == 0)) { renderPlaceholder( - "Add a dependent variable and at least one covariate or factor to generate the table", #nolint + "Add a Dependent Variable and at least one Covariate or Factor to generate the table", #nolint self$results$tbl ) self$results$status$setVisible(FALSE) diff --git a/docs/user-guide.md b/docs/user-guide.md index 3c539c7..acd4f1a 100644 --- a/docs/user-guide.md +++ b/docs/user-guide.md @@ -11,8 +11,8 @@ This guide highlights important notes, default behaviors, and specific options y A quick reference guide for choosing the right table based on your data and goals: -* **Table 1 / Main Summary:** Use the **Summary Table** without a grouping variable for a general overview. -* **Categorical Outcome:** Use the **Summary Table** with your outcome assigned to the **Grouping Variable**. +* **Table 1 / Main Summary:** Use the **Summary Table** without adding a **Grouping Variable** for a general overview. +* **Categorical Outcome:** Use the **Summary Table** with your outcome added to the **Grouping Variable**. * **Continuous Outcome:** Use the **Continuous Table**. * **Only Two Categorical Variables:** Use the **Cross Table** for a straightforward cross-tabulation. * **Likert Scale Data:** Use the **Likert Table**. @@ -38,7 +38,7 @@ To prevent this snowballing delay, you can enable *Manual Run Mode*. ![Screenshot showing the Run manually option](assets/run-manually.png){ loading=lazy width="500" } -Checking the **"Run manually"** option disables the auto-run behavior and activates the **"Run"** button. This allows you to add all 10 variables at once and set all your options without triggering any calculations. Once everything is set up, click **"Run"** to calculate the final table exactly once—fitting just the *10 models* you actually need. This saves a huge amount of time, especially for computationally heavy tables like regressions. +Checking the **Run manually** option disables the auto-run behavior and activates the **Run** button. This allows you to add all 10 variables at once and set all your options without triggering any calculations. Once everything is set up, click **Run** to calculate the final table exactly once—fitting just the *10 models* you actually need. This saves a huge amount of time, especially for computationally heavy tables like regressions. ### Save to Word @@ -71,20 +71,20 @@ You can independently set the rounding rules for various elements in your tables #### P-Values -The p-value dropdown controls the rounding of *large* p-values, while precision automatically increases as p-values get smaller. +The p-value **Decimal places** dropdown controls the rounding of *large* p-values, while precision automatically increases as p-values get smaller.
![The large p-value decimal places selection dropdown showing Auto and numerical precision options](assets/pvalue-digits.png){ loading=lazy width="500" }
* **Auto (Default):** Depends on the theme (the default theme uses **"1"**). -* **1:** Large p-values are rounded to one decimal place. Precision increases as p-values decrease, and very small values are shown as `<0.001`. -* **2:** Large p-values are rounded to two decimal places. Precision increases as p-values decrease, and very small values are shown as `<0.001`. -* **3:** Large p-values are rounded to three decimal places. Precision increases as p-values decrease, and very small values are shown as `<0.001`. +* **1:** Large p-values are rounded to 1 decimal place. Precision automatically increases to 2, then 3 decimal places as values get smaller. Extremes are shown as `>0.9` and `<0.001`. +* **2:** Large p-values are rounded to 2 decimal places. Precision automatically increases to 3 decimal places as values get smaller. Extremes are shown as `>0.99` and `<0.001`. +* **3:** All p-values are rounded to 3 decimal places. Extremes are shown as `>0.999` and `<0.001`. ### Statistical Tests -The module automatically selects appropriate statistical tests based on your data types and the number of groups across the **Summary Table**, **Continuous Table**, and **Cross Table**. You can configure this behavior in the **Default test** dropdowns: +The module automatically selects appropriate statistical tests based on your data types and the number of groups across the **Summary Table**, **Continuous Table**, and **Cross Table**. You can configure this behavior using the **Default test** dropdowns: #### Continuous Variables @@ -96,7 +96,7 @@ The module automatically selects appropriate statistical tests based on your dat * **Non-parametric:** Uses the Wilcoxon rank-sum test for 2 groups, or Kruskal-Wallis rank-sum test for >2 groups. !!! info "Grouping Variable in the Continuous Table" - If you assign a **Grouping Variable** in the **Continuous Table**, the module automatically calculates p-values using a two-way ANOVA. In this specific configuration, no other statistical tests can be applied. + If you add a **Grouping Variable** in the **Continuous Table**, the module automatically calculates p-values using a two-way ANOVA. In this specific configuration, no other statistical tests can be applied. #### Categorical Variables @@ -121,14 +121,14 @@ If you want specific tests for specific variables, you can manually select a dif ### Summary Table: Difference !!! info "SMD Method Calculation" - When you select the **SMD** option as your **Difference** method, the values are calculated using the [`smd` R package](https://bsaul.github.io/smd/index.html). + When you select **SMD** as your **Difference** method, the values are calculated using the [`smd` R package](https://bsaul.github.io/smd/index.html).
![jamovi interface showing the SMD method selected under the Difference options](assets/difference-smd.png){ loading=lazy width="500" }
!!! failure "Multiple P-Value Columns Error" - If you select a **Difference** method that generates a p-value and you also check **P-value** under the general **P-value** section, an error will occur. The table cannot display multiple p-value columns simultaneously. + If you select a **Difference** method that generates a p-value and you also check the **P-value** option under the general **P-value** section, an error will occur. The table cannot display multiple p-value columns simultaneously.
![Error message displayed in jamovi when attempting to add multiple p-value columns](assets/multiple-pvalues-error.png){ loading=lazy width="500" } @@ -136,10 +136,10 @@ If you want specific tests for specific variables, you can manually select a dif ### Regression Tables: Univariable vs. Multivariable -It is important to understand the fundamental difference in how the **Univariable Regression** and **Multivariable Regression** tables are constructed: +It is important to understand the fundamental difference in how **Univariable Regression** and **Multivariable Regression** tables are constructed: -* **Univariable Regression:** Fits *one separate model per predictor*. If you add 5 variables across the **Covariates** and **Factors** lists, the module will fit 5 distinct simple regression models (each predicting the dependent variable using just that one predictor) and combine the results into a single table. -* **Multivariable Regression:** Fits *one single model containing all predictors*. If you add 5 variables across the **Covariates** and **Factors** lists, the module will fit a single model where all 5 variables are included simultaneously, adjusting for each other. +* **Univariable Regression:** Fits *one separate model per predictor*. If you add 5 variables to **Covariates** and **Factors**, the module will fit 5 distinct simple regression models (each predicting the dependent variable using just that one predictor) and combine the results into a single table. +* **Multivariable Regression:** Fits *one single model containing all predictors*. If you add 5 variables to **Covariates** and **Factors**, the module will fit a single model where all 5 variables are included simultaneously, adjusting for each other. ### Regression Tables: Standardized Coefficients @@ -154,7 +154,7 @@ For linear regression models, SummaryTables allows you to report standardized co ### Survival and Cox Regression: Event Variable Coding -When using the **Survival Table** or **Cox Regression** analyses, the **Event variable** must be coded correctly: +When using the **Survival Table** or **Cox Regression** analyses, the **Event** variable must be coded correctly:
![jamovi interface showing the Event variable assignment and Event level selection](assets/event-variable-options.png){ loading=lazy width="500" } diff --git a/jamovi/0000.yaml b/jamovi/0000.yaml index b70fbfb..259a1ce 100644 --- a/jamovi/0000.yaml +++ b/jamovi/0000.yaml @@ -1,12 +1,12 @@ --- title: Publication-Ready Summary Tables name: SummaryTables -version: 1.3.0 +version: 1.3.1 jms: '1.0' authors: - Nour Edin Darwish maintainer: Nour Edin Darwish -date: '2026-05-23' +date: '2026-05-24' type: R description: >- A comprehensive module for creating publication-ready summary and regression