[R] Forcing coefficients in lm object

Greg Snow Greg.Snow at intermountainmail.org
Tue Aug 28 21:50:04 CEST 2007


The important element in the fit object is named coefficients not coef.  Sometimes the partial matching can cause confusion when it tries to help.  In your case it creates a copy of the coefficients, changes the 2nd value, then creates a new component to fit called coef with these values (not changing the original coefficients).  Since the predict, print, summary, etc. functions use the coefficients element rather than your new coef element, your changes are silently ignored.

One option is to spell out coefficients fully to replace that (though that could end up breaking other things), another possible option is to create the model using offsets (but I'm not sure how that would work in this case).

Hope this helps,

-- 
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at intermountainmail.org
(801) 408-8111
 
 

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch 
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of 
> J.J.P.Lebrec at lumc.nl
> Sent: Tuesday, August 28, 2007 7:33 AM
> To: r-help at stat.math.ethz.ch
> Subject: [R] Forcing coefficients in lm object
> 
> Dear all,
> 
> I would like to use predict.lm() with an existing lm object 
> but with new arbitrary coefficients. I modify 'fit$coef' (see 
> example below) "by hand" but the actual model in 'fit' used 
> for prediction does not seem to be altered (although fit$coef is!).
> 
> Can anyone please help me do this properly?
> 
> Thanks in advance,
> 
> Jérémie
> 
> 
> 
> > dat <- data.frame(y=c(0,25,32,15), x=as.factor(c(1,1,2,2))) fit <- 
> > lm(y ~ x, data=dat) fit
> 
> Call:
> lm(formula = y ~ x, data = dat)
> 
> Coefficients:
> (Intercept)           x2  
>        12.5         11.0  
> 
> > fit$coef[[2]] <- 100
> > dat.new <- data.frame(x=as.factor(c(1,2,1,2)))
> > predict.lm(fit, dat.new)
>    1    2    3    4 
> 12.5 23.5 12.5 23.5 
> > fit
> 
> Call:
> lm(formula = y ~ x, data = dat)
> 
> Coefficients:
> (Intercept)           x2  
>        12.5         11.0  
> 
> > fit$coef
> (Intercept)          x2 
>        12.5       100.0 
> >
> 
> 
> 
> Jérémie Lebrec
> Dept. of Medical Statistics and Bioinformatics Leiden 
> University Medical Center Postzone S-05-P P.O. Box 9600 2300 
> RC Leiden The Netherlands j.j.p.lebrec at lumc.nl
> 
> ______________________________________________
> 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
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list