Testing Data for Power Law Relationship

36 ビュー (過去 30 日間)
Merlin Thierer
Merlin Thierer 2017 年 12 月 26 日
編集済み: Ramnarayan Krishnamurthy 2017 年 12 月 29 日
Hi All
I am looking for help testing some data for a power-law relationship. I am very much a beginner to Matlab, so I'd appreciate a very detailed answer to make sure I'm not missing anything.
I have 2 vectors, X & Y and I want to check if Y = k * X^α.
1) How best to approach this? 2) Part of the vectors consist of NaN - how can I tell Matlab to jump these positions?
Many thanks

採用された回答

Ramnarayan Krishnamurthy
Ramnarayan Krishnamurthy 2017 年 12 月 29 日
編集済み: Ramnarayan Krishnamurthy 2017 年 12 月 29 日
Part 1: A few possible approaches to approaching this is as follows:
a) Without the Curve Fitting Toolbox
i) Using polyfit
% Setting up data
X = [0.5 2.4 3.2 4.9 6.5 7.8]';
Y = [0.8 9.3 37.9 68.2 155 198]';
% Plotting the data
plot(X,Y,'+r'), hold on
% Polynomial curve fitting of log values so that we have a linear equation
% Simplifying, log(Y) = log(k*X.^a) = log(X)*a + log(k)
p = polyfit(log(X),log(Y),1);
% Evaluating Coefficients
a = p(1);
% Accounting for the log transformation
k = exp(p(2));
% Final plot
ezplot(@(X) k*X.^a,[X(1) X(end)])
ii) Interactively using Basic Fitting Tool
plot(log(X),log(Y))
Then in the Figure, Tools --> Basic Fitting --> Linear (plot fit)--> Check "Show Equations" --> Click Forward Arrow
Here again, k = exp(p(2));
b) Using the Curve Fitting Toolbox
i) Programmatically:
[f, gof] = fit(X, Y, 'power1');
f is the fitobject and gof gives you the goodness of fit statistics.
ii) Interactively using cftool
The following link contains an elaborate description of using the cftool for power series models. In addition, it includes examples of using the fit function for power series models.
Part 2: Omitting NaN values
You could consider pre-processing X and Y such that they do not contain NaN values (but make sure x and y have the same number of rows)
Example:
X = [0.5 2.4 NaN 4.9 NaN 7.8]';
Y = [0.8 NaN 37.9 68.2 155 NaN]';
% Remove all NaN values from X and Y
X(isnan(X)) = []
Y(isnan(Y)) = []
% Now fit the data without NaNs
[f, gof] = fit(X, Y, 'power1');

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeStatistics and Machine Learning Toolbox についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by