Learn R Programming

scam (version 1.0)

smooth.construct.tesmi1.smooth.spec: Tensor product smoothing constructor for a bivariate function monotone increasing in the first covariate

Description

This is a special method function for creating tensor product bivariate smooths monotone increasing in the first covariate which is built by the mgcv constructor function for smooth terms, smooth.construct. It is constructed from a pair of single penalty marginal smooths. This tensor product is specified by model terms such as s(x1,x2,k=c(q1,q2),bs="tesmi1",m=2), where the basis for the second marginal smooth is specified in the second element of bs.

Usage

smooth.construct.tesmi1.smooth.spec(object, data, knots)

Arguments

object
A smooth specification object, generated by an s term in a GAM formula.
data
A data frame or list containing the values of the elements of object$term, with names given by object$term.
knots
An optional list containing the knots corresponding to object$term. If it is NULL then the knot locations are generated automatically.

Value

  • An object of class "tesmi1.smooth". In addition to the usual elements of a smooth class documented under smooth.construct of the mgcv library, this object contains:
  • p.identA vector of 0's and 1's for model parameter identification: 1's indicate parameters which will be exponentiated, 0's - otherwise.
  • ZcA matrix of identifiability constraints.
  • margin.classThe class of the second unconstrained marginal smooth.

References

Pya, N. (2010) Additive models with shape constraints. PhD thesis. University of Bath. Department of Mathematical Sciences

See Also

smooth.construct.tesmi2.smooth.spec

Examples

Run this code
## tensor product `tesmi1' example 
  ## simulating data...
   set.seed(2)
   n <- 30
   x1 <- sort(runif(n)*4-1)
   x2 <- sort(runif(n))
   f1 <- matrix(0,n,n)
   for (i in 1:n) for (j in 1:n) 
       { f1[i,j] <- exp(4*x1[i])/(1+exp(4*x1[i]))+2*sin(pi*x2[j])}
   f <- as.vector(t(f1))
   y <- f+rnorm(length(f))*0.1
   x11 <-  matrix(0,n,n)
   x11[,1:n] <- x1
   x11 <- as.vector(t(x11))
   x22 <- rep(x2,n)
   dat <- list(x1=x11,x2=x22,y=y)
## fit model ...
   b <- scam(y~s(x1,x2,k=c(10,10),bs="tesmi1",m=2),
            family=gaussian(link="identity"), data=dat,sp=NULL)
## plot results ...
   par(mfrow=c(2,2))
   plot(b,se=TRUE)
   plot(b,pers=TRUE,theta = 30, phi = 40)
   plot(y,b$fitted.values,xlab="Simulated data",ylab="Fitted data")

Run the code above in your browser using DataLab