Learn R Programming

lokern (version 1.1-12)

KernS-methods: Methods for ("KernS" classed) Results of lokerns() and glkerns()

Description

Methods for results of glkerns() and lokerns() which are of (S3) class "KernS".

Usage

# S3 method for KernS
fitted(object, ...)
# S3 method for KernS
plot(x, type = "l", lwd = 2.5, col = 3, ...)
# S3 method for KernS
predict(object, x, deriv = object[["deriv"]],
        korder = deriv+2, trace.lev = 0, ...)
# S3 method for KernS
print(x, digits = getOption("digits"), ...)
# S3 method for KernS
residuals(object, ...)

Value

(differing, depending on the generic function)

Arguments

x,object

an R object, of S3 class "KernS", typically result either from glkerns() or lokerns().

type, lwd, col

arguments for plot() only for the case when x$deriv is not 0.

deriv

integer, \(\ge 0\), specifiying order of derivative that should be predicted.

korder

nonnegative integer giving the kernel order; see lokerns or glkerns.

digits

number of significant digits, see print.

trace.lev

integer; level of tracing of Fortran level computations; see lokerns.

...

potentially further arguments passed to and from methods. For the plot(*, deriv=0) method, these are passed to plotDS from package sfsmisc.

Details

Note that fitted() and residuals() rely on x.inOut having been true or x.out having contained the data x, in the lokerns or glkerns call.

The plot() method calls plotDS from package sfsmisc.

predict(object, x, deriv) when either some x are not in x.out or deriv is not 0, basically recalls the original lokerns or glkerns function (keeping the bandwidths for lokerns).

See Also

glkerns, lokerns.

Examples

Run this code
## "interesting" artificial data:
set.seed(47)
x <- sort(round(10*runif(250),2))
fn <- function(x) 5 - x/2 + 3*exp(-(x-5)^2)
y <- fn(x) + rnorm(x)/4
plot(x,y)
## Tracing the phases in the Fortran code: trace=1 gives some, trace=3 gives *much*
lof <- lokerns(x,y, trace=2)
plot(lof)
plot(lof, cex = 1/4)# maybe preferable
plot(fn, 0, 10, add=TRUE, col=adjustcolor("gray40",1/2), lwd=2, lty=2)
## Simpler, using the lines() method:
plot(x,y); lines(lof, lwd=2, col=2)

qqnorm(residuals(lof)) # hmm... overfitting?
stopifnot(all.equal(y, fitted(lof) + residuals(lof), tolerance = 1e-15),
          predict(lof)$y == fitted(lof))
lof$iter # negative ?
tt <- seq(0, 10, by=1/32)
## again with 'tracing' [not for the average user]
p0 <- predict(lof, x=tt,          trace=1)
p1 <- predict(lof, x=tt, deriv=1, trace=1)
p2 <- predict(lof, x=tt, deriv=2)
plot(p2, type="l"); abline(h=0, lty=3) # not satisfactory, but lokerns(*,deriv=2) is
lof2 <- lokerns(x,y, deriv=2)
plot(lof2, ylim = c(-12,4), main=
   "lokerns(*, deriv=2) -- much more smooth than predict(*,deriv=2)")
mtext("as lokerns(*, deriv=2) chooses larger bandwidths[] !")
lines(predict(lof2, x=tt), col=adjustcolor("tomato", 1/3), lwd=5)
lines(p2, col="gray50"); abline(h=0, lty=3)
## add 2nd derivative of underlying fn():
f2 <- fn; body(f2) <- D(D(body(fn), "x"),"x")
lines(tt, f2(tt), col="blue")

Run the code above in your browser using DataLab