2014-01-25 3 views
2

У меня есть два набора данных: максимальная скорость и амплитуда. Связь между двумя параметрами не является линейной, и я использовал логарифмический (base10) график перед выполнением линейных регрессий (этот процесс должен быть эквивалентен степенному закону).Выполнение линейной регрессии на графике log-log (основание 10) Matlab

Однако, когда у меня есть данные, нанесенные на шкале с логарифмической шкалой (обе оси в логарифмическом масштабе), линейная подгонка не кажется мне линейной. Как выполнить линейную регрессию в графике log-log с Matlab.

Я приложил изображение графика и линейного фитинга, которые я получил.

Любая помощь очень ценится!

Спасибо заранее!

enter image description here

+0

Можете ли вы опубликовать код, который генерирует это изображение? – phyrox

+0

@phyrox. Как только я получил график с построенными данными1, линия была установлена ​​с использованием базовой опции фитинга на вкладке инструментов (в окне графика). График получается со следующим битом кода: ''% Участок №2: амплитуда и максимальная скорость фигура (' Name ',' Main sequence ',' NumberTitle ',' off '); loglog (Saccades.amplitude, Saccades.peakVelocity, 'green.'); xlabel ('Амплитуда (°)'); ylabel ('Пиковая скорость (°/с)'); title ('Saccade Main sequence'); ' – Flowers

+0

Я думаю, что вы создаете регрессию с использованием линейных данных. Сначала вы должны сделать экспоненциальный (или журнал) dta, а затем сделать регрессию (и построить ее в линейном графике) – phyrox

ответ

2

Это действительно припадок степенным, которая может быть описана с формулой y = k * x^tau. Если вы построите это в виде журнала, вы получите прямую линию. Для получения параметров, вы должны взять логарифм от обеих сторон уравнения, а затем сделать линейную аппроксимацию:

% generate some data with random noise 
x = logspace(-.5, 1.5, 100); 
y = 42 * x.^0.66; 
y = y .* (1 + 0.2 * randn(size(y))); 

% do linear fit: log(y) = p(1) * log(x) + p(2) 
p = polyfit(log(x), log(y), 1); 

% retrieve original parameters 
tau = p(1); 
k = exp(p(2)); 

% plot 
loglog(x, y, '.', x, k*x.^tau, 'r') 
axis([.1 100 10 1000]) 
legend('data', sprintf('power law fit: y = %.1f * x^{%.2f}', k, tau)) 
xlabel('Amplitude') 
ylabel('Velocity') 

Результат: power law fit Обратите внимание, что это просто быстрый и грязный трюк, это, вероятно, не дает результата, который является статистически правильным.

Смежные вопросы