Statistical test recommendation for efficacy of three different drugs with categorical responses I have a really small study sample of 70, in which they are being medicated with 3 different drugs (A,B,C). The study aimed to determine the efficacy of each drug in treating the disease and the outcome of treatment is either success or failure. I have tried analysing the data using the chi-square test and fisher's exact test, however, my supervisor advised me on using the logistic regression test. Would that be possible to carry that out with a small study sample, with which all variables are categorical?




Treatment
A
B
C




Success
23
11
12


Failure
12
5
7




(Very new to stats)
Update :
Hypothesis - Drug A is more effective than Drug B or Drug C in treating the condition
 A: To test pairwise drug A vs drug B and drug A vs drug C for superiority of drug A, you may want to conduct one-tail Fisher's exact tests between those pairs. In R, it will be:
data <- matrix(c(23, 11, 12, 12, 5, 7), nrow=3, byrow=FALSE)
fisher.test(data[1:2,], alternative = "greater")
fisher.test(data[c(1,3),], alternative = "greater")

P.S. There is absolutely no statistical significance in these tests (the superiority of drug A vs either drug B or C is not supported).
A: You can certainly use logistic regression to estimate the three treatment effects and then test the one-sided hypothesis that A is more effective that B and C. One benefit of this approach is that it's straightforward to include covariates (if you have any).
In your case, however, the summary table clearly suggests there is no difference between the drugs: there are 23 successes in 35 patients treated with A and also 23 successes in another 35 patients treated with B or C. The success rates is about 66% for all three drugs.
Nevertheless, let's back this up by fitting a logistic regression to the data and then looking at the contrast which compares the effectiveness of A to the average effectiveness of B and C.
library("contrast")

aggregated <- data.frame(
  treatment = c("A", "B", "C"),
  successes = c(23, 11, 12),
  failures = c(12, 5, 7)
)
individual <- data.frame(
  treatment = c(
    rep(aggregated$treatment, aggregated$successes),
    rep(aggregated$treatment, aggregated$failures)
  ),
  success = c(
    rep(1L, sum(aggregated$successes)),
    rep(0L, sum(aggregated$failures))
  )
)

# We can fit the model to the aggregate data by concatenating counts of 0s and 1s.
# But the `contrast` function doesn't compute the degrees of freedom correctly.
m0 <- glm(
  cbind(successes, failures) ~ treatment,
  family = binomial,
  data = aggregated
)
# So let's fit the model to the disaggregated, individual-level data.
# This data format can also handle covariates in a straightfoward way.
m1 <- glm(
  success ~ treatment,
  family = binomial,
  data = individual
)
contrast(
  m1,
  list(treatment = "A"),
  list(treatment = c("B", "C")),
  type = "average"
)
#> glm model parameter contrast
#> 
#>      Contrast      S.E.     Lower     Upper     t df Pr(>|t|)
#> 1 -0.01313936 0.5060498 -1.023219 0.9969403 -0.03 67   0.9794

(Lower,Upper) is the two-sided confidence interval for the contrast (comparison) between A and the average of B and C. However, since the t statistic is negative (t = -0.03), we know that the one-sided confidence interval includes 0 as well: the data is consistent with the null hypothesis that A is as effective as B and C.
# Two-sided confidence interval
-0.01313936 + qt(.975, 67) * 0.5060498 * c(-1, 1)
#> [1] -1.0232190  0.9969403
# One-sided confidence interval
-0.01313936 + qt(.95, 67) * 0.5060498 * c(-1, Inf)
#> [1] -0.857188       Inf

