Search code examples
rmodelformulalmpolynomials

force given coefficients in lm()


I am currently trying to fit a polynomial model to measurement data using lm().

fit_poly4 <- lm(y ~ poly(x, degree = 4, raw = T), weights = w)

with x as independent, y as dependent variable and w = 1/variance of the measurements.

I want to try a polynomial with given coefficients instead of the ones determined by R. Specifically I want my polynomial to be

y = -3,3583*x^4 + 43*x^3 - 191,14*x^2 + 328,2*x - 137,7

I tried to enter it as

fit_poly4 <- lm(y ~ 328.2*x-191.14*I(x^2)+43*I(x^3)-3.3583*I(x^4)-137.3, 
                weights = w)

but this just returns an error:

Error in terms.formula(formula, data = data) : invalid model formula in ExtractVars

Is there a way to determine the coefficients in lm() and how would one do this?


Solution

  • I'm not sure why you want to do this, but you can use an offset term:

    set.seed(101)
    dd <- data.frame(x=rnorm(1000),y=rnorm(1000), w = rlnorm(1000))
    
    fit_poly4 <- lm(y ~ 
          -1 + offset(328.2*x-191.14*I(x^2)+43*I(x^3)-3.3583*I(x^4)-137.3),
          data=dd,
          weights = w)
    

    the -1 suppresses the usual intercept term.