如何解决具有多个输入但只有一个预测变量的 Lmfit 回归
我正在尝试拟合如下描述的函数:
Y = 10*(b+5/c0+c1*x) 假设 x 是预测变量,Y 是预测变量。
然而,b 也是一个与 x 和 y 长度相同的数组,并且随着每个 x 值的变化而变化。 我定义函数如下:
def func(x,b,c0,c1):
return 10*(b+5/c0+c1*x)
其中 x 是预测变量 b 是一个与 X 长度相同的数组(每个 x 值都有一个对应的 b 值) c0 和 C1 为模型系数
我正在尝试使用 lmfit 模块在 y 和 x 之间执行回归,但是,我似乎无法将参数定义为数组。
下面的代码给出了以下错误:
model = Model(func)
params = model.make_params(b=data["b"].values,c0=0.429,c1=0.867)
result = model.fit(Y,params,X=x,calc_covar=True)
"ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"
我只对 y 和 x 之间的关系感兴趣,那么这种做法在统计上是错误的吗? 谢谢
解决方法
在 lmfit 的语言中,您的 b
是“独立数据”,就像 x
一样,它是一个预测变量,而不是要在拟合中优化的变量。
默认情况下,模型函数的第一个参数被假定为唯一的自变量。不是具有非数字默认值的关键字参数的函数参数将被转换为适合的变量参数。
但是您可以指定不同的或其他独立的数据
model = Model(func,independent_vars=['x','b'])
params = model.make_params(c0=0.429,c1=0.867)
result = model.fit(Y,params,X=x,b=data['b'],calc_covar=True)
FWIW,b
是与 x
长度相同的数组这一事实实际上对 lmfit.Model
并不重要:自变量可以是任何类型。因此,您可以将模型函数编写为
def func(predictor,c0,c1):
return 10*(predictor['b']+5/c0+c1*predictor['x'])
然后将其用作
model = Model(func)
params = model.make_params(c0=0.429,predictor={'x':x,b: data['b']},calc_covar=True)
这在这里似乎有点矫枉过正,但它可以帮助解决更复杂的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。