smooth.construct.tescx.smooth.spec {scam} | R Documentation |
Tensor product smoothing constructor for a bivariate function convex in the second covariate
Description
This is a special method function
for creating tensor product bivariate smooths convex in the second 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="tescx",m=c(2,2))
,
where the basis for the first marginal smooth is specified in the second element of bs
.
Usage
## S3 method for class 'tescx.smooth.spec'
smooth.construct(object, data, knots)
Arguments
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 |
Value
An object of class "tescx.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. |
Author(s)
Natalya Pya <nat.pya@gmail.com>
References
Pya, N. and Wood, S.N. (2015) Shape constrained additive models. Statistics and Computing, 25(3), 543-559
See Also
smooth.construct.temicv.smooth.spec
smooth.construct.temicx.smooth.spec
smooth.construct.tedecv.smooth.spec
smooth.construct.tedecx.smooth.spec
smooth.construct.tescv.smooth.spec
Examples
## Not run:
## tensor product `tescx' example
## simulating data...
set.seed(2)
n <- 30
x1 <- sort(runif(n))
x2 <- sort(2*runif(n)-1)
f1 <- matrix(0,n,n)
for (i in 1:n) for (j in 1:n)
f1[i,j] <- sin(x1[i]) + 2*x2[j]^2
f1 <- as.vector(t(f1))
f <- (f1-min(f1))/(max(f1)-min(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="tescx",m=2),
family=gaussian(), data=dat)
## plot results ...
par(mfrow=c(2,2),mar=c(4,4,2,2))
plot(b,se=TRUE)
plot(b,pers=TRUE, theta = 50, phi = 20)
plot(y,b$fitted.values,xlab="Simulated data",ylab="Fitted data")
x11()
vis.scam(b, theta = 50, phi = 20)
## plotting the truth...
x11()
x1 <- seq(min(x1),max(x1),length.out=30)
x2 <- seq(min(x2),max(x2),length.out=30)
f1 <- matrix(0,n,n)
for (i in 1:n) for (j in 1:n) f1[i,j] <- sin(x1[i]) + 2*x2[j]^2
persp(x1,x2,f1,theta = 50, phi = 20)
## End(Not run)