Postoperative nausea and vomiting (PONV) and pruritus are common side effects associated with intrathecal morphine administration during cesarean delivery, affecting up to 80% and 83% of patients, respectively. In their recent randomized controlled trial, Worravitudomsuk et al. (2025) compared the efficacy of palonosetron and ondansetron for the prevention of intrathecal morphine-induced PONV and pruritus. While the study demonstrated a significant reduction in these side effects with both medications compared to placebo, it found no significant difference between palonosetron and ondansetron.
However, the study administered a 200 mcg dose of intrathecal morphine, which exceeds the ceiling dose of 100 mcg recommended for optimal analgesia with fewer side effects. Higher morphine doses increase the baseline incidence of PONV and pruritus, potentially inflating the sample size calculation and affecting the number needed to treat (NNT) estimates. This analysis recalculates the sample size and NNT considering the lower baseline incidences associated with a 100 mcg dose of intrathecal morphine.
# Install and load the pwr package if not already installed
if (!require(pwr)) {
install.packages("pwr")
}
## Loading required package: pwr
library(pwr)
# Original incidences with 200 mcg morphine (Worravitudomsuk study)
incidence_n_nvpo_200mcg <- 0.50 # NVPO in placebo group with 200 mcg
incidence_o_nvpo_200mcg <- 0.30 # NVPO in ondansetron group with 200 mcg
incidence_p_nvpo_200mcg <- 0.10 # NVPO in palonosetron group with 200 mcg
incidence_n_pruritus_200mcg <- 0.70 # Pruritus in placebo group with 200 mcg
incidence_o_pruritus_200mcg <- 0.40 # Pruritus in ondansetron group with 200 mcg
incidence_p_pruritus_200mcg <- 0.10 # Pruritus in palonosetron group with 200 mcg
# Odds ratios (OR) for low-dose morphine (<=100 mcg)
or_nvpo_low <- 0.44 # NVPO risk reduction with low-dose morphine
or_pruritus_low <- 0.34 # Pruritus risk reduction with low-dose morphine
# Calculate expected incidences with low-dose morphine using OR
incidence_n_nvpo_100mcg <- incidence_n_nvpo_200mcg * or_nvpo_low / (1 - incidence_n_nvpo_200mcg + (incidence_n_nvpo_200mcg * or_nvpo_low))
incidence_o_nvpo_100mcg <- incidence_o_nvpo_200mcg * or_nvpo_low / (1 - incidence_o_nvpo_200mcg + (incidence_o_nvpo_200mcg * or_nvpo_low))
incidence_p_nvpo_100mcg <- incidence_p_nvpo_200mcg * or_nvpo_low / (1 - incidence_p_nvpo_200mcg + (incidence_p_nvpo_200mcg * or_nvpo_low))
incidence_n_pruritus_100mcg <- incidence_n_pruritus_200mcg * or_pruritus_low / (1 - incidence_n_pruritus_200mcg + (incidence_n_pruritus_200mcg * or_pruritus_low))
incidence_o_pruritus_100mcg <- incidence_o_pruritus_200mcg * or_pruritus_low / (1 - incidence_o_pruritus_200mcg + (incidence_o_pruritus_200mcg * or_pruritus_low))
incidence_p_pruritus_100mcg <- incidence_p_pruritus_200mcg * or_pruritus_low / (1 - incidence_p_pruritus_200mcg + (incidence_p_pruritus_200mcg * or_pruritus_low))
# Display adjusted incidences
cat("Expected NVPO incidence with 100 mcg morphine (placebo):", round(incidence_n_nvpo_100mcg * 100, 1), "%\n")
## Expected NVPO incidence with 100 mcg morphine (placebo): 30.6 %
cat("Expected NVPO incidence with 100 mcg morphine (ondansetron):", round(incidence_o_nvpo_100mcg * 100, 1), "%\n")
## Expected NVPO incidence with 100 mcg morphine (ondansetron): 15.9 %
cat("Expected NVPO incidence with 100 mcg morphine (palonosetron):", round(incidence_p_nvpo_100mcg * 100, 1), "%\n")
## Expected NVPO incidence with 100 mcg morphine (palonosetron): 4.7 %
cat("\nExpected pruritus incidence with 100 mcg morphine (placebo):", round(incidence_n_pruritus_100mcg * 100, 1), "%\n")
##
## Expected pruritus incidence with 100 mcg morphine (placebo): 44.2 %
cat("Expected pruritus incidence with 100 mcg morphine (ondansetron):", round(incidence_o_pruritus_100mcg * 100, 1), "%\n")
## Expected pruritus incidence with 100 mcg morphine (ondansetron): 18.5 %
cat("Expected pruritus incidence with 100 mcg morphine (palonosetron):", round(incidence_p_pruritus_100mcg * 100, 1), "%\n")
## Expected pruritus incidence with 100 mcg morphine (palonosetron): 3.6 %
# Create a data frame with the expected incidences for NVPO and pruritus
results_table <- data.frame(
Group = c("Placebo", "Ondansetron", "Palonosetron"),
NVPO_100mcg = c("30.6%", "15.9%", "4.7%"),
Pruritus_100mcg = c("44.2%", "18.5%", "3.6%")
)
# Display the table in RMarkdown format
library(knitr)
kable(results_table, caption = "Expected Incidence of NVPO and Pruritus with 100 mcg Intrathecal Morphine by Group")
| Group | NVPO_100mcg | Pruritus_100mcg |
|---|---|---|
| Placebo | 30.6% | 44.2% |
| Ondansetron | 15.9% | 18.5% |
| Palonosetron | 4.7% | 3.6% |
The recalculation of the expected incidence rates of postoperative nausea and vomiting (PONV) and pruritus when using 100 mcg of intrathecal morphine, based on the odds ratios reported in the literature (OR for PONV: 0.44, 95% CI 0.27–0.73; OR for pruritus: 0.34, 95% CI 0.20–0.59), revealed a substantial reduction compared to the original study using 200 mcg. Specifically, the estimated PONV incidence in the placebo group would decrease from 50% to 30.6%, while the incidence of pruritus would drop from 70% to 44.2%. Similar reductions were observed in the ondansetron and palonosetron groups. This decrease in baseline incidence directly impacts the calculation of the sample size required to detect a clinically meaningful difference.
# Load required library
if (!require(pwr)) {
install.packages("pwr")
}
library(pwr)
# Adjusted incidences with 100 mcg morphine for NVPO
incidence_placebo_nvpo <- 0.306 # Placebo (30.6%)
incidence_ondansetron_nvpo <- 0.159 # Ondansetron (15.9%)
incidence_palonosetron_nvpo <- 0.047 # Palonosetron (4.7%)
# Calculate effect sizes (h of Cohen)
effect_size_n_o_nvpo <- ES.h(incidence_placebo_nvpo, incidence_ondansetron_nvpo)
effect_size_n_p_nvpo <- ES.h(incidence_placebo_nvpo, incidence_palonosetron_nvpo)
effect_size_o_p_nvpo <- ES.h(incidence_ondansetron_nvpo, incidence_palonosetron_nvpo)
# Parameters for sample size calculation
alpha <- 0.05 # Type I error
power <- 0.80 # 80% power
# Sample size calculation for NVPO comparisons
n_n_o_nvpo <- ceiling(pwr.2p.test(h = effect_size_n_o_nvpo, sig.level = alpha, power = power)$n)
n_n_p_nvpo <- ceiling(pwr.2p.test(h = effect_size_n_p_nvpo, sig.level = alpha, power = power)$n)
n_o_p_nvpo <- ceiling(pwr.2p.test(h = effect_size_o_p_nvpo, sig.level = alpha, power = power)$n)
# Maximum sample size per group
n_max_nvpo <- max(n_n_o_nvpo, n_n_p_nvpo, n_o_p_nvpo)
# Adjust for 10% dropout rate
n_total_nvpo <- ceiling(n_max_nvpo * 1.10)
# Display results
cat("Sample size per group for NVPO with 100 mcg morphine:\n")
## Sample size per group for NVPO with 100 mcg morphine:
cat("Placebo vs Ondansetron:", n_n_o_nvpo, "per group\n")
## Placebo vs Ondansetron: 127 per group
cat("Placebo vs Palonosetron:", n_n_p_nvpo, "per group\n")
## Placebo vs Palonosetron: 30 per group
cat("Ondansetron vs Palonosetron:", n_o_p_nvpo, "per group\n")
## Ondansetron vs Palonosetron: 107 per group
cat("\nMaximum sample size required per group:", n_max_nvpo, "\n")
##
## Maximum sample size required per group: 127
cat("Total sample size per group with 10% dropout:", n_total_nvpo, "\n")
## Total sample size per group with 10% dropout: 140
# Cargar la librería necesaria
library(knitr)
# Crear un data frame con los resultados del tamaño de muestra
sample_size_table <- data.frame(
Comparison = c("Placebo vs Ondansetron", "Placebo vs Palonosetron", "Ondansetron vs Palonosetron", "Maximum Sample Size per Group", "Total Sample Size per Group (10% dropout)"),
Sample_Size = c(127, 30, 107, 127, 140)
)
# Mostrar la tabla en formato claro
kable(sample_size_table, caption = "Sample Size per Group for NVPO with 100 mcg Intrathecal Morphine")
| Comparison | Sample_Size |
|---|---|
| Placebo vs Ondansetron | 127 |
| Placebo vs Palonosetron | 30 |
| Ondansetron vs Palonosetron | 107 |
| Maximum Sample Size per Group | 127 |
| Total Sample Size per Group (10% dropout) | 140 |
# New study incidences for 200 mcg morphine
# PONV
incidence_p_nvpo_200mcg <- 0.263 # Palonosetron group (26.3%)
incidence_o_nvpo_200mcg <- 0.347 # Ondansetron group (34.7%)
incidence_n_nvpo_200mcg <- 0.50 # Placebo group (50.0%)
# Pruritus
incidence_p_pruritus_200mcg <- 0.697 # Palonosetron group (69.7%)
incidence_o_pruritus_200mcg <- 0.765 # Ondansetron group (76.5%)
incidence_n_pruritus_200mcg <- 0.87 # Placebo group (87.0%)
# Odds ratios for low-dose morphine (<=100 mcg)
or_nvpo_low <- 0.44 # NVPO risk reduction with low-dose morphine
or_pruritus_low <- 0.34 # Pruritus risk reduction with low-dose morphine
# Calculate expected incidences with 100 mcg morphine using OR
# PONV
incidence_n_nvpo_100mcg <- incidence_n_nvpo_200mcg * or_nvpo_low / (1 - incidence_n_nvpo_200mcg + (incidence_n_nvpo_200mcg * or_nvpo_low))
incidence_o_nvpo_100mcg <- incidence_o_nvpo_200mcg * or_nvpo_low / (1 - incidence_o_nvpo_200mcg + (incidence_o_nvpo_200mcg * or_nvpo_low))
incidence_p_nvpo_100mcg <- incidence_p_nvpo_200mcg * or_nvpo_low / (1 - incidence_p_nvpo_200mcg + (incidence_p_nvpo_200mcg * or_nvpo_low))
# Pruritus
incidence_n_pruritus_100mcg <- incidence_n_pruritus_200mcg * or_pruritus_low / (1 - incidence_n_pruritus_200mcg + (incidence_n_pruritus_200mcg * or_pruritus_low))
incidence_o_pruritus_100mcg <- incidence_o_pruritus_200mcg * or_pruritus_low / (1 - incidence_o_pruritus_200mcg + (incidence_o_pruritus_200mcg * or_pruritus_low))
incidence_p_pruritus_100mcg <- incidence_p_pruritus_200mcg * or_pruritus_low / (1 - incidence_p_pruritus_200mcg + (incidence_p_pruritus_200mcg * or_pruritus_low))
# Calculate ARR and NNT for PONV
arr_p_nvpo <- incidence_n_nvpo_100mcg - incidence_p_nvpo_100mcg
arr_o_nvpo <- incidence_n_nvpo_100mcg - incidence_o_nvpo_100mcg
nnt_p_nvpo <- 1 / arr_p_nvpo
nnt_o_nvpo <- 1 / arr_o_nvpo
# Calculate ARR and NNT for pruritus
arr_p_pruritus <- incidence_n_pruritus_100mcg - incidence_p_pruritus_100mcg
arr_o_pruritus <- incidence_n_pruritus_100mcg - incidence_o_pruritus_100mcg
nnt_p_pruritus <- 1 / arr_p_pruritus
nnt_o_pruritus <- 1 / arr_o_pruritus
# Display results
cat("Expected NVPO incidence with 100 mcg morphine (Placebo):", round(incidence_n_nvpo_100mcg * 100, 1), "%\n")
## Expected NVPO incidence with 100 mcg morphine (Placebo): 30.6 %
cat("Expected NVPO incidence with 100 mcg morphine (Ondansetron):", round(incidence_o_nvpo_100mcg * 100, 1), "%\n")
## Expected NVPO incidence with 100 mcg morphine (Ondansetron): 19 %
cat("Expected NVPO incidence with 100 mcg morphine (Palonosetron):", round(incidence_p_nvpo_100mcg * 100, 1), "%\n\n")
## Expected NVPO incidence with 100 mcg morphine (Palonosetron): 13.6 %
cat("Expected pruritus incidence with 100 mcg morphine (Placebo):", round(incidence_n_pruritus_100mcg * 100, 1), "%\n")
## Expected pruritus incidence with 100 mcg morphine (Placebo): 69.5 %
cat("Expected pruritus incidence with 100 mcg morphine (Ondansetron):", round(incidence_o_pruritus_100mcg * 100, 1), "%\n")
## Expected pruritus incidence with 100 mcg morphine (Ondansetron): 52.5 %
cat("Expected pruritus incidence with 100 mcg morphine (Palonosetron):", round(incidence_p_pruritus_100mcg * 100, 1), "%\n\n")
## Expected pruritus incidence with 100 mcg morphine (Palonosetron): 43.9 %
cat("NNT for NVPO with Palonosetron (100 mcg morphine):", round(nnt_p_nvpo, 1), "\n")
## NNT for NVPO with Palonosetron (100 mcg morphine): 5.9
cat("NNT for NVPO with Ondansetron (100 mcg morphine):", round(nnt_o_nvpo, 1), "\n\n")
## NNT for NVPO with Ondansetron (100 mcg morphine): 8.6
cat("NNT for Pruritus with Palonosetron (100 mcg morphine):", round(nnt_p_pruritus, 1), "\n")
## NNT for Pruritus with Palonosetron (100 mcg morphine): 3.9
cat("NNT for Pruritus with Ondansetron (100 mcg morphine):", round(nnt_o_pruritus, 1), "\n")
## NNT for Pruritus with Ondansetron (100 mcg morphine): 5.9
# Cargar la librería necesaria
library(knitr)
# Crear un data frame con los resultados
results_table <- data.frame(
Group = c("Placebo", "Ondansetron", "Palonosetron"),
NVPO_Incidence = c("30.6%", "19.0%", "13.6%"),
Pruritus_Incidence = c("69.5%", "52.5%", "43.9%"),
NNT_NVPO = c("-", "8.6", "5.9"),
NNT_Pruritus = c("-", "5.9", "3.9")
)
# Mostrar la tabla en formato claro
kable(results_table, caption = "Expected Incidence and NNT with 100 mcg Intrathecal Morphine by Group")
| Group | NVPO_Incidence | Pruritus_Incidence | NNT_NVPO | NNT_Pruritus |
|---|---|---|---|---|
| Placebo | 30.6% | 69.5% | - | - |
| Ondansetron | 19.0% | 52.5% | 8.6 | 5.9 |
| Palonosetron | 13.6% | 43.9% | 5.9 | 3.9 |
The recalculated NNT values based on the expected incidences with 100 mcg of intrathecal morphine demonstrate notable differences compared to the original study by Worravitudomsuk et al. In the original study, the NNT for PONV prevention with palonosetron was 4.2, while the recalculated NNT under lower morphine doses increased to 5.9. Similarly, the NNT for pruritus prevention was initially 5.8 but decreased to 3.9 with the adjusted incidences. These discrepancies highlight the influence of baseline incidence on treatment effect estimations, underscoring the importance of appropriate opioid dosing when designing clinical trials and interpreting efficacy outcomes.
Fleiss JL, Levin B, Paik MC. Statistical Methods for Rates and Proportions. 3rd ed. New York: Wiley-Interscience; 2003. p. 64-73.
Altman DG. Practical Statistics for Medical Research. 1st ed. London: Chapman and Hall; 1991. p. 456-61.
Bender R, Lange S. Adjusting for multiple testing—when and how? J Clin Epidemiol. 2001;54(4):343–9. doi:10.1016/S0895-4356(00)00314-0.
Guyatt GH, Sackett DL, Cook DJ. Users’ guides to the medical literature. II. How to use an article about therapy or prevention. JAMA. 1993;270(21):2598-601. doi:10.1001/jama.1993.03510210084032.
Walters SJ. Sample size and power estimation for studies with health-related quality of life outcomes: a comparison of four methods using the SF-36. Health Qual Life Outcomes. 2004;2:26. doi:10.1186/1477-7525-2-26.