panel.lmlineq.RdThis is an extension of the panel functions panel.abline and
panel.lmline to also draw a label on the line. The
default label is the line equation, and optionally the R squared value
of its fit to the data points.
panel.ablineq(a = NULL, b = 0,
h = NULL, v = NULL,
reg = NULL, coef = NULL,
pos = if (rotate) 1 else NULL,
offset = 0.5, adj = NULL,
at = 0.5, x, y,
rotate = FALSE, srt = 0,
label = NULL,
varNames = alist(y = y, x = x),
varStyle = "italic",
fontfamily = "serif",
digits = 3,
r.squared = FALSE, sep = ", ", sep.end = "",
col, col.text, col.line,
..., reference = FALSE)
panel.lmlineq(x, y, ...)specification of the line.
The simplest usage is to give a and b to describe the
line y = a + b x.
Horizontal or vertical lines can be specified as
arguments h or v, respectively.
The first argument (a) can also be a model object produced by
lm.
See panel.abline for more details.
passed on to panel.text.
For pos: 1 = below, 2 = left, 3 = above, 4 = right,
and the offset (in character widths) is applied.
passed on to panel.text.
c(0,0) = above right, c(1,0) = above left,
c(0,1) = below right, c(1,1) = below left;
offset does not apply when using adj.
passed on to panel.text.
position of the equation as a fractional distance along the line. This should be in the range 0 to 1. When a vertical line is drawn, this gives the vertical position of the equation.
position of the equation in native units. If given, this over-rides
at.
For panel.lmlineq this is the data, passed on as lm(y ~ x).
set rotate = TRUE to align the equation with the line.
This will over-ride srt, which otherwise gives the rotation
angle.
Note that the calculated angle depends on the current device size;
this will be wrong if you change the device aspect ratio after plotting.
the text to draw along with the line. If specified, this will be used instead of an equation.
names to display for x and/or y.
This should be a list
like list(y = "Q", x = "X")
or, for mathematical symbols,
alist(y = (alpha + beta), x = sqrt(x[t])).
the name of a plotmath function to wrap around the
equation expression, or NULL. E.g. "bolditalic",
"displaystyle".
number of decimal places to show for coefficients in equation.
the \(R^2\) statistic to display along with the equation of a line.
This can be given directly as a number, or TRUE, in which
case the function expects a model object (typically
lm) and extracts the \(R^2\) statistic from it.
The \(R^2\) (r.squared) value is separated from the
equation by the string sep, and also sep.end is added
to the end. For example:
panel.ablineq(lm(y ~ x), r.squared = TRUE,
sep = " (", sep.end = ")").
passed on to panel.abline and
panel.text.
Note that col applies to both text and line; col.text
applies to the equation only, and col.line applies to line only.
whether to draw the line in a "reference line" style, like that used for grid lines.
The equation is constructed as an expression using plotmath.
set.seed(0)
xsim <- rnorm(50, mean = 3)
ysim <- (0 + 2 * xsim) * (1 + rnorm(50, sd = 0.3))
## basic use as a panel function
xyplot(ysim ~ xsim, panel = function(x, y, ...) {
panel.xyplot(x, y, ...)
panel.ablineq(a = 0, b = 2, adj = c(0,1))
panel.lmlineq(x, y, adj = c(1,0), lty = 2,
col.line = "grey", digits = 1)
})
## using layers:
xyplot(ysim^2 ~ xsim) +
layer(panel.ablineq(lm(y ~ x, subset = x <= 3),
varNames = alist(y = y^2, x = x[x <= 3]), pos = 4))
## rotated equation (depends on device aspect at plotting time)
xyplot(ysim ~ xsim) +
layer(panel.ablineq(lm(y ~ x), rotate = TRUE, at = 0.8))
## horizontal and vertical lines
xyplot(ysim ~ xsim) +
layer(panel.ablineq(v = 3, pos = 4, at = 0.1, lty = 2,
label = "3.0 (critical value)")) +
layer(panel.ablineq(h = mean(ysim), pos = 3, at = 0.15, lty = 2,
varNames = alist(y = plain(mean)(y))))
## using layer styles, r.squared
xyplot(ysim ~ xsim) +
layer(panel.ablineq(lm(y ~ x), r.sq = TRUE,
at = 0.4, adj=0:1), style = 1) +
layer(panel.ablineq(lm(y ~ x + 0), r.sq = TRUE,
at = 0.6, adj=0:1), style = 2)
## alternative placement of equations
xyplot(ysim ~ xsim) +
layer(panel.ablineq(lm(y ~ x), r.sq = TRUE, rot = TRUE,
at = 0.8, pos = 3), style = 1) +
layer(panel.ablineq(lm(y ~ x + 0), r.sq = TRUE, rot = TRUE,
at = 0.8, pos = 1), style = 2)
update(trellis.last.object(),
auto.key = list(text = c("intercept", "no intercept"),
points = FALSE, lines = TRUE))