View source: R/calculate_isi_matsuda_df.R
calculate_isi_matsuda_df | R Documentation |
This function calculates the Matsuda index using glucose and insulin sampled during a standard 75g oral glucose tolerance test. Results can be checked using the Matsuda online calculator.
calculate_isi_matsuda_df(
df,
timeCol = time,
glucoseCol = glucose,
insulinCol = insulin,
time_units = "min",
glucose_units = "mg/dl",
insulin_units = "uU/ml"
)
df |
A long-format data frame |
timeCol |
a column name (unquoted) indicating time values (in minutes) |
glucoseCol |
a column name (unquoted) storing glucose values (in mg/dL) |
insulinCol |
a column name (unquoted) storing insulin values (in uU/mL) |
time_units |
if units are not in "min", can indicate here for unit conversion (options "min" or "hr") |
glucose_units |
if units are not in "mg/dl", can indicate here for unit conversion (options "mg/dl" or "mmol/l") |
insulin_units |
if units are not in "uU/ml", can indicate here for unit conversion (options "uU/ml" or "pmol/l") |
Standard timepoints are 0, 30, 60, 90, and 120 min. Note: insulin unit conversion may differ differ depending on assay. Insulin (pmol/l) = insulin (uU/ml)*6
'calculate_isi_matsuda_df()' requires a dataframe input with time, glucose, insulin columns.
#' The formula used for this calculation is described in Matsuda et al.:
10,000 \cdot \sqrt{Glucose_{0} \cdot Insulin_{0} \cdot Glucose_{mean} \cdot Insulin_{mean} }
Matsuda index as a single value
library(dplyr)
# A long-format dataframe with a single subject
ogtt1 <- data.frame(
time=c(0, 30, 60, 90, 120), # minutes
glucose=c(93, 129, 178, 164, 97), # mg/dL
insulin=c(12.8, 30.7, 68.5, 74.1, 44.0)) # uU/mL
# dataframe with variable columns appropriately named
calculate_isi_matsuda_df(ogtt1) # works because columns are default names
calculate_isi_matsuda_df(ogtt1, time, glucose, insulin)
# Specify column names if named differently
ogtt2 <- data.frame(
t=c(0, 30, 60, 90, 120), # minutes
gluc=c(93, 129, 178, 164, 97), # mg/dL
ins=c(12.8, 30.7, 68.5, 74.1, 44.0)) # uU/mL
# dataframe with differently named variable columns
# Convert units
ogtt5 <- data.frame(time = c(0,0.5,1,1.5,2), # time in hours
glucose = c(5.167, 7.167, 9.889, 9.111, 5.3889), # glucose in mmol/l
insulin = c(76.8,184.2,411,444.6,264)) # insulin in pmol/l
# you don't have to specify units, if using default values
calculate_isi_matsuda_df(ogtt1, time, glucose, insulin,
insulin_units = "uU/ml", glucose_units = "mg/dl") # default values
# if not default, specify units for proper conversino
calculate_isi_matsuda_df(ogtt5, time, glucose, insulin,
time_units = "hr", insulin_units = "pmol/l", glucose_units = "mmol/l")
calculate_isi_matsuda_df(ogtt5, time_units = "hr", insulin_units = "pmol/l", glucose_units = "mmol/l")
# Handle multiple OGTT data frames
# These all need to be structured the same as a nested list.
nested_df <- dplyr::tibble(id = 1:3,
data = list(ogtt1, ogtt1, ogtt1)) # same data in this case
dplyr::mutate(nested_df, matsuda= purrr::map_dbl(data, ~calculate_isi_matsuda_df(.x)))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.