Bland-Altman plot i R

Till att börja med genererar vi data som skulle kunna vara analysresultat från två olika metoder:

library(tibble)
set.seed(13)
x <- runif(100, 0, 100)
ba_data <- tibble(method_A = x, method_B = 1.10 * x - 0.001 * x^2 + rnorm(100, 0, 1) * (2 + 0.05 * x) + 15)

Ibland vill man ha medelvärdet av de två värdena på x-axeln. Vi vill även ha differensen mellan de parade mätningarna och ett z-värde för att beräkna limits of agreement:

ba_data[["average"]] <- rowMeans(ba_data)
ba_data[["difference"]] <- ba_data[["method_A"]] - ba_data[["method_B"]]
z <- qnorm(0.025, lower.tail = FALSE)

Nu kan vi beräkna de parametrar som behövs för att skapa medelvärdeslinjen och limits of agreement:

mean_difference <- mean(ba_data[["difference"]])
lower_loa <- mean_difference - z * sd(ba_data[["difference"]])
upper_loa <- mean_difference + z * sd(ba_data[["difference"]])

Bland-Altman-plotten kan vi sedan konstruera med ggplot2

library(ggplot2)
ba_plot <- ggplot(ba_data, aes(x = average, y = difference)) +
  geom_point(size = 2, color = "#040D12") +
  geom_hline(yintercept = mean_difference, color = "#93B1A6", size = 1, alpha = 0.75) +
  geom_hline(yintercept = lower_loa, color = "#FF6969", linetype = "dashed", size = 1, alpha = 0.75) +
  geom_hline(yintercept = upper_loa, color = "#FF6969", linetype = "dashed", size = 1, alpha = 0.75) +
  labs(title = "Bland-Altman Plot", x = "Average measurement", y = "Difference") +
  theme_classic()

ba_plot

Bland Altman med histogram på axlarna

En variant med histogram längs axlarna kan fås med paketet ggExtra.

library(ggExtra)

ggMarginal(ba_plot, type = "histogram", bins = 25)

Publicerat

i

av

Etiketter:

Kommentarer

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *