plot.CMA_per_episode {AdhereR} | R Documentation |
Plot CMA_per_episode and CMA_sliding_window objects.
Description
Plots the event data and the estimated CMA per treatment episode and sliding window, respectively.
Usage
## S3 method for class 'CMA_per_episode'
plot(
x,
patients.to.plot = NULL,
duration = NA,
align.all.patients = FALSE,
align.first.event.at.zero = FALSE,
show.period = c("dates", "days")[2],
period.in.days = 90,
show.legend = TRUE,
legend.x = "right",
legend.y = "bottom",
legend.bkg.opacity = 0.5,
legend.cex = 0.75,
legend.cex.title = 1,
cex = 1,
cex.axis = 0.75,
cex.lab = 1,
show.cma = TRUE,
xlab = c(dates = "Date", days = "Days"),
ylab = c(withoutCMA = "patient", withCMA = "patient (& CMA)"),
title = c(aligned = "Event patterns (all patients aligned)", notaligned =
"Event patterns"),
col.cats = rainbow,
unspecified.category.label = "drug",
medication.groups.to.plot = NULL,
medication.groups.separator.show = TRUE,
medication.groups.separator.lty = "solid",
medication.groups.separator.lwd = 2,
medication.groups.separator.color = "blue",
medication.groups.allother.label = "*",
lty.event = "solid",
lwd.event = 2,
pch.start.event = 15,
pch.end.event = 16,
show.event.intervals = FALSE,
show.overlapping.event.intervals = c("first", "last", "min gap", "max gap",
"average")[1],
plot.events.vertically.displaced = TRUE,
print.dose = FALSE,
cex.dose = 0.75,
print.dose.outline.col = "white",
print.dose.centered = FALSE,
plot.dose = FALSE,
lwd.event.max.dose = 8,
plot.dose.lwd.across.medication.classes = FALSE,
col.na = "lightgray",
col.continuation = "black",
lty.continuation = "dotted",
lwd.continuation = 1,
print.CMA = TRUE,
CMA.cex = 0.5,
plot.CMA = TRUE,
plot.CMA.as.histogram = TRUE,
plot.partial.CMAs.as = c("stacked", "overlapping", "timeseries")[1],
plot.partial.CMAs.as.stacked.col.bars = "gray90",
plot.partial.CMAs.as.stacked.col.border = "gray30",
plot.partial.CMAs.as.stacked.col.text = "black",
plot.partial.CMAs.as.timeseries.vspace = 7,
plot.partial.CMAs.as.timeseries.start.from.zero = TRUE,
plot.partial.CMAs.as.timeseries.col.dot = "darkblue",
plot.partial.CMAs.as.timeseries.col.interval = "gray70",
plot.partial.CMAs.as.timeseries.col.text = "firebrick",
plot.partial.CMAs.as.timeseries.interval.type = c("none", "segments", "arrows",
"lines", "rectangles")[2],
plot.partial.CMAs.as.timeseries.lwd.interval = 1,
plot.partial.CMAs.as.timeseries.alpha.interval = 0.25,
plot.partial.CMAs.as.timeseries.show.0perc = TRUE,
plot.partial.CMAs.as.timeseries.show.100perc = FALSE,
plot.partial.CMAs.as.overlapping.alternate = TRUE,
plot.partial.CMAs.as.overlapping.col.interval = "gray70",
plot.partial.CMAs.as.overlapping.col.text = "firebrick",
CMA.plot.ratio = 0.1,
CMA.plot.col = "lightgreen",
CMA.plot.border = "darkgreen",
CMA.plot.bkg = "aquamarine",
CMA.plot.text = CMA.plot.border,
highlight.followup.window = TRUE,
followup.window.col = "green",
highlight.observation.window = TRUE,
observation.window.col = "yellow",
observation.window.opacity = 0.3,
print.episode.or.sliding.window = FALSE,
alternating.bands.cols = c("white", "gray95"),
bw.plot = FALSE,
rotate.text = -60,
force.draw.text = FALSE,
min.plot.size.in.characters.horiz = 0,
min.plot.size.in.characters.vert = 0,
max.patients.to.plot = 100,
export.formats = NULL,
export.formats.fileprefix = "AdhereR-plot",
export.formats.height = NA,
export.formats.width = NA,
export.formats.save.svg.placeholder = TRUE,
export.formats.svg.placeholder.type = c("jpg", "png", "webp")[2],
export.formats.svg.placeholder.embed = FALSE,
export.formats.html.template = NULL,
export.formats.html.javascript = NULL,
export.formats.html.css = NULL,
export.formats.directory = NA,
generate.R.plot = TRUE,
do.not.draw.plot = FALSE,
suppress.warnings = FALSE,
...
)
## S3 method for class 'CMA_sliding_window'
plot(
x,
patients.to.plot = NULL,
duration = NA,
align.all.patients = FALSE,
align.first.event.at.zero = FALSE,
show.period = c("dates", "days")[2],
period.in.days = 90,
show.legend = TRUE,
legend.x = "right",
legend.y = "bottom",
legend.bkg.opacity = 0.5,
legend.cex = 0.75,
legend.cex.title = 1,
cex = 1,
cex.axis = 0.75,
cex.lab = 1,
show.cma = TRUE,
xlab = c(dates = "Date", days = "Days"),
ylab = c(withoutCMA = "patient", withCMA = "patient (& CMA)"),
title = c(aligned = "Event patterns (all patients aligned)", notaligned =
"Event patterns"),
col.cats = rainbow,
unspecified.category.label = "drug",
medication.groups.to.plot = NULL,
medication.groups.separator.show = TRUE,
medication.groups.separator.lty = "solid",
medication.groups.separator.lwd = 2,
medication.groups.separator.color = "blue",
medication.groups.allother.label = "*",
lty.event = "solid",
lwd.event = 2,
pch.start.event = 15,
pch.end.event = 16,
show.event.intervals = FALSE,
show.overlapping.event.intervals = c("first", "last", "min gap", "max gap",
"average")[1],
plot.events.vertically.displaced = TRUE,
print.dose = FALSE,
cex.dose = 0.75,
print.dose.outline.col = "white",
print.dose.centered = FALSE,
plot.dose = FALSE,
lwd.event.max.dose = 8,
plot.dose.lwd.across.medication.classes = FALSE,
col.na = "lightgray",
col.continuation = "black",
lty.continuation = "dotted",
lwd.continuation = 1,
print.CMA = TRUE,
CMA.cex = 0.5,
plot.CMA = TRUE,
plot.CMA.as.histogram = TRUE,
plot.partial.CMAs.as = c("stacked", "overlapping", "timeseries")[1],
plot.partial.CMAs.as.stacked.col.bars = "gray90",
plot.partial.CMAs.as.stacked.col.border = "gray30",
plot.partial.CMAs.as.stacked.col.text = "black",
plot.partial.CMAs.as.timeseries.vspace = 7,
plot.partial.CMAs.as.timeseries.start.from.zero = TRUE,
plot.partial.CMAs.as.timeseries.col.dot = "darkblue",
plot.partial.CMAs.as.timeseries.col.interval = "gray70",
plot.partial.CMAs.as.timeseries.col.text = "firebrick",
plot.partial.CMAs.as.timeseries.interval.type = c("none", "segments", "arrows",
"lines", "rectangles")[2],
plot.partial.CMAs.as.timeseries.lwd.interval = 1,
plot.partial.CMAs.as.timeseries.alpha.interval = 0.25,
plot.partial.CMAs.as.timeseries.show.0perc = TRUE,
plot.partial.CMAs.as.timeseries.show.100perc = FALSE,
plot.partial.CMAs.as.overlapping.alternate = TRUE,
plot.partial.CMAs.as.overlapping.col.interval = "gray70",
plot.partial.CMAs.as.overlapping.col.text = "firebrick",
CMA.plot.ratio = 0.1,
CMA.plot.col = "lightgreen",
CMA.plot.border = "darkgreen",
CMA.plot.bkg = "aquamarine",
CMA.plot.text = CMA.plot.border,
highlight.followup.window = TRUE,
followup.window.col = "green",
highlight.observation.window = TRUE,
observation.window.col = "yellow",
observation.window.opacity = 0.3,
print.episode.or.sliding.window = FALSE,
alternating.bands.cols = c("white", "gray95"),
bw.plot = FALSE,
rotate.text = -60,
force.draw.text = FALSE,
min.plot.size.in.characters.horiz = 0,
min.plot.size.in.characters.vert = 0,
max.patients.to.plot = 100,
export.formats = NULL,
export.formats.fileprefix = "AdhereR-plot",
export.formats.height = NA,
export.formats.width = NA,
export.formats.save.svg.placeholder = TRUE,
export.formats.svg.placeholder.type = c("jpg", "png", "webp")[2],
export.formats.svg.placeholder.embed = FALSE,
export.formats.html.template = NULL,
export.formats.html.javascript = NULL,
export.formats.html.css = NULL,
export.formats.directory = NA,
generate.R.plot = TRUE,
do.not.draw.plot = FALSE,
suppress.warnings = FALSE,
...
)
Arguments
x |
A |
patients.to.plot |
A vector of strings containing the list of
patient IDs to plot (a subset of those in the |
duration |
A number, the total duration (in days) of the whole
period to plot; in |
align.all.patients |
Logical, should all patients be aligned (i.e., the actual dates are discarded and all plots are relative to the earliest date)? |
align.first.event.at.zero |
Logical, should the first event be placed at the origin of the time axis (at 0)? |
show.period |
A string, if "dates" show the actual dates at the
regular grid intervals, while for "days" (the default) shows the days since
the beginning; if |
period.in.days |
The number of days at which the regular grid is drawn (or 0 for no grid). |
show.legend |
Logical, should the legend be drawn? |
legend.x |
The position of the legend on the x axis; can be "left", "right" (default), or a numeric value. |
legend.y |
The position of the legend on the y axis; can be "bottom" (default), "top", or a numeric value. |
legend.bkg.opacity |
A number between 0.0 and 1.0 specifying the opacity of the legend background. |
legend.cex , legend.cex.title |
The legend and legend title font sizes. |
cex , cex.axis , cex.lab |
numeric values specifying the cex of the various types of text. |
show.cma |
Logical, should the CMA type be shown in the title? |
xlab |
Named vector of x-axis labels to show for the two types of periods
("days" and "dates"), or a single value for both, or |
ylab |
Named vector of y-axis labels to show without and with CMA estimates,
or a single value for both, or |
title |
Named vector of titles to show for and without alignment, or a
single value for both, or |
col.cats |
A color or a function that specifies the single
colour or the colour palette used to plot the different medication; by
default |
unspecified.category.label |
A string giving the name of the unspecified (generic) medication category. |
medication.groups.to.plot |
the names of the medication groups to plot or
|
medication.groups.separator.show |
a boolean, if |
medication.groups.separator.lty , medication.groups.separator.lwd , medication.groups.separator.color |
graphical parameters (line type, line width and colour describing the visual marking og medication groups as beloning to the same patient. |
medication.groups.allother.label |
a string giving the label to
use for the implicit |
lty.event , lwd.event , pch.start.event , pch.end.event |
The style of the event (line style, width, and start and end symbols). |
show.event.intervals |
Logical, should the actual event intervals
be shown? As per-episode and sliding windows might have overlapping intervals,
it is better not to show them by default ( |
show.overlapping.event.intervals |
specifies how to plot the event intervals that appear in multiple sliding windows or episodes. We can plot how thye look in the first sliding window or episode (the default), how they appear in the last, pick the one that minimizes the gap (min gap) or maximizes it (max gap), or compute their average across all sliding windows or episodes containing them. |
plot.events.vertically.displaced |
Should consecutive events be plotted on separate rows (i.e., separated vertically, the default) or on the same row? |
print.dose , cex.dose , print.dose.outline.col , print.dose.centered |
Print daily dose as a number and, if so, how (color, size, position...). |
plot.dose , lwd.event.max.dose , plot.dose.lwd.across.medication.classes |
Show dose through the width of the event lines and, if so, what the maximum width should be, and should this maximum be by medication class or overall. |
col.na |
The colour used for missing event data. |
col.continuation , lty.continuation , lwd.continuation |
The color, style and width of the contuniation lines connecting consecutive events. |
print.CMA |
Logical, should the CMA values be printed? |
CMA.cex |
... and, if printed, what cex (numeric) to use? |
plot.CMA |
Logical, should the distribution of the CMA values
across episodes/sliding windows be plotted? If |
plot.CMA.as.histogram |
Logical, should the CMA plot be a histogram or a (truncated) density plot? Please note that it is TRUE by deafult for CMA_per_episode and FALSE for CMA_sliding_window, because usually there are more sliding windows than episodes. Also, the density estimate cannot be estimated for less than three different values. |
plot.partial.CMAs.as |
Should the partial CMAs be plotted? Possible values
are "stacked", "overlapping" or "timeseries", or |
plot.partial.CMAs.as.stacked.col.bars , plot.partial.CMAs.as.stacked.col.border , plot.partial.CMAs.as.stacked.col.text |
If plotting the partial CMAs as stacked bars, define their graphical attributes. |
plot.partial.CMAs.as.timeseries.vspace , plot.partial.CMAs.as.timeseries.start.from.zero , plot.partial.CMAs.as.timeseries.col.dot , plot.partial.CMAs.as.timeseries.col.interval , plot.partial.CMAs.as.timeseries.col.text , plot.partial.CMAs.as.timeseries.interval.type , plot.partial.CMAs.as.timeseries.lwd.interval , plot.partial.CMAs.as.timeseries.alpha.interval , plot.partial.CMAs.as.timeseries.show.0perc , plot.partial.CMAs.as.timeseries.show.100perc |
If plotting the partial CMAs as imeseries, these are their graphical attributes. |
plot.partial.CMAs.as.overlapping.alternate , plot.partial.CMAs.as.overlapping.col.interval , plot.partial.CMAs.as.overlapping.col.text |
If plotting the partial CMAs as overlapping segments, these are their graphical attributes. |
CMA.plot.ratio |
A number, the proportion of the total horizontal plot space to be allocated to the CMA plot. |
CMA.plot.col , CMA.plot.border , CMA.plot.bkg , CMA.plot.text |
Strings giving the colours of the various components of the CMA plot. |
highlight.followup.window |
Logical, should the follow-up window be plotted? |
followup.window.col |
The follow-up window colour. |
highlight.observation.window |
Logical, should the observation window be plotted? |
observation.window.col , observation.window.opacity |
Attributes of the observation window (colour, transparency). |
print.episode.or.sliding.window |
Logical, should we show which
events belong to which episode or sliding window? To work, the CMA must have
been constructed with |
alternating.bands.cols |
The colors of the alternating vertical bands
distinguishing the patients; can be |
bw.plot |
Logical, should the plot use grayscale only (i.e., the
|
rotate.text |
Numeric, the angle by which certain text elements (e.g., axis labels) should be rotated. |
force.draw.text |
Logical, if |
min.plot.size.in.characters.horiz , min.plot.size.in.characters.vert |
Numeric, the minimum size of the plotting surface in characters;
horizontally (min.plot.size.in.characters.horiz) refers to the the whole
duration of the events to plot; vertically (min.plot.size.in.characters.vert)
refers to a single event. If the plotting is too small, possible solutions
might be: if within |
max.patients.to.plot |
Numeric, the maximum patients to attempt to plot. |
export.formats |
a string giving the formats to export the figure
to (by default |
export.formats.fileprefix |
a string giving the file name prefix for the exported formats (defaults to "AdhereR-plot"). |
export.formats.height , export.formats.width |
numbers giving the
desired dimensions (in pixels) for the exported figure (defaults to sane
values if |
export.formats.save.svg.placeholder |
a logical, if TRUE, save an
image placeholder of type given by |
export.formats.svg.placeholder.type |
a string, giving the type of
placeholder for the |
export.formats.svg.placeholder.embed |
a logical, if |
export.formats.html.template , export.formats.html.javascript , export.formats.html.css |
character strings or |
export.formats.directory |
a string; if exporting, which directory
to export to; if |
generate.R.plot |
a logical, if |
do.not.draw.plot |
a logical, if |
suppress.warnings |
Logical, if |
... |
other parameters (to be passed to the estimation and plotting of the simple CMA) |
Details
The x-axis represents time (either in days since the earliest date or as actual dates), with consecutive events represented as ascending on the y-axis.
Each event is represented as a segment with style lty.event
and line
width lwd.event
starting with a pch.start.event
and ending with
a pch.end.event
character, coloured with a unique color as given by
col.cats
, extending from its start date until its end date.
Consecutive events are thus represented on consecutive levels of the y-axis
and are connected by a "continuation" line with col.continuation
colour, lty.continuation
style and lwd.continuation
width;
these continuation lines are purely visual guides helping to perceive the
sequence of events, and carry no information about the avilability of
medicine in this interval.
Above these, the treatment episodes or the sliding windows are represented in a stacked manner from the earlieast (left, bottom of the stack) to the latest (right, top of the stack), each showing the CMA as percent fill (capped at 100% even if CMA values may be higher) and also as text.
The follow-up and the observation windows are plotted as empty an rectangle and as shaded rectangle, respectively (for some CMAs the observation window might be adjusted in which case the adjustment may also be plotted using a different shading).
The kernel density ("smoothed histogram") of the CMA estimates across treatment episodes/sliding windows (if more than 2) can be visually represented as well in the left side of the figure (NB, their horizontal scales may be different across patients).
When several patients are displayed on the same plot, they are organized
vertically, and alternating bands (white and gray) help distinguish
consecutive patients.
Implicitely, all patients contained in the cma
object will be plotted,
but the patients.to.plot
parameter allows the selection of a subset
of patients.
Finally, the y-axis shows the patient ID and possibly the CMA estimate as well.
Any not explicitely defined arguments are passed to the simple CMA estimation and plotting function; therefore, for more info about possible estimation parameters plese see the help for the appropriate simple CMA, and for possible aesthetic tweaks, please see the help for their plotting.
See Also
See the simple CMA estimation CMA1
to CMA9
and plotting plot.CMA1
functions for extra parameters.
Examples
## Not run:
cmaW <- CMA_sliding_window(CMA=CMA1,
data=med.events,
ID.colname="PATIENT_ID",
event.date.colname="DATE",
event.duration.colname="DURATION",
event.daily.dose.colname="PERDAY",
medication.class.colname="CATEGORY",
carry.only.for.same.medication=FALSE,
consider.dosage.change=FALSE,
followup.window.start=0,
observation.window.start=0,
observation.window.duration=365,
sliding.window.start=0,
sliding.window.start.unit="days",
sliding.window.duration=90,
sliding.window.duration.unit="days",
sliding.window.step.duration=7,
sliding.window.step.unit="days",
sliding.window.no.steps=NA,
date.format="%m/%d/%Y"
);
plot(cmaW, patients.to.plot=c("1","2"));
cmaE <- CMA_per_episode(CMA=CMA1,
data=med.events,
ID.colname="PATIENT_ID",
event.date.colname="DATE",
event.duration.colname="DURATION",
event.daily.dose.colname="PERDAY",
medication.class.colname="CATEGORY",
carry.only.for.same.medication=FALSE,
consider.dosage.change=FALSE,
followup.window.start=0,
observation.window.start=0,
observation.window.duration=365,
date.format="%m/%d/%Y"
);
plot(cmaE, patients.to.plot=c("1","2"));
## End(Not run)