Skip to contents

Produces a fit as per model_type plot with a facettable exposures/quantiles/distributions in ggplot2

Usage

ggresponseexpdist(
  data = dplyr::filter(logistic_data, !is.na(ICGI)),
  response = "response",
  endpoint = "Endpoint",
  model_type = c("loess", "linear", "logistic", "none"),
  DOSE = "DOSE",
  color_fill = "DOSE",
  fit_by_color_fill = FALSE,
  exposure_metrics = c("AUC", "CMAX"),
  exposure_metric_split = c("median", "tertile", "quartile", "none"),
  exposure_metric_soc_value = -99,
  exposure_metric_plac_value = 0,
  exposure_metric_soc_name = "SOC",
  exposure_metric_plac_name = "Placebo",
  exposure_distribution = c("distributions", "lineranges", "boxplots", "none"),
  exposure_distribution_percent = c("none", "%", "N (%)", "N"),
  exposure_distribution_Ntotal = c("none", "left", "right"),
  exposure_distribution_percent_text_size = 5,
  dose_plac_value = "Placebo",
  xlab = "Exposure Values",
  ylab = "Response",
  points_alpha = 0.2,
  points_show = TRUE,
  mean_obs_byexptile = TRUE,
  mean_obs_byexptile_plac = TRUE,
  mean_obs_byexptile_text_size = 5,
  mean_obs_byexptile_group = "none",
  mean_obs_bydose = FALSE,
  mean_obs_bydose_plac = FALSE,
  mean_obs_bydose_text_size = 5,
  N_byexptile_ypos = c("with means", "top", "bottom", "none"),
  N_bydose_ypos = c("with means", "top", "bottom", "none"),
  N_text_size = 5,
  N_text_sep = NULL,
  binlimits_show = TRUE,
  binlimits_text_size = 5,
  binlimits_ypos = 0,
  binlimits_color = "#B3B3B380",
  dist_position_scaler = 0.2,
  dist_offset = 0,
  dist_scale = 0.9,
  lineranges_ypos = NULL,
  lineranges_dodge = NULL,
  lineranges_doselabel = FALSE,
  lineranges_Ntotal = c("none", "left", "right"),
  proj_bydose = FALSE,
  yproj = FALSE,
  yproj_xpos = 0,
  yproj_dodge = 0.2,
  yaxis_position = c("left", "right"),
  facet_formula = NULL,
  theme_certara = TRUE,
  return_list = FALSE
)

Arguments

data

Data to use with multiple endpoints stacked into response (values), Endpoint(endpoint name)

response

name of the column holding the response values

endpoint

name of the column holding the name/key of the endpoint default to Endpoint

model_type

type of the trend fit one of "loess", "linear", "logistic", "none"

DOSE

name of the column holding the DOSE/regimen values default to DOSE

color_fill

name of the column to be used for color/fill default to DOSE column

fit_by_color_fill

split fit by color/fill? default FALSE

exposure_metrics

name(s) of the column(s) to be stacked into expname exptile and split into exposure_metric_split

exposure_metric_split

one of "median", "tertile", "quartile", "none"

exposure_metric_soc_value

special exposure code for standard of care default -99

exposure_metric_plac_value

special exposure code for placebo default 0

exposure_metric_soc_name

soc name default to "soc"

exposure_metric_plac_name

placebo name default to "placebo"

exposure_distribution

one of distributions, lineranges, boxplots or none

exposure_distribution_percent

show N/percent of distribution between binlimits one of "%", "N (%)","N","none"

exposure_distribution_Ntotal

show Ntotal by dose level next to the distribution one of "left","right","none"

exposure_distribution_percent_text_size

distribution percentages text size default to 5

dose_plac_value

string identifying placebo in DOSE column

xlab

text to be used as x axis label

ylab

text to be used as y axis label

points_alpha

alpha transparency for points

points_show

show the observations TRUE/FALSE

mean_obs_byexptile

observed mean by exptile TRUE/FALSE

mean_obs_byexptile_plac

observed mean by exptile placebo TRUE/FALSE

mean_obs_byexptile_text_size

by exptile mean text size default to 5

mean_obs_byexptile_group

additional grouping for exptile means default none

mean_obs_bydose

observed mean by dose TRUE/FALSE

mean_obs_bydose_plac

observed mean by placebo dose TRUE/FALSE

mean_obs_bydose_text_size

by dose mean text size default to 5

N_byexptile_ypos

N responders/Ntotal y position by exptile one of with means top bottom none

N_bydose_ypos

N responders/Ntotal y position by dose/color one of with means top bottom none

N_text_size

N responders/Ntotal text size default to 5

N_text_sep

character string to separate N responders/Ntotal or N/mean defaults to / otherwise \n

binlimits_show

show the binlimits vertical lines TRUE/FALSE

binlimits_text_size

binlimits text size default to 5

binlimits_ypos

binlimits y position default to -Inf

binlimits_color

binlimits text color default to alpha("gray70",0.5)

dist_position_scaler

space occupied by the distribution default to 0.2

dist_offset

offset where the distribution position starts default to 0

dist_scale

scaling parameter for ggridges default to 0.9

lineranges_ypos

where to put the lineranges -1

lineranges_dodge

lineranges vertical dodge value 1

lineranges_doselabel

TRUE/FALSE

lineranges_Ntotal

show Ntotal by dose level next to the lineranges one of "left","right","none"

proj_bydose

project the predictions on the fit curve TRUE/FALSE

yproj

project the predictions on y axis TRUE/FALSE

yproj_xpos

y projection x position 0

yproj_dodge

y projection dodge value 0.2

yaxis_position

where to put y axis "left" or "right"

facet_formula

facet formula to be use otherwise endpoint ~ expname

theme_certara

apply certara colors and format for strips and default colour/fill

return_list

What to return if True a list of the datasets and plot is returned instead of only the plot

Examples

# Example 1
library(ggplot2)
effICGI <- logistic_data |>
dplyr::filter(!is.na(ICGI))|>
dplyr::filter(!is.na(AUC))
effICGI$DOSE <- factor(effICGI$DOSE,
                      levels=c("0", "600", "1200","1800","2400"),
                      labels=c("Placebo", "600 mg", "1200 mg","1800 mg","2400 mg"))
effICGI$STUDY <- factor(effICGI$STUDY)    
effICGI$ICGI2 <- effICGI$ICGI
effICGI <- tidyr::gather(effICGI,Endpoint,response,ICGI,ICGI2)

ggresponseexpdist(data = effICGI |>
dplyr::filter(Endpoint=="ICGI"),
model_type = "loess",
exposure_metrics = c("AUC","CMAX"))
#> Joining with `by = join_by(loopvariable, DOSE, quant_10)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_90)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_25)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_75)`
#> Joining with `by = join_by(loopvariable, DOSE, medexp)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_10)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_90)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_25)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_75)`
#> Joining with `by = join_by(loopvariable, DOSE, medexp)`
#> `geom_smooth()` using formula = 'y ~ x'
#> `geom_smooth()` using formula = 'y ~ x'
#> Picking joint bandwidth of 11.7
#> Picking joint bandwidth of 0.934
#> Warning: Removed 488 rows containing non-finite outside the scale range
#> (`stat_density_ridges()`).


# Example 2
ggresponseexpdist(data = effICGI |>
dplyr::filter(Endpoint=="ICGI"),
model_type = "logistic",
exposure_metrics = c("AUC","CMAX"),
exposure_distribution ="boxplots")
#> Joining with `by = join_by(loopvariable, DOSE, quant_10)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_90)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_25)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_75)`
#> Joining with `by = join_by(loopvariable, DOSE, medexp)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_10)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_90)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_25)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_75)`
#> Joining with `by = join_by(loopvariable, DOSE, medexp)`
#> `geom_smooth()` using formula = 'y ~ x'
#> `geom_smooth()` using formula = 'y ~ x'
#> Warning: Removed 488 rows containing non-finite outside the scale range
#> (`stat_boxplot()`).


# Example 3
ggresponseexpdist(data = effICGI|>
dplyr::filter(Endpoint=="ICGI"),
model_type = "linear",
exposure_metrics = c("AUC","WT"),
exposure_distribution ="lineranges")
#> Joining with `by = join_by(loopvariable, DOSE, quant_10)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_90)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_25)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_75)`
#> Joining with `by = join_by(loopvariable, DOSE, medexp)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_10)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_90)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_25)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_75)`
#> Joining with `by = join_by(loopvariable, DOSE, medexp)`
#> `geom_smooth()` using formula = 'y ~ x'
#> Warning: In lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, 
#>     ...) :
#>  extra argument ‘family’ will be disregarded
#> Warning: In lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, 
#>     ...) :
#>  extra argument ‘family’ will be disregarded
#> `geom_smooth()` using formula = 'y ~ x'
#> Warning: In lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, 
#>     ...) :
#>  extra argument ‘family’ will be disregarded
#> Warning: In lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, 
#>     ...) :
#>  extra argument ‘family’ will be disregarded


# Example 4
ggresponseexpdist(data = effICGI |>
                 dplyr::filter(Endpoint=="ICGI"),
                 response = "response",
                 endpoint = "Endpoint",
                 model_type = "loess",
                 DOSE = "DOSE",
                 color_fill = "DOSE",
                 exposure_metrics = c("AUC","CMAX"),
                 exposure_metric_split = c("tertile"),
                 exposure_metric_soc_value = -99,
                 exposure_metric_plac_value = 0,
                 exposure_distribution ="distributions",
                 exposure_distribution_Ntotal="right",
                 N_byexptile_ypos = "top",
                 mean_obs_bydose = TRUE,
                 mean_obs_bydose_text_size = 0,
                 mean_obs_byexptile_text_size = 5,
                 N_bydose_ypos = "none",
                 N_text_sep = "/",
                 binlimits_color = "#475c6b",
                 binlimits_ypos = 0.2,
                 points_alpha= 0.1)
#> Joining with `by = join_by(loopvariable, DOSE, quant_10)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_90)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_25)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_75)`
#> Joining with `by = join_by(loopvariable, DOSE, medexp)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_10)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_90)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_25)`
#> Joining with `by = join_by(loopvariable, DOSE, quant_75)`
#> Joining with `by = join_by(loopvariable, DOSE, medexp)`
#> `geom_smooth()` using formula = 'y ~ x'
#> `geom_smooth()` using formula = 'y ~ x'
#> Picking joint bandwidth of 11.7
#> Picking joint bandwidth of 0.934
#> Warning: Removed 488 rows containing non-finite outside the scale range
#> (`stat_density_ridges()`).

                 
if (FALSE) { # \dontrun{
#' # Example x               
} # }