我有一个简单的线性回归模型,我使用python曲线拟合找到系数,如下所示:
import numpy as np
from scipy.optimize import curve_fit
def line(x,m,c): #linear fit function in order to get the slope
return m*x + c
x = np.array([2005.38,2005.46,2017.39])
y = np.array([631137.78, 631137.88, 631138.12])
popt, pcov = curve_fit(line,x,y)
slope = popt[0]
intercept = popt[1]
perr = np.sqrt(np.diag(pcov))
slope_err = perr[0]
intercept_err = perr_RA[1]
然后,我在先前的基础上进行了蒙特卡罗模拟,生成了大约1000个类似的y阵列,如下所示,但是我的x阵列应该保持不变。因此,对于所有MC生成的y阵列,相同的x阵列:
y = np.array([631137.97960858, 631137.97958298, 631137.97544918]),
array([631138.00349615, 631138.00462398, 631138.18676081]),
array([631137.83121579, 631137.83457397, 631138.37689362]),
array([631138.03276579, 631138.03322997, 631138.10819225]),
array([631137.79168171, 631137.79288829, 631137.98774176])]
现在,我想执行与上面所示相同的计算并获得系数,但是,当我将它们放入for循环时,它不能正确计算系数
nsims = 1000
y = []
slope_mc = []
int_mc = []
for i in range(nsims):
m = models[i]
y.append(m[:,0])
popt, pcov = curve_fit(line,x,m[:,0])
slope = popt[0]
intercept = popt[1]
slope_mc.append(slope)
int_mc.append(intercept)
我收到一个错误声明
OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)
我已经研究过类似的解决方案,但它并没有解决我的问题。还有没有一种不使用for循环的更简单/更快的方法?谢谢你的帮助
目前没有回答
相关问题 更多 >
编程相关推荐