I am writing a function to assess the out of sample predictive capabilities of a time series regression model. However lm.predict isn't behaving as I expect it to. What I am trying to do is give it a set of explanatory variables and have it give me a single predicted value using the lm fitted model.> model = lm(y~x) > newdata=matrix(1,1,6) > pred = predict.lm(model,data.frame(x=newData));Warning message: 'newdata' had 6 rows but variable(s) found have 51 rows.> pred = predict.lm(model,data.frame(newData));Warning message: 'newdata' had 6 rows but variable(s) found have 51 rows. y is a vector of length 51. x is a 6x51 matrix newdata is a matrix of the explanatory variables I'd like a prediction for. The predict.lm function is giving me 51 (=number of observations I had) numbers, rather than the one number I do want - the predicted value of y, given the values of x I have supplied it. Many thanks, R
Prof Brian Ripley
2006-May-19 17:26 UTC
[R] How to use lm.predict to obtain fitted values?
data.frame(x=newData) will not have any entries called x: You supplied newdata, so assuming you means newdata,> data.frame(x=newdata)x.1 x.2 x.3 x.4 x.5 x.6 1 1 1 1 1 1 1 has 6 columns none of which is labelled x. If you read the help for lm, it does not mention having a matrix on the rhs of a formula, and the help for data.frame does explain how it works. predict(model, data.frame(x=I(newData))) might work. On Fri, 19 May 2006, Richard Lawn wrote:> I am writing a function to assess the out of sample predictive capabilities > of a time series regression model. However lm.predict isn't behaving as I > expect it to. What I am trying to do is give it a set of explanatory > variables and have it give me a single predicted value using the lm fitted > model. > >> model = lm(y~x) >> newdata=matrix(1,1,6) >> pred = predict.lm(model,data.frame(x=newData)); > Warning message: > 'newdata' had 6 rows but variable(s) found have 51 rows. >> pred = predict.lm(model,data.frame(newData)); > Warning message: > 'newdata' had 6 rows but variable(s) found have 51 rows. > > y is a vector of length 51. > x is a 6x51 matrix > newdata is a matrix of the explanatory variables I'd like a prediction for. > > The predict.lm function is giving me 51 (=number of observations I had) > numbers, rather than the one number I do want - the predicted value of y, > given the values of x I have supplied it. > > Many thanks, > R > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >-- Brian D. Ripley, ripley at 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