how to input constant value in polyfitn functions

조회 수: 2 (최근 30일)
Oleksandr Oleksandras
Oleksandr Oleksandras 2015년 3월 20일
댓글: John D'Errico 2015년 4월 9일
Hi, I have data for "x,y,z" independent variables which I have to fit to the reference "N" data.
p = polyfitn([x(:),y(:),z(:)], N(:), 'constant x(:), y(:), z(:)')
modelterms = 0 0 0; 1 0 0; 0 1 0; 0 0 1; Coefficients: [0.4112 1.6207 -1.8792 0.4623] VarNames: {'x(:)' 'y(:)' 'z(:)'}
Now I need to change the constant[000] value let's say from 0.4112 to 0.9812 and to find the rest of the coefficients? How to do this with polyfitn?
Thanks
Oles

채택된 답변

John D'Errico
John D'Errico 2015년 3월 20일
So instead of a constant term to be estimated, you wish to fix it at some new given value, and then estimate the coefficients? While there is no way in polyfitn to explicitly fix a coefficient, you can do so by a simple subterfuge.
Just subtract off the given constant term from the dependent variable, and drop the constant term from your model. So this will suffice.
p = polyfitn([x(:),y(:),z(:)], N(:) - 0.9812 , 'x, y, z')
Of course, the resulting model will have no constant term in it. You could slip it back in using some afterwards sleight of hand though. So after the above fit, this should create a model with the desired (forced) constant term.
p.ModelTerms = [0 0 0;p.ModelTerms];
p.Coefficients = [0.9812,p.Coefficients];
You could now evaluate the model with that fixed constant term in it.
If you worry about things like R^2, then be careful, as models with no constant term, or those with a forced term as we have done here, tend to create screwy numbers for R^2. As I recall, this is why I included an adjusted R^2, which may be more meaningful in those cases.
  댓글 수: 8
Oleksandr Oleksandras
Oleksandr Oleksandras 2015년 4월 9일
편집: Oleksandr Oleksandras 2015년 4월 9일
not sure if I understood correctly, here what I do:
1) p = polyfitn([x(:),y(:),z(:)], N(:), 4)
ModelTerms: [35x3 double]
2) Copy ModelTerms to ModelTermsNew whereas cut 000 row to have
ModelTermsNew: [34x3 double]
3) p = polyfitn([x(:),y(:),z(:)], N(:) - 0.9812 , ModelTermsNew)
which prompts an error:
Undefined function or variable "varlist".
Error in polyfitn (line 232) polymodel.VarNames = varlist;
John D'Errico
John D'Errico 2015년 4월 9일
I have no idea what you are doing wrong, since you don't actually show the complete code, in terms of where that ModelTermsNew variable came from. HOWEVER, this works with no problems.
modelterms = dec2base(0:124,5) - '0';
modelterms(1,:) = [];
modelterms(sum(modelterms,2) > 4,:) = [];
mdl = polyfitn(rand(100,3),rand(100,1),modelterms);
Now, as I said, I can also use that set of terms in a second call.
MT = mdl.ModelTerms;
mdl2 = polyfitn(rand(100,3),rand(100,1),MT);

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Multivariate Models에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by