rdifferenceconfidence-intervalmultinomialrowwise

R: rowwise Confidence Intervals for a Difference of Binomials


I have a table with frequencies for control and treatment group for a multinomial factor (`response'), with three levels (Negative, Neutral, Positive). I want to calculate for each levelthe difference between treatment and control, and confidence intervals, and add them to the table.

I am looking for something that can be applied to several similar frequency tables that compare treatment and control groups, where the response categories vary (e.g. unlikely, 50-50, likely).

Here is the table:

N_A <- data.frame (response  = c("Negative", "Neutral", "Positive"),
                  n_T = c(48, 43, 42), # treatment group
                  n_C = c(36, 40, 51)  # control group
)

I have tried to use the BinomDiffCI function from the DescTools package. I managed to write a function that runs BinomDiffCI for the first row, and extracts the lower CI.

library(DescTools)

lci.diff <- function(){
  xci <- BinomDiffCI(x1 = N_A[1,2], n1 = sum(N_A[2]), x2 = N_A[1,3], n2 = sum(N_A[3]), method=c("waldcc"))
  xci[,2]
}

It's not great, but maybe a start. I want to 1) add difference and upper CI, 2) do the same for all rows, 3) attach this to the dataset, and 4) apply the same to other frequency tables comparing treatment and control.


Solution

  • Here is the code to create the lower and upper bounds of the confidence interval

    library(DescTools)
    
    ci_diff <- function(df, i) {
      tbl <- BinomDiffCI(x1 = df[i,2], n1 = sum(df[2]), x2 = df[i,3], n2 = sum(df[3]), method=c("waldcc"))
      tbl[ , c("lwr.ci", "upr.ci")]
    }
    
    N_A <- cbind(N_A, t(sapply(1:nrow(N_A), \(i) ci_diff(N_A, i)))
    
      response n_T n_C      lwr.ci    upr.ci
    1 Negative  48  36 -0.04342071 0.1982961
    2  Neutral  43  40 -0.11268594 0.1293812
    3 Positive  42  51 -0.20971246 0.0381418