A Bland-Altman plot (also known as a Difference plot) is a graphical method to analyze the differences between two methods of measurement. The average of the two measurements is plotted on the X-axis, while the difference between the measurements is plotted on the Y-axis. The main purpose of the Bland-Altman plot is to compare two clinical measurements and see whether they agree.
The Bland-Altman plot is widely used in the field of clinical statistics to evaluate the agreement among different instruments or measurement techniques by determining the mean difference and constructing limits of agreement.
In this article, we will discuss how to create a Bland-Altman plot in R using two popular packages: the BlandAltmanLeh
package and the ggplot2
package.
Creating a Bland-Altman Plot Using BlandAltmanLeh Package
The BlandAltmanLeh
package in R is specially designed to create Bland-Altman plots. Here are the steps to create a Bland-Altman plot using this package:
1. Installing and Loading the BlandAltmanLeh
Package:
# Install the package
install.packages("BlandAltmanLeh")
# Load the package
library(BlandAltmanLeh)
2. Creating the Dataset:
For this demonstration, we will create a simple dataset with two sets of measurements.
# Create the dataset
set.seed(123)
Measurement1 <- rnorm(100, mean = 100, sd = 10)
Measurement2 <- Measurement1 + rnorm(100, mean = 0, sd = 5)
# Put the measurements into a data frame
df <- data.frame(Measurement1, Measurement2)
3. Creating the Bland-Altman Plot:
The bland.altman.plot()
function from the BlandAltmanLeh
package can be used to create the Bland-Altman plot.
# Create a Bland-Altman plot
bland.altman.plot(df$Measurement1, df$Measurement2, main = "Bland-Altman Plot")

Creating a Bland-Altman Plot Using ggplot2 Package
While ggplot2
does not have a specific function to create Bland-Altman plots, we can easily create one using its basic functions.
1. Installing and Loading the ggplot2
Package:
# Install the package
install.packages("ggplot2")
# Load the package
library(ggplot2)
2. Creating the Dataset:
The step is similar to the BlandAltmanLeh
package approach.
# Create the dataset
set.seed(123)
Measurement1 <- rnorm(100, mean = 100, sd = 10)
Measurement2 <- Measurement1 + rnorm(100, mean = 0, sd = 5)
# Put the measurements into a data frame
df <- data.frame(Measurement1, Measurement2)
3. Creating the Bland-Altman Plot:
First, we calculate the mean and difference of the two measurements. Then, we use ggplot()
to create the plot.
# Calculate the mean and difference
df$Mean <- (df$Measurement1 + df$Measurement2) / 2
df$Difference <- df$Measurement1 - df$Measurement2
# Create a Bland-Altman plot
ggplot(df, aes(x = Mean, y = Difference)) +
geom_point() +
geom_hline(yintercept = mean(df$Difference), color = "red", linetype = "dashed") +
geom_hline(yintercept = mean(df$Difference) + 1.96 * sd(df$Difference), color = "blue", linetype = "dashed") +
geom_hline(yintercept = mean(df$Difference) - 1.96 * sd(df$Difference), color = "blue", linetype = "dashed") +
labs(title = "Bland-Altman Plot", x = "Mean of Measurements", y = "Difference of Measurements")

In this code, geom_point()
adds the points to the plot, geom_hline()
adds horizontal lines at the mean difference and at the mean difference plus or minus 1.96 times the standard deviation of the differences (which correspond to the 95% limits of agreement), and labs()
adds labels to the plot.
Conclusion
Bland-Altman plots are powerful tools for assessing agreement between two measurement methods. This article demonstrated two methods of creating a Bland-Altman plot in R, one using the BlandAltmanLeh
package, which provides a straightforward approach to creating a Bland-Altman plot, and the other using the ggplot2
package, which provides greater flexibility in controlling the appearance of the plot.