Linear Regression with a known fixed intercept in R

I see that you have accepted a solution using I(). I had thought that an offset() based solution would have been more obvious, but tastes vary and after working through the offset solution I can appreciate the economy of the I() solution:

with(lin, plot(y,x) )
lm_shift_up <- lm(x ~ y +0 + 
                       offset(rep(1, nrow(lin))), 
             data=lin)
abline(1,coef(lm_shift_up))

You could subtract the explicit intercept from the regressand and then fit the intercept-free model:

> intercept <- 1.0
> fit <- lm(I(x - intercept) ~ 0 + y, lin)
> summary(fit)

The 0 + suppresses the fitting of the intercept by lm.

edit To plot the fit, use

> abline(intercept, coef(fit))

P.S. The variables in your model look the wrong way round: it's usually y ~ x, not x ~ y (i.e. the regressand should go on the left and the regressor(s) on the right).


I have used both offset and I(). I also find offset easier to work with (like BondedDust) since you can set your intercept.

Assuming Intercept is 10.

plot (lin$x, lin$y) fit <-lm(lin$y~0 +lin$x,offset=rep(10,length(lin$x))) abline(fit,col="blue")