predict function (PR#2958)
Try
model.frame(~1, data.frame(x = 1:5))
NULL data frame with 1 rows The C code never considers that case (no variables). Fixed in R-patched.
On Thu, 8 May 2003 mh.smith@niwa.co.nz wrote:
Full_Name: Murray H Smith Version: 1.6.1 OS: Windows Submission from: (NULL) (202.36.29.1)
Still in 1.7.0, BTW, but we do suggest you upgrade as scores of bugs have been fixed since 1.6.1.
This is report is more of a matter of completeness rather than an outright bug. The predict function does not handle the prediction from the constant model appropriately. It also differs from Splus in this respect. The length of the vector (or first dimension of the matrix, if type = "terms" is used) for the output from the predict function should equal the number of rows in newdata, whether or not the model is the constant model.
predict(lm(y ~ 1, data = data.frame(y = rep(0:3, c(5,9,7,1)))),
+ newdata = data.frame(x = 1:5)) [1] 1.181818
predict(glm(y ~ 1, family = poisson, data = data.frame(y =
+ rep(0:3, c(5,9,7,1)))), newdata = data.frame(x = 1:5), type = "r")
[1] 1.181818
Since there are 5 rows in the newdata data.frame the result should be the vector
of length 5.
[1] 1.181818 1.181818 1.181818 1.181818 1.181818
.
As an aside it might also be nice to also avoid having to deal with a special
case by defaulting the model formula
~ poly(x, 0)
to
~ 1
with perhaps a warning rather than producing an error.
That's not so easy. The formula really is ~ 1 + poly(x, d), and there is no simple way to have a term which contributes nothing. poly(x, 0) could be a zero-column matrix, but the subsequent code will not handle that. It's much easier for you to handle redundant terms yourself.
Brian D. Ripley, ripley@stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595