#' Statistics for a Bland-Altman plot
#'
#' @description
#' Bland-Altman plot is drawn to
#' show measurement variability/reliabiilty of a task. This
#' function requires two paired datasets (same length).
#' It returns a list of difference (by element), mean,
#' standard deviation of the difference,
#' mean difference, upper and lower limits. These values
#' are necessary to draw a Bland Altman plot.
#'
#' The list returned from this function can be directly
#' used as an argument for sm_bland_altman(), which
#' draws a Bland-Altman plot using ggplot2.
#'
#' Another output 'data' is a tibble with two columns:
#' 1) Mean across each pair for each element
#' (ex. a mean of the 1st element
#' from the first set and 1st element from the second set), 2)
#' Difference between each pair for every element.
#' The output 'data' should be used as a argument for data in ggplot()
#' when plotting.
#'
#' @param first
#' Data from the first repetition/session
#' @param second
#' Data from the second repetition/session
#' @export
#' @importFrom stats t.test
#' @importFrom tibble as_tibble
#' @return
#' A list is returned, which has all numerical results that are relevant to drawing a Bland-Altman plot.
#' @examples
#' library(smplot2)
#' library(tibble)
#'
#' first <- rnorm(20)
#' second <- rnorm(20)
#' df <- as_tibble(cbind(first, second)) # requires library(tidyverse)
#' sm_statBlandAlt(df$first, df$second)
#'
sm_statBlandAlt <- function(first, second) {
diff <- second - first
mean <- rowMeans(cbind(first, second), na.rm = TRUE)
mean_diff <- mean(diff)
sd <- sd(diff)
upper_limit <- mean_diff + 1.96 * sd
lower_limit <- mean_diff - 1.96 * sd
diff_ci <- t.test(diff)$conf.int
data <- as_tibble(cbind(mean, diff))
res <- list(
diff, mean, sd, mean_diff, upper_limit, lower_limit,
data, diff_ci
)
names(res) <- c(
"diff", "mean", "sd", "mean_diff",
"upper_limit", "lower_limit", "data",
"diff_ci"
)
return(res)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.