
lm
and glm
functions have
been fixed properly. Note that the smart.prediction
containing any data-dependent parameters..max.smart
,
.smart.prediction
and
.smart.prediction.counter
are created while the model is being fitted.
In Rthey are created in a new environment called smartpredenv
.
In S-PLUS they are created in frame 1.
These variables are deleted after the model has been fitted.
However, in R,
if there is an error in the model fitting function or the fitting
model is killed (e.g., by typing control-C) then these variables will
be left in smartpredenv
. At the beginning of model fitting,
these variables are deleted if present in smartpredenv
. During prediction, the variables
.smart.prediction
and
.smart.prediction.counter
are reconstructed and read by the smart functions when the model
frame is re-evaluated.
After prediction, these variables are deleted.
If the modelling function is used with argument smart=FALSE
(e.g., vglm(..., smart=FALSE)
) then smart prediction will not
be used, and the results should match with the original Ror S-PLUS
functions.
"bigdata"
library is loaded then it is
detach()
'ed. This is done because
scale
cannot be made smart if "bigdata"
is loaded
(it is loaded by default in the Windows version of
Splus 8.0, but not in Linux/Unix).
The function search
tells what is
currently attached. In Rand S-PLUS the functions
predict.bs
and
predict.ns
are not smart.
That is because they operate on objects that contain attributes only
and do not have list components or slots.
In Rthe function
predict.poly
is not smart.
I(poly(x, 3))
,
poly(c(scale(x)), 3)
,
bs(scale(x), 3)
,
scale(scale(x))
.
See the examples below.
Smart prediction, however, will always work.
The basic idea is that the functions in the formula are now smart, and the
modelling functions make use of these smart functions. Smart prediction
works in two ways: using smart.expression
, or using a
combination of put.smart
and get.smart
.get.smart.prediction
,
get.smart
,
put.smart
,
smart.expression
,
smart.mode.is
,
setup.smart
,
wrapup.smart
.
Commonly used data-dependent functions include
scale
,
poly
,
bs
,
ns
.
In R,
the functions bs
and ns
are in the
bs
and ns
call. The website
The functions vglm
,
vgam
,
rrvglm
and
cqo
in T. W. Yee's
# Create some data first
n = 20
set.seed(86) # For reproducibility of the random numbers
x = sort(runif(n))
y = sort(runif(n))
if(is.R()) library(splines) # To get ns() in R
# This will work for R 1.6.0 and later, but fail for S-PLUS
fit = lm(y ~ ns(x, df=5))
plot(x, y)
lines(x, fitted(fit))
newx = seq(0, 1, len=n)
points(newx, predict(fit, data.frame(x=newx)), type="b", col=2, err=-1)
# The following fails for R 1.6.x and later but works with smart prediction
fit = lm(y ~ ns(scale(x), df=5))
fit$smart.prediction
plot(x, y)
lines(x, fitted(fit))
newx = seq(0, 1, len=n)
points(newx, predict(fit, data.frame(x=newx)), type="b", col=2, err=-1)
# The following requires the VGAM package to be loaded
library(VGAM)
fit = vlm(y ~ ns(scale(x), df=5))
fit@smart.prediction
plot(x, y)
lines(x, fitted(fit))
newx = seq(0, 1, len=n)
points(newx, predict(fit, data.frame(x=newx)), type="b", col=2, err=-1)
Run the code above in your browser using DataLab