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)

Lämna ett svar