## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5 ) ## ----setup, message=FALSE, warning=FALSE-------------------------------------- library(twoCoprimary) library(dplyr) library(tidyr) library(knitr) ## ----table4_homma------------------------------------------------------------- # Recreate Homma and Yoshida (2025) Table 4 library(dplyr) library(tidyr) library(readr) param_grid_bin_exact_ss <- tibble( p11 = 0.54, p12 = 0.54, p21 = 0.25, p22 = 0.25 ) result_bin_exact_ss <- do.call( bind_rows, lapply(c("Chisq", "Fisher", "Z-pool", "Boschloo"), function(test) { do.call( bind_rows, lapply(1:2, function(r) { design_table( param_grid = param_grid_bin_exact_ss, rho_values = c(0, 0.3, 0.5, 0.8), r = r, alpha = 0.025, beta = 0.1, endpoint_type = "binary", Test = test ) %>% mutate(alpha = 0.025, r = r, Test = test) }) ) }) ) %>% pivot_longer( cols = starts_with("rho_"), names_to = "rho", values_to = "N", names_transform = list(rho = parse_number) ) %>% select(r, rho, Test, N) %>% pivot_wider(names_from = Test, values_from = N) %>% as.data.frame() kable(result_bin_exact_ss, caption = "Table 4: Total Sample Size (N) for Two Co-Primary Binary Endpoints (α = 0.025, 1-β = 0.90)^a,b^", digits = 1, col.names = c("r", "ρ", "Chisq", "Fisher", "Z-pool", "Boschloo")) ## ----example1----------------------------------------------------------------- # Calculate exact power using Fisher's exact test result_fisher <- power2BinaryExact( n1 = 50, n2 = 50, p11 = 0.70, p12 = 0.65, p21 = 0.50, p22 = 0.45, rho1 = 0.5, rho2 = 0.5, alpha = 0.025, Test = "Fisher" ) print(result_fisher) ## ----example2----------------------------------------------------------------- # Calculate required sample size using Boschloo's test result_ss <- ss2BinaryExact( p11 = 0.70, p12 = 0.65, p21 = 0.50, p22 = 0.45, rho1 = 0.5, rho2 = 0.5, r = 1, alpha = 0.025, beta = 0.2, Test = "Boschloo" ) print(result_ss) ## ----example3----------------------------------------------------------------- # Compare different exact test methods test_methods <- c("Chisq", "Fisher", "Fisher-midP", "Z-pool", "Boschloo") comparison <- lapply(test_methods, function(test) { result <- ss2BinaryExact( p11 = 0.50, p12 = 0.40, p21 = 0.20, p22 = 0.10, rho1 = 0.7, rho2 = 0.6, r = 1, alpha = 0.025, beta = 0.2, Test = test ) data.frame( Test = test, n2 = result$n2, N = result$N ) }) comparison_table <- bind_rows(comparison) kable(comparison_table, caption = "Sample Size Comparison Across Test Methods", col.names = c("Test Method", "n per group", "N total")) ## ----example4----------------------------------------------------------------- # Calculate sample size for different correlation values rho_values <- c(0, 0.3, 0.5, 0.8) correlation_effect <- lapply(rho_values, function(rho) { result <- ss2BinaryExact( p11 = 0.70, p12 = 0.60, p21 = 0.40, p22 = 0.30, rho1 = rho, rho2 = rho, r = 1, alpha = 0.025, beta = 0.2, Test = "Fisher" ) data.frame( rho = rho, n2 = result$n2, N = result$N ) }) rho_table <- bind_rows(correlation_effect) kable(rho_table, caption = "Impact of Correlation on Sample Size (Fisher's Test)", col.names = c("ρ", "n per group", "N total")) ## ----example5----------------------------------------------------------------- # Exact method (Chisq) exact_result <- ss2BinaryExact( p11 = 0.60, p12 = 0.40, p21 = 0.30, p22 = 0.10, rho1 = 0.5, rho2 = 0.5, r = 1, alpha = 0.025, beta = 0.1, Test = "Chisq" ) # Asymptotic method (AN) asymp_result <- ss2BinaryApprox( p11 = 0.60, p12 = 0.40, p21 = 0.30, p22 = 0.10, rho1 = 0.5, rho2 = 0.5, r = 1, alpha = 0.025, beta = 0.1, Test = "AN" ) comparison_exact_asymp <- data.frame( Method = c("Exact (Chisq)", "Asymptotic (AN)"), n_per_group = c(exact_result$n2, asymp_result$n2), N_total = c(exact_result$N, asymp_result$N), Difference = c(0, asymp_result$N - exact_result$N) ) kable(comparison_exact_asymp, caption = "Comparison: Exact vs Asymptotic Methods", col.names = c("Method", "n per group", "N total", "Difference"))