[R] How to use lm.predict to obtain fitted values?

Peter Ehlers ehlers at math.ucalgary.ca
Fri May 19 23:35:41 CEST 2006



Larry Howe wrote:
> I have had a similar issue recently, and looking at the archives of this list, 
> I see other cases of it as well. It took me a while to figure out that the 
> variable name in the data frame must be identical to the variable name in the 
> model. I don't see this mentioned in the documentation of predict.lm, and R 
> issues no warning in this case.
> 
> How would I go about officially requesting that this is mentioned, either in 
> the documentation, or as a warning?
> 
> Sincerely,
> Larry Howe
> 
Here's what I would do before officially requesting anything: read
'An Introduction to R', especially section 11.3:

  predict(object, newdata=data.frame)
  The data frame supplied must have variables specified with the same
  labels as the original.

Seems pretty explicit.

As well, the predict.lm help page has, under Arguments:

  newdata   An optional data frame in which to look for variables with
            which to predict.

That, too, seems unambiguous; i.e. you can't predict with values of z
when z is not in your formula.

Peter Ehlers


> On Friday May 19 2006 13:26, Prof Brian Ripley wrote:
> 
>>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
>>>



More information about the R-help mailing list