Type: | Package |
Title: | Non-Linear Mixed Effects Model Based on the Gamma Function Form |
Version: | 5.0 |
Date: | 2025-06-20 |
Description: | Identifies biomarkers that exhibit differential response dynamics by time across groups and estimates kinetic properties of biomarkers. |
License: | GPL-2 | GPL-3 [expanded from: GPL] |
RoxygenNote: | 7.2.3 |
Imports: | Rdpack, nlme, dplyr, cubature, rootSolve, patchwork, scales, ggplot2, future.apply, gridExtra, rlang, grDevices, stats, grid |
NeedsCompilation: | no |
Packaged: | 2025-06-20 14:08:35 UTC; htchen |
Author: | Hongting Chen [aut, cre], Liming Liang [aut] |
Maintainer: | Hongting Chen <hongtingchen@berkeley.edu> |
Repository: | CRAN |
Date/Publication: | 2025-06-20 14:30:02 UTC |
Function that produces Area Under the Curve(AUC) property for a single individual in a particular group, for a specific metabolite
Description
Function that produces Area Under the Curve(AUC) property for a single individual in a particular group, for a specific metabolite
Usage
calculate_AUC(f, upperbound)
Arguments
f |
function that returns the prediction of a metabolite concentration, for a single individual in a particular group |
upperbound |
Numeric value that serves as the upperbound of integration |
Value
AUC for this metabolite, in a particular group for a single individual
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(cubature)
require(dplyr)
require(nlme)
modify.df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1),
Concentration = NA
)
for (i in 1:10) {
for (d in 1:3) {
C0 <- runif(1, 10, 15) # initial concentration
k <- runif(1, 0.1, 0.3) # decay rate constant
modify.df$Concentration[modify.df$ID == sprintf("%02d", i) & modify.df$Diet == d] <-
C0 * exp(-k * modify.df$Time[modify.df$ID == sprintf("%02d", i) & modify.df$Diet == d])
}
}
covariates <- c("ID", "Diet", "Age", "BMI")
model <- gammaFunction(
modify.df,
covariates,
time_grp_inter = FALSE,
return_ml_model = FALSE, include_grp = TRUE
)[[1]]
test_data <- modify.df %>%
filter(Diet == 1 & ID == "04") %>%
select(-c("Concentration", "ID", "Diet"))
f_dat = modify.df %>%
filter(Diet == 1 & ID == "04") %>%
select(-Concentration)
f <- generate_f_function(
data = f_dat,
model = model,
grp_var = 1,
grp_name = "Diet",
ID = "04",
ref = 1
)
AUC <- calculate_AUC(f, 9)
AUCInf <- calculate_AUC(f, Inf)
Function that produces Cmax property for a single individual in a particular group, for a specific metabolite
Description
Function that produces Cmax property for a single individual in a particular group, for a specific metabolite
Usage
calculate_Cmax(data, model, grp_var, ID, grp_name = "Diet", Tmax)
Arguments
data |
Data frame containing columns Group(factor); ID(subject ID: character); Time(positive: numeric); other individiual characteristics covariates (exlcluding other forms of 'Time') Note: Data must be complete (No missing values). |
model |
Fitted model for the metabolite in question |
grp_var |
Value of the grouping variable |
ID |
Subject ID |
grp_name |
Name of the grouping variable. Default is 'Diet' |
Tmax |
for this metabolite, in a particular group for a single individual |
Value
Cmax for this metabolite, in a particular group for a single individual
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(rootSolve)
require(dplyr)
require(nlme)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1),
Concentration = round(runif(270, 5, 15), 2)
)
covariates <- c("ID", "Diet", "Age", "BMI")
model <- gammaFunction(
df,
covariates,
time_grp_inter = FALSE,
return_ml_model = FALSE,
include_grp = TRUE
)[[1]]
test_data = df %>% filter(Diet == 1 & ID == "02") %>% select(-c("Concentration", "ID", "Diet"))
Tmax <- calculate_Tmax(data = test_data, model, grp_var = 1, ID = "02", grp_name = 'Diet', ref = 1)
Cmax <- calculate_Cmax(data = test_data, model, grp_var = 1, ID = "02", grp_name = "Diet", Tmax)
Function that produces Tmax property for a single individual in a particular group, for a specific metabolite
Description
Function that produces Tmax property for a single individual in a particular group, for a specific metabolite
Usage
calculate_Tmax(data, model, grp_var, ID, grp_name = "Diet", ref = 1)
Arguments
data |
Data frame containing columns Group(factor); ID(subject ID: character); Time(positive: numeric); other individiual characteristics covariates(excluding other forms of 'Time') Note: Data must be complete (No missing values); |
model |
Fitted model for the metabolite in question |
grp_var |
Value of the grouping variable |
ID |
Subject ID |
grp_name |
Name of the grouping variable. Default is 'Diet' |
ref |
numeric or character. The reference level for the grouping variable, as a factor |
Value
Tmax for this metabolite, in a particular group for a single individual
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(rootSolve)
require(dplyr)
require(nlme)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1),
Concentration = round(runif(270, 5, 15), 2)
)
covariates <- c("ID", "Diet", "Age", "BMI")
model <- gammaFunction(
df,
covariates,
time_grp_inter = FALSE,
return_ml_model = FALSE,
include_grp = TRUE
)[[1]]
test_data = df %>% filter(Diet == 1 & ID == "01") %>% select(-c("Concentration", "ID", "Diet"))
Tmax <- calculate_Tmax(data = test_data, model, grp_var = 1, ID = "01", grp_name = 'Diet', ref = 1)
Function that produces Half-life property for a single individual in a particular group, for a specific metabolite
Description
Function that produces Half-life property for a single individual in a particular group, for a specific metabolite
Usage
calculate_half_life(f, Tmax, Cmax)
Arguments
f |
function that returns the prediction of a metabolite concentration, for a single individual in a particular group |
Tmax |
Tmax property of a metabolite, for a single individual in a particular group |
Cmax |
Cmax property of a metabolite, for a single individual in a particular group |
Value
Half-life for this metabolite, in a particular group for a single individual
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(rootSolve)
require(dplyr)
require(nlme)
modify.df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1),
Concentration = NA
)
for (i in 1:10) {
for (d in 1:3) {
C0 <- runif(1, 10, 15) # initial concentration
k <- runif(1, 0.1, 0.3) # decay rate constant
modify.df$Concentration[modify.df$ID == sprintf("%02d", i) & modify.df$Diet == d] <-
C0 * exp(-k * modify.df$Time[modify.df$ID == sprintf("%02d", i) & modify.df$Diet == d])
}
}
covariates <- c("ID", "Diet", "Age", "BMI")
model <- gammaFunction(
modify.df,
covariates,
time_grp_inter = FALSE,
return_ml_model = FALSE,
include_grp = TRUE
)[[1]]
test_data = modify.df %>%
filter(Diet == 1 & ID == "03") %>%
select(-c("Concentration", "ID", "Diet"))
Tmax <- calculate_Tmax(data = test_data, model, grp_var = 1, ID = "03", grp_name = 'Diet', ref = 1)
Cmax <- calculate_Cmax(data = test_data, model, grp_var = 1, ID = "03", grp_name = "Diet", Tmax)
f_dat = modify.df %>% filter(Diet == 1 & ID == "03") %>% select(-Concentration)
f <- generate_f_function(
data = f_dat,
model = model,
grp_var = 1,
grp_name = "Diet",
ID = "03",
ref = 1)
half_life <- calculate_half_life(f, Tmax, Cmax)
Function that produces a summary table for coefficient estimates, their p-values and LRT p-values for every metabolite in the dataframe
Description
Function that produces a summary table for coefficient estimates, their p-values and LRT p-values for every metabolite in the dataframe
Usage
diffGrpResponse(
df,
met_vec,
covariates,
time_terms = c("Time", "log(Time)"),
grp = "Diet",
random_formula = ~1 + Time | ID/Diet,
correlation_formula = corSymm(form = ~Time | ID/Diet),
weights = varIdent(form = ~1 | Time)
)
Arguments
df |
Data frame containing columns Group(numeric or character); ID(subject ID: character); Time(positive: numeric); other Time terms (numeric); other individual characteristics covariates; as well columns of metabolite concentrations Note: All non-concentration columns must be complete (No missing values); concentration columns can have missing values in the forms of either numeric 0 or 'NA'. |
met_vec |
Vector of metabolite names |
covariates |
Vector containing the names of the "ID" covariate, grouping covariate and other covariates excluding any "Time" covariates |
time_terms |
Vector that contains all additional form of the covariate 'Time" (including the 'Time' covariate), and must contain 'log(Time)', other forms also include I(Time^2) and I(Time^3); |
grp |
Grouping variable; |
random_formula |
Random effects formula for the model, nested effects of Diet within ID (could also add random slope for 'Time'); |
correlation_formula |
Correlation formula. Default is autorgressive but can accommodate other forms such as unstructured covariance or exponential covariance; |
weights |
specify a variance function that models heteroscedasticity |
Value
Data frame that contains the coefficient estimates, their corresponding p-values; LRT p-values for Time-Group interactions (for every 'Time' term);LRT p-values for Group and Time-Group interactions (for every 'Time' term); as well as the fitted models for each metabolite
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(dplyr)
require(nlme)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1)
)
metvar <- paste0("met", 1:10)
concentration_data <- replicate(10, round(runif(270, 5, 15), 2))
colnames(concentration_data) <- metvar[1:10]
df <- cbind(df, as.data.frame(concentration_data))
covariates <- c("ID", "Diet", "Age", "BMI")
result <- diffGrpResponse(df, metvar, covariates)[[1]]
summary(result)
Parallelized version of diffGrpResponse()
Description
Parallelized version of diffGrpResponse()
Usage
diffGrpResponse_parallel(
df,
met_vec,
covariates,
time_terms = c("Time", "log(Time)"),
grp = "Diet",
random_formula = ~1 + Time | ID/Diet,
correlation_formula = corSymm(form = ~Time | ID/Diet),
weights = varIdent(form = ~1 | Time)
)
Arguments
df |
Data frame containing columns Group(numeric or character); ID(subject ID: character); Time(positive: numeric); other Time terms (numeric); other individual characteristics covariates; as well columns of metabolite concentrations Note: All non-concentration columns must be complete (No missing values); concentration columns can have missing values in the forms of either numeric 0 or 'NA'. |
met_vec |
Vector of metabolite names |
covariates |
Vector containing the names of the "ID" covariate, grouping covariate and other covariates excluding any "Time" covariates |
time_terms |
Vector that contains all additional form of the covariate 'Time" (including the 'Time' covariate), and must contain 'log(Time)', other forms also include I(Time^2) and I(Time^3); |
grp |
Grouping variable; |
random_formula |
Random effects formula for the model, nested effects of Diet within ID (could also add random slope for 'Time'); |
correlation_formula |
Correlation formula. Default is autorgressive but can accommodate other forms such as unstructured covariance or exponential covariance; |
weights |
specify a variance function that models heteroscedasticity |
Value
Data frame that contains the coefficient estimates, their corresponding p-values; LRT p-values for Time-Group interactions (for every 'Time' term);LRT p-values for Group and Time-Group interactions (for every 'Time' term); as well as the fitted models for each metabolite
Note
This function uses parallel processing via the 'future.apply' package. To enable parallel execution, runs the following before calling this function:
library(future.apply) plan(multisession, workers = parallel::detectCores() - 1)
You only need to set the plan once per session.
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(dplyr)
require(nlme)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1)
)
metvar <- paste0("met", 1:10)
concentration_data <- replicate(10, round(runif(270, 5, 15), 2))
colnames(concentration_data) <- metvar[1:10]
df <- cbind(df, as.data.frame(concentration_data))
covariates <- c("ID", "Diet", "Age", "BMI")
library(future.apply)
plan(multisession, workers = parallel::detectCores() - 1)
result <- diffGrpResponse(df, metvar, covariates)[[1]]
summary(result)
Implementation of the novel non-linear mixed-effects model based on gamma function form with nested covariance structure where random effects are specified for each Diet level within each subject (ID), capturing within-subject correlation across dietary conditions. to identify metabolites that responds to time differentially across dietary groups
Description
Implementation of the novel non-linear mixed-effects model based on gamma function form with nested covariance structure where random effects are specified for each Diet level within each subject (ID), capturing within-subject correlation across dietary conditions. to identify metabolites that responds to time differentially across dietary groups
Usage
gammaFunction(
data,
covariates,
time_terms = c("Time", "log(Time)"),
grp = "Diet",
random_formula = ~1 + Time | ID/Diet,
correlation_formula = corSymm(form = ~Time | ID/Diet),
weights = varIdent(form = ~1 | Time),
time_grp_inter = TRUE,
return_ml_model = FALSE,
include_grp
)
Arguments
data |
Data frame that contains the 'ID' column along with all covariates as well as concentration column, named 'Concentration', for a single metabolite Note: All non-concentration columns must be complete (No missing values); the concentration column can have missing values in the forms of either numeric 0 or 'NA'. |
covariates |
Vector containing the names of the "ID" covariate, grouping covariate and other covariates excluding any "Time" covariates |
time_terms |
Vector that contains all additional form of the covariate 'Time" (including the 'Time' covariate), and must contain 'log(Time)', other forms also include I(Time^2) and I(Time^3); |
grp |
Grouping variable; |
random_formula |
Random effects formula for the model, nested effects of Diet within ID (could also add random slope for 'Time'); |
correlation_formula |
Correlation formula. Default is autorrgressive but can accomodate other forms such as unstructured covariance or exponential covariance; |
weights |
specify a variance function that models heteroscedasticity |
time_grp_inter |
Boolean value that indicates if the model should include interactions terms of 'time_terms' with 'Group'; |
return_ml_model |
Boolean value that indicates if the model should fit "ML" model as well as "REML" model(default) |
include_grp |
boolean value to indicate whether or not 'grp' should be included in the model construction |
Value
mixed effects models for a single metabolites: one with REML, the other with ML
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(dplyr)
require(nlme)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1),
Concentration = round(runif(270, 5, 15), 2)
)
covariates <- c("ID", "Diet", "Age", "BMI")
model <- gammaFunction(
df,
covariates,
random_formula = ~ 1 | ID/Diet,
correlation_formula = corAR1(form = ~ Time | ID/Diet),
weights = NULL,
include_grp = TRUE)[[1]]
summary(model)
Function that generate plots for metabolite models
Description
Function that generate plots for metabolite models
Usage
generatePlot(
graph,
df,
met_vec,
covariates,
grp = "Diet",
models,
save_path = NULL
)
Arguments
graph |
character string, 'None' by default. If not 'None, in addition to returning models, produces pdf file of graphs based on the specific value of 'graph'. |
df |
Data frame containing columns Group(factor); ID(subject ID: character); Time(positive: numeric); other Time terms (numeric); other individidual characteristics covariates; as well columns of metabolite concentrations; Note: All non-concentration columns must be complete (No missing values); concentration columns can have missing values in the forms of either numeric 0 or 'NA'. |
met_vec |
the vector of metabolite names |
covariates |
Vector containing the names of the "ID" covariate, grouping covariate and other covariates excluding any "Time" covariates; |
grp |
is the grouping variable; |
models |
a list of fitted non-linear mixed effects metabolite models |
save_path |
location (file path, not directory) where the pdf file will be saved (must end in '.pdf'); default is NULL, i.e. pdf is saved to a temporary location |
Value
A pdf file for fitted concenration curves that is saved to a user provided file location; otherwise saved to a temporary location
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(dplyr)
require(nlme)
require(patchwork)
require(scales)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1)
)
metvar <- paste0("met", 1:10)
concentration_data <- replicate(10, round(runif(270, 5, 15), 2))
colnames(concentration_data) <- metvar[1:10]
df <- cbind(df, as.data.frame(concentration_data))
covariates <- c("ID", "Diet", "Age", "BMI")
mods <- generate_models(df = df, met_vec = metvar, covariates = covariates, graph = 'None')
generatePlot(
graph = "individual_separated",
df = df,
met_vec = metvar,
covariates = covariates,
grp = "Diet",
models = mods,
save_path = NULL
)
Function produce predictions from the model
Description
Function produce predictions from the model
Usage
generate_f_function(data, model, grp_var, grp_name = "Diet", ID, ref = 1)
Arguments
data |
Data frame containing columns Group(factor); ID(subject ID: character); Time(positive: numeric); other individiual characteristics covariates (exlcluding other forms of 'Time') Note: Data must be complete (No missing values). |
model |
Fitted model for the metabolite in question |
grp_var |
Value of the grouping variable |
grp_name |
Name of the grouping variable. Default is 'Diet' |
ID |
Subject ID |
ref |
reference group |
Value
f function that produces the prediction from this model for a specific individual in a specific group
Examples
require(gammaFuncModel)
require(dplyr)
require(nlme)
modify.df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1),
Concentration = NA
)
for (i in 1:10) {
for (d in 1:3) {
C0 <- runif(1, 10, 15) # initial concentration
k <- runif(1, 0.1, 0.3) # decay rate constant
modify.df$Concentration[modify.df$ID == sprintf("%02d", i) & modify.df$Diet == d] <-
C0 * exp(-k * modify.df$Time[modify.df$ID == sprintf("%02d", i) & modify.df$Diet == d])
}
}
covariates <- c("ID", "Diet", "Age", "BMI")
model <- gammaFunction(
modify.df,
covariates,
time_grp_inter = FALSE,
return_ml_model = FALSE,
include_grp = TRUE
)[[1]]
test_data = modify.df %>%
filter(Diet == 1 & ID == "04") %>%
select(-c("Concentration", "ID", "Diet"))
f_dat = modify.df %>% filter(Diet == 1 & ID == "04") %>% select(-Concentration)
f <- generate_f_function(
data = f_dat,
model = model,
grp_var = 1,
grp_name = "Diet",
ID = "04",
ref = 1
)
Function that produces a fitted gamma model for each metabolite
Description
Function that produces a fitted gamma model for each metabolite
Usage
generate_models(
df,
met_vec,
covariates,
time_terms = c("Time", "log(Time)"),
grp_name = "Diet",
random_formula = ~1 + Time | ID/Diet,
correlation_formula = corSymm(form = ~Time | ID/Diet),
weights = varIdent(form = ~1 | Time),
graph = "None",
save_path = NULL
)
Arguments
df |
Data frame containing columns Group(factor); ID(subject ID: character); Time(positive: numeric); other Time terms (numeric); other individidual characteristics covariates; as well columns of metabolite concentrations Note: All non-concentration columns must be complete (No missing values); concentration columns can have missing values in the forms of either numeric 0 or 'NA'. |
met_vec |
the vector of metabolite names |
covariates |
Vector containing the names of the "ID" covariate, grouping covariate and other covariates excluding any "Time" covariates |
time_terms |
is the vector that contains all additional form of the covariate 'Time" (including the 'Time' covariate), and must contain 'log(Time)', other forms also include I(Time^2) and I(Time^3); |
grp_name |
is the grouping variable; |
random_formula |
is the random effects formula for the model, nested effects of Diet within ID (could also add random slope for 'Time'); |
correlation_formula |
is the correlation formula. Default is autorgressive but can accommodate other forms such as unstructured covariance or exponential covariance; |
weights |
specify a variance function that models heteroscedasticity; |
graph |
character string, 'None' by default. If not 'None, in addition to returning models, produces pdf file of graphs based on the specific value of 'graph'. |
save_path |
location where the pdf file will be saved; default is NULL, i.e. pdf is saved to a temporary location |
Value
List that contains fitted models for each metabolite and a pdf file for fitted concenration curves.
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(dplyr)
require(nlme)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1)
)
metvar <- paste0("met", 1:10)
concentration_data <- replicate(10, round(runif(270, 5, 15), 2))
colnames(concentration_data) <- metvar[1:10]
df <- cbind(df, as.data.frame(concentration_data))
covariates <- c("ID", "Diet", "Age", "BMI")
mods <- generate_models(
df = df,
met_vec = metvar,
covariates = covariates,
graph = 'None',
save_path = NULL)
Function that produces a summary table for coefficient estimates, their p-values and LRT p-values for every metabolite in the dataframe, for a single Group
Description
Function that produces a summary table for coefficient estimates, their p-values and LRT p-values for every metabolite in the dataframe, for a single Group
Usage
grpResp2Time(
df,
met_vec,
covariates,
time_terms = c("Time", "log(Time)"),
grp = "Diet",
random_formula = ~1 | ID,
correlation_formula = corAR1(form = ~Time | ID),
weights = NULL
)
Arguments
df |
Data frame containing information for a single group, containing columns grp; ID(subject ID: character); Time(positive: numeric); other Time terms (numeric); other individual characteristics covariates; as well columns of metabolite concentrations Note: All non-concentration columns must be complete (No missing values); concentration columns can have missing values in the forms of either numeric 0 or 'NA'. |
met_vec |
Vector of metabolite names |
covariates |
Vector containing the names of the "ID" covariate, grouping covariate and other covariates excluding any "Time" covariates |
time_terms |
Vector that contains all additional form of the covariate 'Time" (including the 'Time' covariate), and must contain 'log(Time)', other forms also include I(Time^2) and I(Time^3); |
grp |
Grouping variable (should be a single valued column); |
random_formula |
Random effects formula for the model, within ID (could also add random slope for 'Time'); |
correlation_formula |
Correlation formula. Default is autorgressive but can accommodate other forms such as unstructured covariance or exponential covariance; |
weights |
specify a variance function that models heteroscedasticity |
Value
Data frame that contains the coefficient estimates, their corresponding p-values as well as LRT p-values for 'Time' terms
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(dplyr)
require(nlme)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1)
)
metvar <- paste0("met", 1:10)
concentration_data <- replicate(10, round(runif(270, 5, 15), 2))
colnames(concentration_data) <- metvar[1:10]
df <- cbind(df, as.data.frame(concentration_data))
df_single_diet <- subset(df, Diet == 1)
covariates <- c("ID","Diet", "Age", "BMI")
result_SD <- grpResp2Time(df_single_diet, metvar, covariates)[[1]]
summary(result_SD)
Vectorized version of grpRes2Time()
Description
Vectorized version of grpRes2Time()
Usage
grpResp2Time_parallel(
df,
met_vec,
covariates,
time_terms = c("Time", "log(Time)"),
grp = "Diet",
random_formula = ~1 | ID,
correlation_formula = corAR1(form = ~Time | ID),
weights = NULL
)
Arguments
df |
Data frame containing information for a single group, containing columns grp; ID(subject ID: character); Time(positive: numeric); other Time terms (numeric); other individual characteristics covariates; as well columns of metabolite concentrations Note: All non-concentration columns must be complete (No missing values); concentration columns can have missing values in the forms of either numeric 0 or 'NA'. |
met_vec |
Vector of metabolite names |
covariates |
Vector containing the names of the "ID" covariate, grouping covariate and other covariates excluding any "Time" covariates |
time_terms |
Vector that contains all additional form of the covariate 'Time" (including the 'Time' covariate), and must contain 'log(Time)', other forms also include I(Time^2) and I(Time^3); |
grp |
Grouping variable (should be a single valued column); |
random_formula |
Random effects formula for the model, within ID (could also add random slope for 'Time'); |
correlation_formula |
Correlation formula. Default is autorgressive but can accommodate other forms such as unstructured covariance or exponential covariance; |
weights |
specify a variance function that models heteroscedasticity |
Value
Data frame that contains the coefficient estimates, their corresponding p-values as well as LRT p-values for 'Time' terms
Note
This function uses parallel processing via the 'future.apply' package. To enable parallel execution, runs the following before calling this function:
library(future.apply) plan(multisession, workers = parallel::detectCores() - 1)
You only need to set the plan once per session.
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(dplyr)
require(nlme)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1)
)
metvar <- paste0("met", 1:10)
concentration_data <- replicate(10, round(runif(270, 5, 15), 2))
colnames(concentration_data) <- metvar[1:10]
df <- cbind(df, as.data.frame(concentration_data))
df_single_diet <- subset(df, Diet == 1)
covariates <- c("ID","Diet", "Age", "BMI")
library(future.apply)
plan(multisession, workers = parallel::detectCores() - 1)
result_SD <- grpResp2Time_parallel(df_single_diet, metvar, covariates)[[1]]
summary(result_SD)
Function that returns a data frame for Tmax, Cmax, half-life, AUC and AUCInf for metabolites
Description
Function that returns a data frame for Tmax, Cmax, half-life, AUC and AUCInf for metabolites
Usage
pk_calculation(df, met_vec, models, grp_name = "Diet", covariates, ref = 1)
Arguments
df |
Data frame containing columns Group(factor); ID(subject ID: character); Time(positive: numeric); other individiual characteristics covariates (exlcluding other forms of 'Time') Note: Data must be complete (No missing values). |
met_vec |
Vector of metabolite names |
models |
Fitted models for all metabolites of interest |
grp_name |
Name of the grouping variable |
covariates |
Vector containing the names of the "ID" covariate, grouping covariate and other covariates excluding any "Time" covariates |
ref |
reference level for the grouping variable. could be numeric or character |
Value
Data frame with the pharmacokinetic properties of each metabolite
References
Wickham, H. (2022). dplyr: A Grammar of Data Manipulation. R package version 1.0.10. Available at: https://CRAN.R-project.org/package=dplyr
Pinheiro, J. C., & Bates, D. M. (2022). nlme: Linear and Nonlinear Mixed Effects Models. R package version 3.1-153. Available at: https://CRAN.R-project.org/package=nlme
Examples
require(gammaFuncModel)
require(dplyr)
df <- data.frame(
ID = rep(sprintf("%02d", 1:10), each = 9 * 3),
Time = rep(rep(1:9, each = 3), 10),
Diet = as.factor(rep(1:3, times = 9 * 10)),
Age = rep(sample(20:70, 10, replace = TRUE), each = 9 * 3),
BMI = round(rep(runif(10, 18.5, 35), each = 9 * 3), 1)
)
metvar <- paste0("met", 1:10)
n_rows <- nrow(df)
concentration_data <- sapply(1:10, function(m) {
shape <- runif(1, 2, 5)
scale <- runif(1, 1, 3)
rgamma(n_rows, shape = shape, scale = scale)
})
colnames(concentration_data) <- metvar
df <- cbind(df, as.data.frame(concentration_data))
covariates <- c("ID", "Diet", "Age", "BMI")
mods <- generate_models(df = df, met_vec = metvar, covariates = covariates, graph = 'None')
result <- pk_calculation(
df = df,
met_vec = metvar,
models = mods,
grp_name = "Diet",
covariates = covariates
)