# How to force the intercept of a regression line to zero?

267 views (last 30 days)

Show older comments

Hi; How to set the intercept of a regression line,, resulted from fitlm, to zero?

clc

X = 1:10

y = [1, 2, 2.9, 4, 5.1, 6, 7, 7.8, 8.6, 9.5]

dlm = fitlm(X,y)

Thank you, in advance, for your help.

##### 1 Comment

Brendan Hamm
on 16 Jul 2015

### Accepted Answer

Brendan Hamm
on 16 Jul 2015

There are 2 main ways you can do this:

dlm = fitlm(X,y,'Intercept',false);

or using Wilkinson notation:

dlm = fitlm(X,y,'y~x1-1');

##### 2 Comments

DEWDROP
on 10 May 2020

John D'Errico
on 12 Aug 2022

You can name an output variable to be anything you want. There is NO relevance.

### More Answers (1)

George Tzintzarov
on 6 Oct 2018

I would use the 'fittype' function:

ft1 = fittype({'x'}) %This creates a linear 'fittype' variable that is of the form f(a,x)=ax.

ft2 = fittype({'x','1'}) %This creates a linear 'fittype' variable that is of the form f(a,x)=ax+b.

Then fit and evaluate to values you want: (Note that in the fit function x and y must be column vectors)

x = [1 2 3 4]; y = [2 3 4 5];

p1 = fit(x',y',ft1); %This creates a 'cfit' variable p that is your fitted function

p2 = fit(x',y',ft2); %This creates a 'cfit' variable p that is your fitted function

x_fit = linspace(0,6,10); %x-values to evaluate

y1_fitted = feval(p1, x_fit); %y-values for the evaluated x-values

y2_fitted = feval(p2, x_fit); %y-values for the evaluated x-values

Here is what you should get:

plot(x,y,'ro'); hold on;

plot(x_fit,y1_fitted,'b-')

plot(x_fit,y2_fitted,'b--')

legend({'Raw Data','Fitted with y-int','Fitted through (0,0)'})

##### 1 Comment

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!