Christoph Lehmann
2004-Sep-29 14:04 UTC
[R] glm.fit and predict.glm: error ' no terms component'
Hi when I fit a glm by glm.fit(x,y,family = binomial()) and then try to use the object for prediction of newdata by: predict.glm(object, newdata) I get the error: Error in terms.default(object) : no terms component I know I can use glm() and a formula, but for my case I prefer glm.fit(x,y)... thanks for a hint christoph $platform [1] "i686-pc-linux-gnu" $arch [1] "i686" $os [1] "linux-gnu" $system [1] "i686, linux-gnu" $status [1] "" $major [1] "1" $minor [1] "9.1" $year [1] "2004" $month [1] "06" $day [1] "21" $language [1] "R"
Thomas Lumley
2004-Sep-29 14:55 UTC
[R] glm.fit and predict.glm: error ' no terms component'
On Wed, 29 Sep 2004, Christoph Lehmann wrote:> Hi > > when I fit a glm by > > glm.fit(x,y,family = binomial()) > and then try to use the object for prediction of newdata by: > > predict.glm(object, newdata) > > I get the error: > > Error in terms.default(object) : no terms component > > I know I can use glm() and a formula, but for my case I prefer > glm.fit(x,y)...Well, you can't use predict.glm that way. As the function name suggests, it is a predict method for objects of class "glm", which in your case you do not have. There are two reasons why it won't work. For type="terms" the formula is needed to identify terms, and for any type of prediction the formula is needed to convert the data frame newdata into a model matrix. You would need to write a function where the new data was a model matrix. If you only need point predictions then predict_glm_fit<-function(glmfit, newmatrix, addintercept=TRUE){ if (addintercept) newmatrix<-cbind(1,newmatrix) eta<-glmfit$coef %*% newmatrix family$linkinv(eta) } would work. -thomas