using a function that is similar to polyfit but with two linear terms

Asked by Locks on 29 Apr 2013 at 19:50
Latest activity Commented on by Matt J about 5 hours ago

Hi,

I am looking for a matlab function that is working similar to polyfit, but where I can use two different input function but instead of having just one linear term, I need two. At the moment the regression looks as follows:

y=b0+b1*x+error

and the code to compute R^2 is the following:

x= changePriceWithoutNaN;
y=changeFWithoutNaN;
p = polyfit(x,y,1);
f = polyval(p,x);
plot(x,y,'o',x,f,'-')
yfit = polyval(p,x);
yfit =  p(1) * x + p(2);
yresid = y - yfit;
SSresid = sum(yresid.^2);
SStotal = (length(y)-1) * var(y);
rsq_full = 1 - SSresid/SStotal

Instead of having just one linear term, the term I am looking for is the following:

y=b0+b1*x+b2*z+error

Is there anybody how knows a function that is solving a least squared optimazation in the way to coe above does? Importat is that I do not look for a quadratic solution and therefore from what I can see polyfit(x,y,2) is not an option

1 Comment

Shashank on 29 Apr 2013 at 20:44

What is z?

Are you doing a mixed effects fitting?

Locks

Products

No products are associated with this question.

2 Answers

Answer by Matt J on 29 Apr 2013 at 20:49

4 Comments

Matt J about 12 hours ago

I don't see the problem. Both FEX files handle two-dimensional polynomials of order N. There's no reason why can't choose N=1.

Locks about 10 hours ago

I am not fully sure if I get the description there right but there problem that I have is that there are two linear components which I need to cover. in addition I am not sure how excatly I need to do that. can I just download one of them in instead this code:

              x= dataT(:,2);
              %is the implied volatility
              y=dataT(:,10);
              p = polyfit(x,y,2)

using something like that:

x= dataT(:,2);
%is the implied volatility
y=dataT(:,10);
z=dataT(:,15);
p = polyfitn(x,y,z,3)

is that way the the z not quadratic? As said, the regression must stay linear, I do not want any quadratic components

Matt J about 5 hours ago

As said, the regression must stay linear, I do not want any quadratic components

And as I keep telling you, if you want to have only linear terms, then tell that to polyfitn:

 p = polyfitn([x,y],z,1);
Matt J
Answer by Shashank about 9 hours ago
Edited by Shashank about 9 hours ago

Locks, it seems like you are interested in multiple linear regression. If you have the stats toolbox you can use the REGRESS function to do that. If you don't then you can use a simple '\' as follows:

x = dataT(:,2);
%is the implied volatility
y = dataT(:,10);
z = dataT(:,15);
p = [x z ones(length(dataT))]\y

p will have the 3 coeff you desire. We are essentially solving a linear system in a least square sense.

6 Comments

Shashank about 8 hours ago

Locks,

1) Regress takes the response first and then the predictors. Here is the documentation for regress:

http://www.mathworks.com/help/stats/regress.html

>> p=regress(Y,X)

2) Statistics Toolbox is required for Financial Toolbox, therefore you will have it already installed. You can check the output of 'VER' to verify it.

3) Use backslash '\' not forwardslash '/', they are different in MATLAB in what they do. http://www.mathworks.com/help/matlab/ref/mldivide.html

>> X\Y

4) You can also use LinearModel.fit function (recommended over regress) It does the same thing but has the added advantage of obtaining the fit statistics automatically: http://www.mathworks.com/help/stats/linearmodel.fit.html

>> X= [x1 x2];
>> LinearModel.fit(x,y) %Ones not required, automatically added.
Locks about 8 hours ago

thanks, this is working, I get the following result:

Number of observations: 1804, Error degrees of freedom: 1801 Root Mean Squared Error: 1.69 R-squared: 0.97, Adjusted R-Squared 0.97 F-statistic vs. constant model: 2.9e+04, p-value = 0

how can I show the r^2 and r^2 adjusted numbers with 4 fractional digits?

IS there a way to see the coefficients b0, b1 and b2 I am also looking for?

Shashank about 7 hours ago
mdl = LinearModel.fit(x,y)   
mdl.Coefficients.Estimate

If you are using the last approach. I recommend you read the documentation. This is all covered along with examples. If you are using earlier methods the estimates are the outputs.

mdl.Rsquared
Shashank

Contact us