sm.ps | R Documentation |
This function represents a P-spline smooth term
in a vgam
formula
and confers automatic smoothing parameter selection.
sm.ps(x, ..., ps.int = NULL, spar = -1, degree = 3, p.order = 2,
ridge.adj = 1e-5, spillover = 0.01, maxspar = 1e12,
outer.ok = FALSE, mux = NULL, fixspar = FALSE)
x , ... |
See |
ps.int |
the number of equally-spaced B-spline intervals.
Note that the number of knots is equal to
|
spar , maxspar |
See |
mux |
numeric. If given, then this argument multiplies
|
degree |
degree of B-spline basis. Usually this will be 2 or 3; and the values 1 or 4 might possibly be used. |
p.order |
order of difference penalty (0 is the ridge penalty). |
ridge.adj , spillover |
See |
outer.ok , fixspar |
See |
This function can be used by vgam
to
allow automatic smoothing parameter selection based on
P-splines and minimizing an UBRE quantity.
This function should only be used with vgam
and is an alternative to sm.os
;
see that function for some details that also apply here.
A matrix with attributes that are (only) used by vgam
.
The number of rows of the matrix is length(x)
and
the number of columns is ps.int + degree - 1
.
The latter is because the function is centred.
See sm.os
.
This function is currently under development and
may change in the future.
In particular, the default for ps.int
is
subject to change.
B. D. Marx wrote the original function. Subsequent edits were made by T. W. Yee and C. Somchit.
Eilers, P. H. C. and Marx, B. D. (1996). Flexible smoothing with B-splines and penalties (with comments and rejoinder). Statistical Science, 11(2): 89–121.
sm.os
,
s
,
vgam
,
smartpred
,
is.smart
,
summarypvgam
,
splineDesign
,
bs
,
magic
.
sm.ps(runif(20))
sm.ps(runif(20), ps.int = 5)
## Not run:
data("TravelMode", package = "AER") # Need to install "AER" first
air.df <- subset(TravelMode, mode == "air") # Form 4 smaller data frames
bus.df <- subset(TravelMode, mode == "bus")
trn.df <- subset(TravelMode, mode == "train")
car.df <- subset(TravelMode, mode == "car")
TravelMode2 <- data.frame(income = air.df$income,
wait.air = air.df$wait - car.df$wait,
wait.trn = trn.df$wait - car.df$wait,
wait.bus = bus.df$wait - car.df$wait,
gcost.air = air.df$gcost - car.df$gcost,
gcost.trn = trn.df$gcost - car.df$gcost,
gcost.bus = bus.df$gcost - car.df$gcost,
wait = air.df$wait) # Value is unimportant
TravelMode2$mode <- subset(TravelMode, choice == "yes")$mode # The response
TravelMode2 <- transform(TravelMode2, incom.air = income, incom.trn = 0,
incom.bus = 0)
set.seed(1)
TravelMode2 <- transform(TravelMode2,
junkx2 = runif(nrow(TravelMode2)))
tfit2 <-
vgam(mode ~ sm.ps(gcost.air, gcost.trn, gcost.bus) + ns(junkx2, 4) +
sm.ps(incom.air, incom.trn, incom.bus) + wait ,
crit = "coef",
multinomial(parallel = FALSE ~ 1), data = TravelMode2,
xij = list(sm.ps(gcost.air, gcost.trn, gcost.bus) ~
sm.ps(gcost.air, gcost.trn, gcost.bus) +
sm.ps(gcost.trn, gcost.bus, gcost.air) +
sm.ps(gcost.bus, gcost.air, gcost.trn),
sm.ps(incom.air, incom.trn, incom.bus) ~
sm.ps(incom.air, incom.trn, incom.bus) +
sm.ps(incom.trn, incom.bus, incom.air) +
sm.ps(incom.bus, incom.air, incom.trn),
wait ~ wait.air + wait.trn + wait.bus),
form2 = ~ sm.ps(gcost.air, gcost.trn, gcost.bus) +
sm.ps(gcost.trn, gcost.bus, gcost.air) +
sm.ps(gcost.bus, gcost.air, gcost.trn) +
wait +
sm.ps(incom.air, incom.trn, incom.bus) +
sm.ps(incom.trn, incom.bus, incom.air) +
sm.ps(incom.bus, incom.air, incom.trn) +
junkx2 + ns(junkx2, 4) +
incom.air + incom.trn + incom.bus +
gcost.air + gcost.trn + gcost.bus +
wait.air + wait.trn + wait.bus)
par(mfrow = c(2, 2))
plot(tfit2, se = TRUE, lcol = "orange", scol = "blue", ylim = c(-4, 4))
summary(tfit2)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.