R/attach_HOMA.R

Defines functions attach_HOMA

Documented in attach_HOMA

#' Homeostasis model assessment
#'
#' @param data data
#' @param years years
#' @param IR logical. whether to keep IR, insulin resistance
#' @param IS logical. whether to keep IS, insulin sensitivity
#' @param beta logical. whether to keep beta, function of beta cell function
#' @param fglu logical. whether to keep fast glucose
#' @param finsulin logical. whether to keep fast insulin
#'
#' @details
#' - HOMA-IR: fglu(mmol/L) * finsulin(uU/mL) / 22.5
#' - HOMA-IS: 1/HOMA-IR
#' - HOMA-beta(%): 20 * finsulin(uU/mL) / (fglu(mmol/L)-3.5)
#'
#' @references Matthews DR, Hosker JP, Rudenski AS, Naylor BA, Treacher DF, Turner RC . Homeostasis model assessment: insulin resistance and beta-cell function from fasting plasma glucose and insulin concentrations in man. Diabetologia 1985; 28: 412–419.
#'
#' @return
#' @export
#'
attach_HOMA <- function(data,years,
                        IR=TRUE,
                        IS=TRUE,
                        beta=TRUE,
                        fglu=FALSE,
                        finsulin=FALSE){

    if (!missing(data)){
        years <- unique(data$Year)
        seqn <- unique(data$seqn)
    }
    years <- prepare_years(years)
    (gluam <- nhs_tsv('lab10am|l10am_b|l10am_c|glu',items = 'Laboratory',years=years,cat=FALSE))
    (ins <- nhs_tsv('ins',items = 'Laboratory',years=years,cat=FALSE))
    nr <- nhs_read(gluam,'lbxglusi,lbdglusi:fglu',
                         'lbxin:finsulin',
                   ins,'lbxin:finsulin',cat = FALSE)

    if (!missing(data)) nr <- nr[nr$seqn %in% seqn,]

    # nr$fglu <- nr$fglu*1000             # fglu: mmol/L to nmol/L
    # nr$finsulin <- nr$finsulin * 1/1000 # finsulin: uU/mL to mU/mL
    nr$HOMA_IR <- nr$fglu * nr$finsulin / 22.5
    nr$HOMA_IS <- 22.5 /(nr$fglu * nr$finsulin)
    nr$HOMA_beta <- 20 * nr$finsulin / (nr$fglu-3.5)
    colnames <- c('seqn','Year')
    if (fglu) colnames <- c(colnames,'fglu')
    if (finsulin) colnames <- c(colnames,'finsulin')
    if (IR) colnames <- c(colnames,'HOMA_IR')
    if (IS) colnames <- c(colnames,'HOMA_IS')
    if (beta) colnames <- c(colnames,'HOMA_beta')

    data0 <- nr[,colnames]
    if (missing(data)){
        data <- data0
    }else{
        data0 <- data0[,!colnames(data0) %in% 'Year']
        data <- as.data.frame(dplyr::left_join(data,data0,'seqn'))
    }
    return(data)
}
yikeshu0611/nhanesR documentation built on Jan. 29, 2022, 6:08 a.m.