non linear regression code
古いコメントを表示
I did linear regression by the code below. data set is attached.
clear;
clc
load('data.mat');
F=F'; T=T'; W=W';
Q1=F;
Q2=T;
X=[Q1 Q2];
for i=1:70
Y=W(:,i);
% b = regress(Y,X,0.05);
mdl{i} = fitlm(X,Y);
XX{i}= mdl{i}.Coefficients;
rmqs(i)=mdl{i}.RMSE;
for j=1:3
b(i,j)=XX{i}{j,1};
er(i,j)=XX{i}{j,2};
end
end
I want to change this code to fit the data for a non-linear model. which is,
Y~b0+b1*Q1+b2*Q2+b3*cos(2*pi*T+b4)
instead,
Y~b0+b1*Q1+b2*Q2
I need the coefficients with errors. How can I do that?
回答 (1 件)
Brendan Hamm
2015 年 8 月 12 日
Is T a predictor variable in this equation or a constant? If it is a constant you would want to create a function handle (which nlinfit requires anyhow, but fitnlm accepts). If it is a predictor you would need to place it in the matrix X and you can pass the modelspec in fitnlm as:
modelspec = 'y~b1+b2*x1+b3*x2+b4*cos(2*pi*x3+b5)';
I imagine you would want to estimate the frequency as well, unless this is known a priori.
4 件のコメント
anton fernando
2015 年 8 月 12 日
Brendan Hamm
2015 年 8 月 12 日
The initial values will be the hardest part, and the results can vary considerably based upon this choice. Your best bet is to plot the data and take some close guesses. The intercept should be easiest, but then you can look at the amplitude and phase shift of the sinusoid (maybe reduce 2 only Q2-Y plane would help, and may make the slope in this direction more evident). Then plot the Q1-Y plane and this should help with the last slope.
anton fernando
2015 年 8 月 12 日
Brendan Hamm
2015 年 8 月 13 日
As useful as google sounds like a complement, thank you. I might have to place that on my resume.
カテゴリ
ヘルプ センター および File Exchange で Linear Regression についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!