如何向StepModel添加倾斜

2024-05-23 22:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由几个lmfit StepModel(form='erf')步骤组成的模型,它非常适合我的数据。然而,残差在每一步都显示出一些偏差。我可以使用skew(output.result.residual)给出整个数据集上的倾斜,但我真正想要的是模型的每个组件都有一个值,即,与step1关联的skew1,与step2关联的skew2,等等

我已经更改了examples/doc\u builtinmodels\u stepmodel.py中的代码,以举例说明我的意思:

import matplotlib.pyplot as plt
import numpy as np

from lmfit.models import LinearModel, StepModel

x = np.linspace(0, 10, 201)
a = np.ones_like(x)
b = np.ones_like(x)

a[:48] = 0.0
a[48:77] = np.arange(77-48)/(77.0-48)
b[:10] = 0.0
b[10:39] = np.arange(39-10)/(39.0-10)

np.random.seed(0)
a = 110.2 * (a + 9e-3*np.random.randn(x.size)) + 12.0 + 2.22*x
b = 110.2 * (b + 9e-3*np.random.randn(x.size)) + 12.0 + 2.22*x

y = a + b

step_mod = StepModel(form='erf', prefix='s1_')
step2_mod = StepModel(form='erf', prefix='s2_')
line_mod = LinearModel(prefix='line_')

pars = line_mod.make_params(intercept=y.min(), slope=0)
pars += step_mod.guess(y, x=x, center=2.5)
pars += step2_mod.guess(y, x=x, center=2.5)

mod = step_mod + step2_mod + line_mod
out = mod.fit(y, pars, x=x)

out.plot(data_kws={'markersize':  1})
print(skew(out.result.residual))

我怀疑我可能必须直接在StepModel()函数中构建skew,但我承认我真的不知道怎么做


Tags: importformmodprefixstepnplinerandom