Python 非线性回归中的标准误差
我已经用Python做了一些蒙特卡罗物理模拟,我无法确定非线性最小二乘拟合系数的标准误差 最初,我在我的模型中使用了SciPy的Python 非线性回归中的标准误差,python,numpy,scipy,gnuplot,Python,Numpy,Scipy,Gnuplot,我已经用Python做了一些蒙特卡罗物理模拟,我无法确定非线性最小二乘拟合系数的标准误差 最初,我在我的模型中使用了SciPy的SciPy.stats.linregresse,因为我认为它是一个线性模型,但注意到它实际上是某种幂函数。然后我使用了NumPy的polyfit,自由度为2,但我找不到任何方法来确定系数的标准误差 我知道gnuplot可以为我确定错误,但我需要为30多个不同的情况进行拟合。我想知道是否有人知道Python如何从gnuplot读取标准错误,或者我是否可以使用其他库?看起来
SciPy.stats.linregresse
,因为我认为它是一个线性模型,但注意到它实际上是某种幂函数。然后我使用了NumPy的polyfit
,自由度为2,但我找不到任何方法来确定系数的标准误差
我知道gnuplot可以为我确定错误,但我需要为30多个不同的情况进行拟合。我想知道是否有人知道Python如何从gnuplot读取标准错误,或者我是否可以使用其他库?看起来gnuplot使用了一个Python,您可以从mpfit.covar属性获得错误估计值(顺便说一句,您应该担心错误估计值的“含义”)-例如,是否允许调整其他参数以进行补偿?终于找到了这个长期问题的答案!我希望这至少能帮一些人省下几个小时对这个话题毫无希望的研究。Scipy在其“优化”部分下有一个称为“曲线拟合”的特殊函数。它使用最小二乘法来确定系数,最重要的是,它给出了协方差矩阵。协方差矩阵包含每个系数的方差。更准确地说,矩阵的对角线是方差,通过对值进行平方根运算,可以确定每个系数的标准误差!Scipy对此没有太多文档,因此下面是一个示例代码,以便更好地理解:
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plot
def func(x,a,b,c):
return a*x**2 + b*x + c #Refer [1]
x = np.linspace(0,4,50)
y = func(x,2.6,2,3) + 4*np.random.normal(size=len(x)) #Refer [2]
coeff, var_matrix = curve_fit(func,x,y)
variance = np.diagonal(var_matrix) #Refer [3]
SE = np.sqrt(variance) #Refer [4]
#======Making a dictionary to print results========
results = {'a':[coeff[0],SE[0]],'b':[coeff[1],SE[1]],'c':[coeff[2],SE[2]]}
print "Coeff\tValue\t\tError"
for v,c in results.iteritems():
print v,"\t",c[0],"\t",c[1]
#========End Results Printing=================
y2 = func(x,coeff[0],coeff[1],coeff[2]) #Saves the y values for the fitted model
plot.plot(x,y)
plot.plot(x,y2)
plot.show()
谢谢你的链接!最后,我没有使用mpfit,但文档确实帮助我理解scipy的曲线拟合!