Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 18 additions & 20 deletions R/module-statmodel-server.R
Original file line number Diff line number Diff line change
Expand Up @@ -41,32 +41,29 @@ render_all_against_one_inputs = function(output, session, condition_list) {
ns = session$ns

output[[NAMESPACE_STATMODEL$comparisons_all_vs_one_choice]] = renderUI({
selectInput(ns("group3"), "", condition_list())
selectInput(ns(NAMESPACE_STATMODEL$comparisons_all_vs_one_choice), "", condition_list())
})
}

render_custom_pairwise_inputs = function(output, session, condition_list) {
ns = session$ns

output[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] = renderUI({
selectInput(ns("group1"), "Group 1", condition_list())
selectInput(ns(NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1), "Group 1", condition_list())
})

output[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]] = renderUI({
selectInput(ns("group2"), "Group 2", condition_list())
selectInput(ns(NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2), "Group 2", condition_list())
})
}

render_custom_non_pairwise_inputs = function(output, session, condition_list) {
ns = session$ns

output[[NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_name]] = renderUI({
textInput(ns("comp_name"), label = "Comparison Name", value = "")
})

output[[NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights]] = renderUI({
lapply(1:length(condition_list()), function(i) {
list(numericInput(ns(paste0("weight", i)),
list(numericInput(ns(paste0(
NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, i)
),
label = condition_list()[i], value = 0))
})
})
Expand All @@ -77,11 +74,11 @@ render_custom_non_pairwise_inputs = function(output, session, condition_list) {
validate_contrast_inputs = function(input, contrast_mode, condition_list) {
if (contrast_mode == CONSTANTS_STATMODEL$comparison_mode_custom_pairwise) {
validate(
need(input$group1 != input$group2, "Please select different groups")
need(input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] != input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]], "Please select different groups")
)
} else if (contrast_mode == CONSTANTS_STATMODEL$comparison_mode_custom_nonpairwise) {
wt_sum = sum(sapply(1:length(condition_list), function(i) {
input[[paste0("weight", i)]]
input[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, i)]]
}))

validate(
Expand All @@ -91,15 +88,15 @@ validate_contrast_inputs = function(input, contrast_mode, condition_list) {
}

build_custom_pairwise_contrast = function(input, condition_list, contrast, comp_list, row) {
if (input$group1 == input$group2) {
if (input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] == input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]]) {
return(contrast$matrix)
}

index1 = which(condition_list == input$group1)
index2 = which(condition_list == input$group2)
index1 = which(condition_list == input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]])
index2 = which(condition_list == input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]])

comp_list$dList = unique(c(isolate(comp_list$dList),
paste(input$group1, "vs", input$group2, sep = " ")))
paste(input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]], "vs", input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]], sep = " ")))

contrast$row = matrix(row, nrow = 1)
contrast$row[index1] = 1
Expand All @@ -120,18 +117,19 @@ build_custom_pairwise_contrast = function(input, condition_list, contrast, comp_

build_custom_non_pairwise_contrast = function(input, condition_list, contrast, comp_list, row) {
wt_sum = sum(sapply(1:length(condition_list), function(i) {
input[[paste0("weight", i)]]
input[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, i)]]
}))

if (wt_sum != 0) {
return(contrast$matrix)
}

comp_list$dList = unique(c(isolate(comp_list$dList), input$comp_name))
comp_list$dList = unique(c(isolate(comp_list$dList),
input[[NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_name]]))
contrast$row = matrix(row, nrow = 1)

for (index in 1:length(condition_list)) {
contrast$row[index] = input[[paste0("weight", index)]]
contrast$row[index] = input[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, index)]]
}

if (is.null(contrast$matrix)) {
Expand All @@ -148,13 +146,13 @@ build_custom_non_pairwise_contrast = function(input, condition_list, contrast, c
}

build_all_against_one_contrast = function(input, condition_list, contrast, comp_list, row, loadpage_input) {
index3 = which(condition_list == input$group3)
index3 = which(condition_list == input[[NAMESPACE_STATMODEL$comparisons_all_vs_one_choice]])

for (index in 1:length(condition_list)) {
if (index == index3) next

comp_list$dList = c(isolate(comp_list$dList),
paste(condition_list[index], "vs", input$group3, sep = " "))
paste(condition_list[index], "vs", input[[NAMESPACE_STATMODEL$comparisons_all_vs_one_choice]], sep = " "))

contrast$row = matrix(row, nrow = 1)
contrast$row[index] = 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ build_all_pairwise_panel <- function(ns) {
build_custom_nonpairwise_panel <- function(ns) {
tagList(
h5("Non-pairwise Comparison:"),
uiOutput(ns(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_name)),
textInput(ns(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_name),
label = "Comparison Name", value = ""),
uiOutput(ns(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights)),
actionButton(ns(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_submit), "Add"),
actionButton(ns(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_clear), "Clear matrix")
Expand Down
34 changes: 17 additions & 17 deletions tests/testthat/test-module-statmodel-server.R
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,8 @@ test_that("matrix_build creates correct pairwise comparison", {
# Set up custom comparison
inputs <- list()
inputs[[NAMESPACE_STATMODEL$comparison_mode]] <- CONSTANTS_STATMODEL$comparison_mode_custom_pairwise
inputs$group1 <- "Group1"
inputs$group2 <- "Group2"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] = "Group1"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]] = "Group2"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_submit]] <- 1
do.call(session$setInputs, inputs)

Expand Down Expand Up @@ -280,7 +280,7 @@ test_that("matrix_build creates all vs one comparisons", {
# Set up all vs one comparison
inputs <- list()
inputs[[NAMESPACE_STATMODEL$comparison_mode]] <- CONSTANTS_STATMODEL$comparison_mode_all_vs_one
inputs$group3 <- "Group3"
inputs[[NAMESPACE_STATMODEL$comparisons_all_vs_one_choice]] = "Group3"
inputs[[NAMESPACE_STATMODEL$comparisons_all_vs_one_submit]] <- 1
do.call(session$setInputs, inputs)

Expand Down Expand Up @@ -323,10 +323,10 @@ test_that("matrix_build creates custom non-pairwise comparison", {
# Set up custom non-pairwise comparison
inputs <- list()
inputs[[NAMESPACE_STATMODEL$comparison_mode]] <- CONSTANTS_STATMODEL$comparison_mode_custom_nonpairwise
inputs$comp_name <- "CustomComparison"
inputs$weight1 <- 1
inputs$weight2 <- 1
inputs$weight3 <- -2
inputs[[NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_name]] = "CustomComparison"
inputs[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 1)]] = 1
inputs[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 2)]] = 1
inputs[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 3)]] = -2
inputs[[NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_submit]] <- 1
do.call(session$setInputs, inputs)

Expand Down Expand Up @@ -374,8 +374,8 @@ test_that("check_cond validates same group selection", {
# Set up invalid comparison (same groups)
inputs <- list()
inputs[[NAMESPACE_STATMODEL$comparison_mode]] <- CONSTANTS_STATMODEL$comparison_mode_custom_pairwise
inputs$group1 <- "Group1"
inputs$group2 <- "Group1"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] = "Group1"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]] = "Group1"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_submit]] <- 1
do.call(session$setInputs, inputs)

Expand Down Expand Up @@ -412,10 +412,10 @@ test_that("check_cond validates contrast weights sum to zero", {
# Set up invalid weights (don't sum to 0)
inputs <- list()
inputs[[NAMESPACE_STATMODEL$comparison_mode]] <- CONSTANTS_STATMODEL$comparison_mode_custom_nonpairwise
inputs$comp_name <- "BadComparison"
inputs$weight1 <- 1
inputs$weight2 <- 1
inputs$weight3 <- 1
inputs[[NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_name]] = "BadComparison"
inputs[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 1)]] = 1
inputs[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 2)]] = 1
inputs[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 3)]] = 1
inputs[[NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_submit]] <- 1
do.call(session$setInputs, inputs)

Expand Down Expand Up @@ -452,8 +452,8 @@ test_that("contrast_mode change resets matrix", {
# Build a matrix
inputs <- list()
inputs[[NAMESPACE_STATMODEL$comparison_mode]] <- CONSTANTS_STATMODEL$comparison_mode_custom_pairwise
inputs$group1 <- "Group1"
inputs$group2 <- "Group2"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] = "Group1"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]] = "Group2"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_submit]] <- 1
do.call(session$setInputs, inputs)
matrix_build()
Expand Down Expand Up @@ -497,8 +497,8 @@ test_that("matrix doesn't add duplicate rows", {
# Add same comparison twice
inputs <- list()
inputs[[NAMESPACE_STATMODEL$comparison_mode]] <- CONSTANTS_STATMODEL$comparison_mode_custom_pairwise
inputs$group1 <- "Group1"
inputs$group2 <- "Group2"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] = "Group1"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]] = "Group2"
inputs[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_submit]] <- 1
do.call(session$setInputs, inputs)
matrix_build()
Expand Down
40 changes: 23 additions & 17 deletions tests/testthat/test-utils-statmodel-server.R
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,9 @@ test_that("get_experimental_conditions returns GROUP for standard analysis", {
# ============================================================================

test_that("build_custom_pairwise_contrast creates correct matrix", {
input <- list(group1 = "A", group2 = "B")
input <- list()
input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] = "A"
input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]] = "B"
condition_list <- c("A", "B", "C")
contrast <- list(matrix = NULL, row = NULL)
comp_list <- list(dList = NULL)
Expand All @@ -78,7 +80,9 @@ test_that("build_custom_pairwise_contrast creates correct matrix", {
})

test_that("build_custom_pairwise_contrast handles multiple comparisons", {
input <- list(group1 = "C", group2 = "A")
input <- list()
input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] = "C"
input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]] = "A"
condition_list <- c("A", "B", "C")
existing_matrix <- matrix(c(1, -1, 0), nrow = 1)
rownames(existing_matrix) <- "A vs B"
Expand All @@ -98,7 +102,9 @@ test_that("build_custom_pairwise_contrast handles multiple comparisons", {
})

test_that("build_custom_pairwise_contrast returns unchanged matrix for same groups", {
input <- list(group1 = "A", group2 = "A")
input <- list()
input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice1]] = "A"
input[[NAMESPACE_STATMODEL$comparisons_custom_pairwise_choice2]] = "A"
condition_list <- c("A", "B", "C")
existing_matrix <- matrix(c(1, -1, 0), nrow = 1)

Expand All @@ -118,12 +124,11 @@ test_that("build_custom_pairwise_contrast returns unchanged matrix for same grou
# ============================================================================

test_that("build_custom_non_pairwise_contrast creates correct matrix", {
input <- list(
weight1 = 0.5,
weight2 = 0.5,
weight3 = -1,
comp_name = "AB vs C"
)
input <- list()
input[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 1)]] = 0.5
input[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 2)]] = 0.5
input[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 3)]] = -1
input[[NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_name]] = "AB vs C"
condition_list <- c("A", "B", "C")
contrast <- list(matrix = NULL, row = NULL)
comp_list <- list(dList = NULL)
Expand All @@ -141,12 +146,11 @@ test_that("build_custom_non_pairwise_contrast creates correct matrix", {
})

test_that("build_custom_non_pairwise_contrast rejects non-zero sum", {
input <- list(
weight1 = 1,
weight2 = 1,
weight3 = 1,
comp_name = "Invalid"
)
input <- list()
input[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 1)]] = 1
input[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 2)]] = 1
input[[paste0(NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_weights, 3)]] = 1
input[[NAMESPACE_STATMODEL$comparisons_custom_nonpairwise_name]] = "invalid"
condition_list <- c("A", "B", "C")
existing_matrix <- matrix(c(1, -1, 0), nrow = 1)

Expand All @@ -166,7 +170,8 @@ test_that("build_custom_non_pairwise_contrast rejects non-zero sum", {
# ============================================================================

test_that("build_all_against_one_contrast creates all comparisons", {
input <- list(group3 = "Control")
input <- list()
input[[NAMESPACE_STATMODEL$comparisons_all_vs_one_choice]] = "Control"
condition_list <- c("TreatA", "TreatB", "Control")
contrast <- list(matrix = NULL, row = NULL)
comp_list <- list(dList = NULL)
Expand All @@ -187,7 +192,8 @@ test_that("build_all_against_one_contrast creates all comparisons", {
})

test_that("build_all_against_one_contrast handles single comparison", {
input <- list(group3 = "B")
input <- list()
input[[NAMESPACE_STATMODEL$comparisons_all_vs_one_choice]] = "B"
condition_list <- c("A", "B")
contrast <- list(matrix = NULL, row = NULL)
comp_list <- list(dList = NULL)
Expand Down
Loading