0

我有数据表明 y 和 x 没有线性趋势。数据如下,如果将 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)应该产生一个线性函数。

4

1 回答 1

2

由于我没有足够的声誉来添加评论以澄清问题,因此我试图帮助回答。此外,通常在转换数据以拟合线性回归时,如果您的原始模型是:y = b0 + b1x,那么获取预测变量和响应的对数会给出一个新模型 y* = b0 + b1x* 其中 y* = ln( y) 和 x* = ln(x)。为什么你决定你的模型应该是这样的形式:ln(y) = ln((xb)/b)?

无论如何,要在 Matlab 中找到此类模型的最佳 beta 值,您需要执行以下操作:

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
于 2020-03-09T16:43:53.113 回答