Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用kapteyn.kmpfit计算具有2个或更多自变量的模型的置信带_Python_Scipy_Curve Fitting - Fatal编程技术网

Python 如何使用kapteyn.kmpfit计算具有2个或更多自变量的模型的置信带

Python 如何使用kapteyn.kmpfit计算具有2个或更多自变量的模型的置信带,python,scipy,curve-fitting,Python,Scipy,Curve Fitting,我试图计算一个有两个独立变量的模型的置信带 我使用kapteyn软件包优化参数并计算置信区间。置信带函数似乎不适用于具有多个独立参数的模型。有人知道如何解决这个问题吗 对于具有一个独立参数的模型,一切正常,没有任何问题: from kapteyn import kmpfit import numpy as np import matplotlib.pyplot as plt #linear 1d model def model_1d(p, x): a = p[0] b =

我试图计算一个有两个独立变量的模型的置信带

我使用kapteyn软件包优化参数并计算置信区间。置信带函数似乎不适用于具有多个独立参数的模型。有人知道如何解决这个问题吗

对于具有一个独立参数的模型,一切正常,没有任何问题:

from kapteyn import kmpfit
import numpy as np
import matplotlib.pyplot as plt 


#linear 1d model
def model_1d(p, x):
    a = p[0]
    b = p[1]
    return a*x + b


#data
x = np.array([0, 10, 20, 30])
y  = np.array([1.1, 1.8, 3.2, 3.0])

#optimizing parameters a and b with kmpfit
p0 = [0, 0] #start values for parameters a and b
f = kmpfit.simplefit(model_1d, p0, x, y)    


#calculation of confidence band

derivatives_a = x #1st derivative of a is x
derivatives_b = np.array([1, 1, 1, 1]) #1st derivative of b is always 1
dfdp = [derivatives_a, derivatives_b]

yhat, upper, lower = f.confidence_band(x, dfdp, 0.95, model_1d)


#plots
plt.plot(x,yhat) #plot fitted model
plt.plot(x,upper,'--') #plot upper confidence band
plt.plot(x,lower,'--') #plot lower confidence band
plt.plot(x,y,'.r') #plot data points
剧本写得很好。因此,您可以看到配备了上下置信区间的车型:

下面,代码稍微更改为二维模型,即具有两个独立变量。此代码不再有效:

from kapteyn import kmpfit
import numpy as np

#linear with two independent variables x[0] amd x[1]
def model_2d(p, x):
    a = p[0]
    b = p[1]
    return a*x[0] + b*x[1]


#data
x = np.array([[0, 10, 20, 30], [0, 10, 20, 30]])
y  = [1.1, 1.8, 3.2, 3.0]

#optimizing parameters a and b with kmpfit
p0 = [0, 0] #start values for parameters a and b
f = kmpfit.simplefit(model_2d, p0, x, y)    


#calculation of confidence band

derivatives_a = x[0,:] #1st derivative of a is x[0]
derivatives_b = x[1,:] #1st derivative of b is x[1]
dfdp = [derivatives_a, derivatives_b]

yhat, upper, lower = f.confidence_band(x, dfdp, 0.95, model_2d)
对于二维模型,使用simplefit进行参数优化仍然有效。 然而,用置信带计算置信带不再有效。 我收到以下错误消息,表明numpy数组x的形状出现问题(但是,相同的x适用于simplefit):

文件“tmp.py”,第25行,在
yhat,上,下=f置信度带(x,dfdp,0.95,型号2d)
文件“src/kmpfit.pyx”,第845行,位于kmpfit.Fitter.confidence\u带中
(src/kmpfit.c:8343)
如果您知道如何解决这个问题,或者有其他可用的python包,我将非常感谢。 谢谢大家!

您可能会发现lmfit()在这方面很有用。它的模型类具有健壮但易于使用的曲线拟合方法,还支持对每个参数设置边界和约束

通常,所有变量的不确定性和变量对之间的相关性都是使用快速且普遍可靠的曲率矩阵求逆方法计算的。对于更详细的不确定性(包括任何指定的“西格玛”水平的置信度),它还允许直接(如果稍微慢一点)探索任何变量的置信度水平,并可以帮助您为一对变量绘制卡方二维图 变量

更具体地说,我认为您要求的是从变量中的不确定性生成模型
y
中的不确定性。Lmfit的模型类有一个
eval\u uncertability()
方法来实现这一点。看见
例如。

似乎这在statsmodels中是可能的;看见不过我还没试过。嗨,比尔,谢谢你的评论!我以前看过statsmodels。我想这对于我上面例子中的(线性)模型会很好地工作。然而,我需要一个非线性指数模型的解。为了简单起见,我没有在代码示例中包含这一点。似乎lmfit包正是我所需要的。我去看看。非常感谢您的详细回答!!
File "tmp.py", line 25, in <module>
    yhat, upper, lower = f.confidence_band(x, dfdp, 0.95, model_2d)
  File "src/kmpfit.pyx", line 845, in kmpfit.Fitter.confidence_band 
(src/kmpfit.c:8343)