from scipy.stats import pearson3
from scipy.stats import f
import numpy as np
from scipy.optimize import curve_fit
from scipy import integrate
from scipy.special import gamma
import matplotlib.pyplot as plt
data =[1468,1470,1469,1468,1466,1470,1461,1462,1465,1465,1466,1464,1483,1485,1474,1484,1488,1487,1489,1476,1496,1483,1480,1491,1458,1458,1452,1435,1436,1452,1460,1443,1458,1442,1452,1451,1461,1468,1456,1460,1464,1466,1468,1465,1460,1457,1456,1468,1490,1441,1465,1460,1466,1471,1502,1467,1489,1462,1473,1476,1504,1499,1490,1475,1489,1496,1481,1486,1470,1483,1459,1487]
param = pearson3.fit(data)
lamta_shape=param[0]
m_loc=param[1]
beta_scale=param[2]
data_sort=sorted(data)
p_vale_mean=[pearson3.pdf(a,lamta_shape,m_loc,beta_scale) for a in data_sort]
cp_vale_mean=[pearson3.cdf(a,lamta_shape,m_loc,beta_scale) for a in data_sort]
def cp_3sigma(alpha,sample_n):
cp_vale=[]
for i in range(sample_n+1):
if i==0:
pass
else:
fenzi=i/(sample_n-i+1)
fenmu=f.isf(q=alpha, dfn=2*(sample_n-i+1), dfd=2*i) +i/(sample_n-i+1)
p=fenzi/fenmu
cp_vale.append(p)
return cp_vale
cp_vale_3sigma=cp_3sigma(0.05,len(data))
**def func(x,rr,mm,bb):
fn=lambda t:(np.abs(bb)/gamma(rr))pow(bb(t-mm),rr-1)np.exp(-bb(t-mm))
num=np.asarray([integrate.quad(fn,mm,_x)[0] for _x in x])
return num
xdata = np.array(data_sort)
ydata = np.array(cp_vale_3sigma)
#非线性最小二乘法拟合
parameter_optimal, cov = curve_fit(func, xdata, ydata)**
#获取popt里面是拟合系数
print("paramater =", parameter_optimal)
y = func(xdata, *parameter_optimal)
plt.plot(ydata, xdata, 'o')
plt.plot(y, xdata, '-')
plt.show()
含积分的方程拟合参考这篇帖子:https://blog.csdn.net/weixin_39698217/article/details/111454089
根据指定的积分方程求解方程系数
给你找了一篇非常好的博客,你可以看看是否有帮助,链接:利用scipy.optimize.curve_fit对函数进行拟合