| concon {DierckxSpline} | R Documentation |
General curve fitting with splines with convexity constraints. Wrapper for the Fortran function CONCON.
concon(x, ...) ## Default S3 method: concon(x, y = NULL, w = NULL, v = 0, s = 0, ...)
x |
A data.frame, matrix, or numeric
vector. See details. |
y |
Optional numeric vector. See details. |
w |
Optional vector of weights |
v |
Convexity constraints. See details. |
s |
Smoothing parameter |
... |
Additional arguments used only in
update.concon. Otherwise, ignored. |
As with smooth.spline, the x vector should
contain at least four distinct values. Distinct here means
``distinct after rounding to 6 significant digits'', i.e., x
will be transformed to unique(sort(signif(x, 6))), and
y, w, and v are pooled accordingly.
For the default method, arguments x and y are supplied
to xy.coords to determine abscissa and ordinate
values. The actual function used is DierckxSpline:::xyw.coords
which is not exported in the NAMESPACE.
concon determines a smooth cubic spline approximation
s(x). See chapters 1 and 3 in the reference for definition of
symbols.
The vector v should be the same length as x. v[i]
must be set to 1 if s(x) must be locally concave at x[i],
to -1 if s(x) must be locally convex at x[i] and to 0
if no convexity constraint is imposed at x[i]. If all v
are 0 (no consraints) an error is thrown suggesting the use of
curfit instead.
An object of class dierckx with the following components:
iopt |
method used |
m |
length of x |
x |
abscissa values |
y |
ordinate values |
w |
input weights |
s |
input smoothing parameter |
nest |
Estimated number of knots |
n |
Actual number of knots |
knots |
Knot locations. Do NOT modify before call to
update.dierckx |
g |
Number of interior knots |
coef |
b-Spline coefficients. Use coef.dierckx to extract. |
fp |
sum of squares residuals. Use deviance.dierckx to
extract. |
wrk |
Work space. Do NOT modify before call to
update.dierckx |
lwrk |
Length of wrk. Do NOT modify before call to
update.dierckx |
iwrk |
Integer work space. Do NOT modify before call to
update.dierckx |
kwrk |
Length of iwrk. Do NOT modify before call to
update.dierckx |
bind |
Indicates the knots where s''(x)=0. Do NOT modify before call to
update.dierckx |
sx |
Indicates the knots where s''(x)=0. Do NOT modify before call to
update.dierckx |
ier |
Error code. Should always be zero. |
method |
input method value |
k |
Always 3 (cubic spline) |
periodic |
Always FALSE |
routine |
Always 'concon.default' |
xlab |
The x-label determined from deparse(substitute(x)).
|
ylab |
The y-label determined from deparse(substitute(y)).
|
Sundar Dorai-Raj
Dierckx, P. (1991) Curve and Surface Fitting with Splines, Oxford Science Publications.
data(moisture)
f1 <- with(moisture, concon(x, y, w, v, s = 0.2))
f2 <- update(f1, s = 0.04)
f3 <- update(f1, s = 0.0002)
g1 <- with(moisture, curfit(x, y, w, knots = knots(f1, interior=FALSE)))
#must include end knots, via interior = FALSE
g2 <- update(g1, knots = knots(f2, FALSE))
g3 <- update(g1, knots = knots(f3, FALSE))
newx <- with(moisture, seq(min(x), max(x), length = 100))
method <- c("Convexity Constrained", "Unconstrained Least Squares")
group <- c("0 interior knots", "1 interior knot", "3 interior knots")
out <- data.frame(x = rep(newx, times = 6),
y = c(predict(f1, newx), predict(f2, newx),
predict(f3, newx), predict(g1, newx),
predict(g2, newx), predict(g3, newx)),
group = rep(group, each = 100, times = 2),
method = rep(method, each = 3 * 100))
library(lattice)
xyplot(y ~ x | method, out, groups = group, panel = function(...) {
panel.superpose(...)
panel.xyplot(moisture$x, moisture$y,
col = "#800000", pch = 16, cex = 1.2)
},
xlim = c(-1, 11), xlab = "", ylab = "", layout = c(1, 2),
as.table = TRUE, scales = list(cex = 1.2),
par.strip.text = list(cex = 1.5), type = "l", lwd = 3,
key = list(space = "top", cex = 1.2, columns = 3,
text = list(levels(out$group)),
lines = list(lwd = 3, col = trellis.par.get("superpose.line")$col[1:3])))