Plotting Intensities of Infection over Time or Space
twinstim_intensity.Rd
intensityplot
method to plot the evolution of the total infection
intensity, or its epidemic or endemic components/proportions over time
or space (integrated over the other dimension) of fitted
twinstim
models (or simEpidataCS
).
The "simEpidataCS"
-method is just a wrapper around
intensityplot.twinstim
by making the "simEpidataCS"
object
"twinstim"
-compatible, i.e. enriching it by the
required model components and environment.
The intensity.twinstim
auxiliary function returns functions which
calculate the endemic or epidemic intensity at a specific time point or
location (integrated over the other dimension).
Usage
# S3 method for class 'twinstim'
intensityplot(x, which = "epidemic proportion",
aggregate = c("time", "space"), types = 1:nrow(x$qmatrix),
tiles, tiles.idcol = NULL, plot = TRUE, add = FALSE,
tgrid = 101, rug.opts = list(),
sgrid = 128, polygons.args = list(), points.args = list(),
cex.fun = sqrt, ...)
# S3 method for class 'simEpidataCS'
intensityplot(x, ...)
intensity.twinstim(x,
aggregate = c("time", "space"), types = 1:nrow(x$qmatrix),
tiles, tiles.idcol = NULL)
Arguments
- x
an object of class
"twinstim"
or"simEpidataCS"
, respectively.- which
"epidemic proportion"
(default),"endemic proportion"
, or"total intensity"
(partially matched), or"epidemic intensity"
or"endemic intensity"
. Determines whether to plot the total or component-specific intensities or their proportions as a function ofaggregate
.- aggregate
One of
"time"
or"space"
. The former results in a plot of the evolution ofwhich
as a function of time (integrated over the observation region \(\bold{W}\)), whereas the latter produces aspplot
ofwhich
over \(\bold{W}\) (spanned bytiles
). In both cases,which
is evaluated on a grid of values, given bytgrid
orsgrid
, respectively.- types
event types to aggregate. By default, all types of events are aggregated, but one could also be interested in only one specific type or a subset of event types.
- tiles
object of class
"SpatialPolygons"
representing the decomposition of \(\bold{W}\) into different regions (as used in the correspondingstgrid
of the"epidataCS"
). This is only needed foraggregate = "space"
.- tiles.idcol
either a column index for
tiles@data
(iftiles
is a"SpatialPolygonsDataFrame"
), orNULL
(default), which refers to the"ID"
slot of the polygons, i.e.,row.names(tiles)
. The ID's must correspond to the factor levels ofstgrid$tile
of the"epidataCS"
on whichx
was fitted.- plot
logical indicating if a plot is desired, which defaults to
TRUE
. Otherwise, a function will be returned, which takes a vector of time points (ifaggregate = "time"
) or a matrix of coordinates (ifaggregate = "space"
), and returnswhich
on this grid.- add
logical. If
TRUE
andaggregate = "time"
, paths are added to the current plot, usinglines
. This does not work foraggregate = "space"
.- tgrid
either a numeric vector of time points when to evaluate
which
, or a scalar representing the desired number of evaluation points in the observation interval \([t_0, T]\). This argument is unused foraggregate = "space"
.- rug.opts
if a list, its elements are passed as arguments to the function
rug
, which will mark the time points of the events ifaggregate = "time"
(it is unused in the spatial case); otherwise (e.g.,NULL
), norug
will be produced. By default, therug
argumentticksize
is set to 0.02 andquiet
is set toTRUE
. Note that the argumentx
of therug
function, which contains the locations for therug
is fixed internally and can not be modified.- sgrid
either an object of class
"SpatialPixels"
(or coercible to that class) representing the locations where to evaluatewhich
, or a scalar representing the approximate number of points of a grid constructed on the bounding box oftiles
.sgrid
is internally subsetted to contain only points insidetiles
. This argument is unused foraggregate = "time"
.- polygons.args
if a list, its elements are passed as arguments to
sp.polygons
, which will addtiles
to the plot ifaggregate = "space"
(it is unused for the temporal plot). The default bordercol
our of the polygons is"darkgrey"
.- points.args
if a list, its elements are passed as arguments to
sp.points
, which will add the event locations to the plot ifaggregate = "space"
(it is unused for the temporal plot). By default, the plot symbol is set topch=1
. The sizes of the points are determined as the product of the argumentcex
(default: 0.5) of this list and the sizes obtained from the functioncex.fun
which accounts for multiple events at the same location.- cex.fun
function which takes a vector of counts of events at each unique location and returns a (vector of)
cex
value(s) for the sizes of the points at the event locations used inpoints.args
. Defaults to thesqrt()
function, which for the default circularpch=1
means that the area of each point is proportional to the number of events at its location.- ...
further arguments passed to
plot
orlines
(ifaggregate = "time"
), or tospplot
(ifaggregate = "space"
).
Forintensityplot.simEpidataCS
, arguments passed tointensityplot.twinstim
.
Value
If plot = FALSE
or aggregate = "time"
,
a function is returned, which takes a vector of
time points (if aggregate = "time"
) or a matrix of coordinates
(if aggregate = "space"
), and returns which
on this grid.
intensity.twinstim
returns a list containing such functions for
the endemic and epidemic intensity (but these are not vectorized).
If plot = TRUE
and aggregate = "space"
, the
trellis.object
of the spatial plot is returned.
See also
plot.twinstim
, which calls intensityplot.twinstim
.
Examples
data("imdepi", "imdepifit")
# for the intensityplot we need the model environment, which can be
# easily added by the intelligent update method (no need to refit the model)
imdepifit <- update(imdepifit, model=TRUE)
## path of the total intensity
opar <- par(mfrow=c(2,1))
intensityplot(imdepifit, which="total intensity",
aggregate="time", tgrid=500)
plot(imdepi, "time", breaks=100)
par(opar)
## time course of the epidemic proportion (default) by event
intensityplot(imdepifit, tgrid=500, types=1)
intensityplot(imdepifit, tgrid=500, types=2,
add=TRUE, col=2, rug.opts=list(col=2))
legend("topright", legend=levels(imdepi$events$type), lty=1, col=1:2,
title = "event type")
## endemic and total intensity in one plot
intensityplot(imdepifit, which="total intensity", tgrid=501, lwd=2,
ylab="intensity")
intensityplot(imdepifit, which="endemic intensity", tgrid=501, lwd=2,
add=TRUE, col=2, rug.opts=NULL)
text(2500, 0.36, labels="total", col=1, pos=2, font=2)
text(2500, 0.08, labels="endemic", col=2, pos=2, font=2)
## spatial shape of the intensity (aggregated over time)
# need a map of the 'stgrid' tiles, here Germany's districts
load(system.file("shapes", "districtsD.RData", package="surveillance"))
# total intensity (using a rather sparse 'sgrid' for speed)
intensityplot(imdepifit, which="total intensity",
aggregate="space", tiles=districtsD, sgrid=500,
col.regions=rev(heat.colors(100)))
if (surveillance.options("allExamples")) {
# epidemic proportion by type
maps_epiprop <- lapply(1:2, function (type) {
intensityplot(imdepifit, which="epidemic", aggregate="space",
types=type, tiles=districtsD, sgrid=1000,
main=rownames(imdepifit$qmatrix)[type],
scales=list(draw=FALSE), at=seq(0,1,by=0.1),
col.regions=rev(hcl.colors(10,"YlOrRd")),
par.settings=list(par.title.text=list(cex=1)))
})
plot(maps_epiprop[[1]], split=c(1,1,2,1), more=TRUE)
plot(maps_epiprop[[2]], split=c(2,1,2,1))
}