views:

130

answers:

2

Does anyone know of a function that can create an lm object given a dataset and coefficients?

I'm interested in this because I started playing with Bayesian model averaging (BMA) and I'd like to be able to create an lm object out of the results of bicreg. I'd like to have access to all of the nice generic lm functions like diagnostic plotting, predict, cv.lm etc.

If you are pretty sure such a function doesn't exist that's also very helpful to know!

library(BMA)
mtcars_y <- mtcars[, 1] #mpg
mtcars_x <- as.matrix(mtcars[,-1])
res <- bicreg(mtcars_x, mtcars_y)

summary(res)
res$postmean # bma coefficients

# The approximate form of the function
# I'm looking for
lmObject <- magicFunction(data=mtcars, coefficients=res$postmean)
+1  A: 

There is no function that I am aware of that does this. One could of course be made. All that your magicFunction would need to do is create a list with elements:

> names(fakeModel)
[1] "coefficients"  "residuals"     "effects"       "rank"         
 [5] "fitted.values" "assign"        "qr"            "df.residual"  
 [9] "xlevels"       "call"          "terms"         "model"  

then make it an lm object

> class(fakeModel) <- c("lm")

Let me just say that I think that this is a bad idea though. Whose to say that the generic function that you apply will be applicable to a bicreg object. For example, how would you interpret AIC(fakeModel)?

You are better off creating your own functions to do diagnostics and prediction.

Ian Fellows
Point taken regarding AIC(fakeModel). I'll write my own predictions and diagnostics. Thanks for the advice.
Bob Albright
A: 

It seems you can compute your lm object as usual, and then modify the coefficients afterwards by modifying the $coefficients attribute of your lm() result.

See this question and results for more details :

http://tolstoy.newcastle.edu.au/R/e2/help/07/08/24294.html

Not sure it corresponds to what you want to do, though...

juba
That might work for predict but for diagnostics I'd need to keep the rest of the object in sync.
Bob Albright