Home > Software engineering >  How can I show non-inferiority with a plot using R
How can I show non-inferiority with a plot using R

Time:01-18

I compare two treatments A and B. The objective is to show that A is not inferior to B. The non inferiority margin delta =-2 After comparing Treatment A - Treatment B I have these results

Mean difference and 95% CI = -0.7 [-2.1, 0.8]

I would like to plot this either with a package or manually. I have no idea how to do it.

    Welch Two Sample t-test

data:  mydata$outcome[mydata$traitement == "Bras S"] and mydata$outcome[mydata$traitement == "B"]
t = 0.88938, df = 258.81, p-value = 0.3746
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -2.133224  0.805804
sample estimates:
mean of x mean of y 
 8.390977  9.054688 

I want to create this kind of plot:

enter image description here

CodePudding user response:

You could abstract the relevant data from the t.test results and then plot in base R using segments and points to plot the data and abline to draw in the relevant vertical lines. Since there were no reproducible data, I made some up but the process is generally the same.

#sample data
set.seed(123)
tres <- t.test(runif(10), runif(10))

# get values to plot from t test results
ci <- tres$conf.int
ests <- tres$estimate[1] - tres$estimate[2]

# plot
plot(x = ci, ylim = c(0,2), xlim = c(-4, 4), type = "n", # blank plot
     bty = "n", xlab = "Treatment A - Treatment B", ylab = "",
     axes = FALSE)
points(x = ests, y = 1, pch = 20) # dot for point estimate
segments(x0 = ci[1], x1 = ci[2], y0 = 1) #CI line
abline(v = 0, lty = 2) # vertical line, dashed
abline(v = 2, lty = 1, col = "darkblue") # vertical line, solid, blue
axis(1, col = "darkblue") # add in x axis, blue

enter image description here

EDIT:

If you wanted to more accurately recreate your figure with the x axis in descending order and using your statement "Mean difference and 95% CI = -0.7 [-2.1, 0.8]", you can do the following manipulations to the above approach:

diff <- -0.7 
ci <- c(-2.1, 0.8)

# plot
plot(1, xlim = c(-4, 4), type = "n", 
     bty = "n", xlab = "Treatment A - Treatment B", ylab = "",
     axes = FALSE)
points(x = -diff, y = 1, pch = 20)
segments(x0 = -ci[2], x1 = -ci[1], y0 = 1)
abline(v = 0, lty = 2) 
abline(v = 2, lty = 1, col = "darkblue") 
axis(1, at = seq(-4,4,1), labels = seq(4, -4, -1), col = "darkblue")

enter image description here

  •  Tags:  
  • r
  • Related