View source: R/bivar.smooth.const.R
| smooth.construct.tesmd1.smooth.spec | R Documentation |
This is a special method function
for creating tensor product bivariate smooths monotone decreasing 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="tesmd1",m=2).
The default basis for the second marginal smooth is P-spline. Cyclic cubic regression spline ("cc") is implemented in addition to the P-spline. See an example below on how to call for it.
## S3 method for class 'tesmd1.smooth.spec'
smooth.construct(object, data, knots)
object |
A smooth specification object, generated by an |
data |
A data frame or list containing the values of the elements of |
knots |
An optional list containing the knots corresponding to |
An object of class "tesmd1.smooth". In addition to the usual
elements of a smooth class documented under smooth.construct of the mgcv library,
this object contains:
p.ident |
A vector of 0's and 1's for model parameter identification: 1's indicate parameters which will be exponentiated, 0's - otherwise. |
Zc |
A matrix of identifiability constraints. |
margin.bs |
A two letter character string indicating the (penalized) smoothing basis to use for the second unconstrained marginal smooth. (eg |
Natalya Pya <nat.pya@gmail.com>
Pya, N. and Wood, S.N. (2015) Shape constrained additive models. Statistics and Computing, 25(3), 543-559
Pya, N. (2010) Additive models with shape constraints. PhD thesis. University of Bath. Department of Mathematical Sciences
smooth.construct.tesmd2.smooth.spec
## Not run:
## tensor product `tesmd1' example
require(scam)
simu <- function(x,z) { -exp(4*x)/(1+exp(4*x))+2*sin(pi*z) }
xs <-seq(-1,3,length=30); zs <- seq(0,1,length=30)
pr <- data.frame(x=rep(xs,30),z=rep(zs,rep(30,30)))
truth <- matrix(simu(pr$x,pr$z),30,30)
set.seed(5)
n <- 500
x <- runif(n)*4-1
z <- runif(n)
f <- simu(x,z)
y <- f + rnorm(n)*.3
## fit model ...
b <- scam(y~s(x,z,bs="tesmd1",k=10))
summary(b)
old.par <- par(mfrow=c(2,2),mar=c(4,4,2,2))
plot(b,se=TRUE)
plot(b,pers=TRUE,theta = 30, phi = 40);title("tesmd1")
plot(y,b$fitted.values,xlab="Simulated data",ylab="Fitted data",pch=".",cex=3)
persp(xs,zs,truth,theta = 30, phi = 40);title("truth")
par(old.par)
vis.scam(b,theta = 30, phi = 40)
## example with cyclic cubic regression spline along the second covariate...
simu2 <- function(x,z) { -exp(4*x)/(1+exp(4*x))+sin(2*pi*z) }
xs <-seq(-1,3,length=30); zs <- seq(0,1,length=30)
pr <- data.frame(x=rep(xs,30),z=rep(zs,rep(30,30)))
truth <- matrix(simu2(pr$x,pr$z),30,30)
set.seed(2)
n <- 500
x <- runif(n)*4-1
z <- runif(n)
f <- simu2(x,z)
y <- f + rnorm(n)*.3
## fit model ...
b <- scam(y~s(x,z,bs="tesmd1",xt=list("cc"),k=10))
summary(b)
old.par <- par(mfrow=c(2,2),mar=c(4,4,2,2))
plot(b,se=TRUE)
plot(b,pers=TRUE,theta = 30, phi = 40);title("tesmd1, cyclic")
plot(y,b$fitted.values,xlab="Simulated data",ylab="Fitted data",pch=".",cex=3)
persp(xs,zs,truth,theta = 30, phi = 40);title("truth")
par(old.par)
vis.scam(b,theta = 30, phi = 40)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.