Как линеаризовать эти данные для определенных c отношений в MATLAB? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть данные, что у и х не имеют линейного тренда. Данные приведены ниже, и если вы построите график y как функцию от x, график будет нелинейным.

x= [45.5976, 45.6311, 45.6599, 45.679, 45.703, 45.7461, 45.7749]
y = [0.17, 1.7, 5.1, 17, 51, 170, 510]
plot(x,y,'o')

Моя цель - найти оптимальное значение b, чтобы сделать поведение log(y) относительно log((x-b)/b) линейным отношением. Другими словами, plot(log((x-b)/b),log(y) должен производить линейную функцию.

1 Ответ

2 голосов
/ 09 марта 2020

Поскольку у меня недостаточно репутации, чтобы добавить комментарий, чтобы уточнить вопрос, я пытаюсь помочь в ответе. Кроме того, обычно при преобразовании данных для соответствия линейной регрессии, если ваша исходная модель имеет вид: y = b0 + b1x, то при получении журналов как предиктора, так и ответа получается новая модель y * = b0 + b1x *, где y * = ln ( y) и x * = ln (x). Почему вы решили, что ваша модель должна иметь вид: ln (y) = ln ((xb) / b)?

В любом случае, чтобы найти оптимальные бета-значения для такой модели в Matlab, вы бы выполните что-то вроде следующего:

x= [45.5976, 45.6311, 45.6599, 45.679, 45.703, 45.7461, 45.7749]';
y = [0.17, 1.7, 5.1, 17, 51, 170, 510]';
figure(1), plot(x,y,'o');

ln_y = log(y);
ln_x = log(x);
figure(2), plot(ln_x, ln_y, 'x');

ln_X = [ones(length(ln_x),1) ln_x];
B = ln_X\ln_y;

ln_y_fitted = ln_X*B;
figure(2), 
hold on
plot(ln_x, ln_y_fitted, '--', 'Color', 'r');

Учитывая приведенный выше код, если вы хотите отобразить различные результаты для log (y) = log ((xb) / b), вы можете использовать что-то вроде этого:

for b = 0.1:0.1:4
    ln_x = log((x-b)/b);
    figure, plot(ln_x, ln_y, 'x');
end
...