Learn R Programming

GeDS (version 0.2.8)

PPolyRep: Piecewise Polynomial Spline Representation

Description

The function converts a GeDS fit which has a B-spline representation to a piecewise polynomial form.

Usage

PPolyRep(object, n = 3)

Value

An object that inherits from classes "spline" and "polySpline". It is a list whose arguments are:

knots

a vector of size \(k + 2\) containing the complete set of knots (internal knots plus the limits of the interval) of the GeDS fit.

coefficients

a \((k + 2) \times n\) matrix containing the coefficients of the polynomials in the required piecewise polynomial representation.

Arguments

object

the GeDS-class where the GeDS fit to be converted is found.

n

integer value (2, 3 or 4) specifying the order (\(=\) degree \(+ 1\)) of the GeDS fit which should be converted to a piecewise polynomial form. By default equal to 3L. Non-integer values will be passed to the function as.integer.

Details

This function converts a selected GeDS fit from a GeDS-class object represented in terms of B-splines into an object where the fit is represented in terms of piecewise polynomials.

The function wraps polySpline in order to let it accept GeDS-class objects as input. Hence the function provides a useful link between the package GeDS and the package splines, allowing the user to take advantage of the functions provided in the splines package.

Examples

Run this code
# Generate a data sample for the response variable
# Y and the single covariate X
set.seed(123)
N <- 500
f_1 <- function(x) (10*x/(1+100*x^2))*4+4
X <- sort(runif(N, min = -2, max = 2))
# Specify a model for the mean of Y to include only
# a component non-linear in X, defined by the function f_1
means <- f_1(X)
# Add (Normal) noise to the mean of Y
Y <- rnorm(N, means, sd = 0.1)

# Fit a Normal GeDS regression using NGeDS
Gmod <- NGeDS(Y ~ f(X), beta = 0.6, phi = 0.995, Xextr = c(-2,2))

# construct the PP representation of the cubic GeDS fit
# and apply some functions of the package splines
Polymod <- PPolyRep(Gmod, 4)
require(splines)
class(Polymod)
splineKnots(Polymod)
knots(Gmod, n = 4)
plot(Polymod)


# Generate a plot showing the PP representation
# based on the same example
knt <- splineKnots(Polymod)
coeffs <- coef(Polymod)
plot(Gmod, n = 4, legend.pos = FALSE, main = "Cubic Curves")
cols <- sample(heat.colors(length(knt)), length(knt))
for(i in 1:(length(knt))){
  curve(coeffs[i,1] + coeffs[i,2]*(x - knt[i])+
          coeffs[i,3]*(x - knt[i])^2+
        coeffs[i,4]*(x - knt[i])^3,
        add = TRUE, col = cols[i])
  abline(v = knt[i])
}

Run the code above in your browser using DataLab