Y(非标准正态)空间下的拟合
def Y_Johnson(Xspace, axx, bxx, ayy, byy, jstype):
if jstype == 2: #SB
Yspace = byy + ayy * 1 / (1 + np.exp(-(Xspace - bxx) / axx))
elif jstype == 1: #SU
Yspace = byy + ayy * 0.5 *(np.exp ((Xspace - bxx)/axx)- np.exp(-(Xspace-bxx)/axx))
else: #SL
Yspace = byy + ayy * (np.exp ((Xspace - bxx)/axx))
return Yspace
#导入约翰逊分布族参数 包括ax bx ay by p(p=value) type(约翰逊分布族表示1 or 2 or 3)
johnson = pd.read_excel( datapath + 'jsparameter.xlsx')
#画图
for pp in range(9):
ax,bx,ay,by,pvalue,type_id = johnson['ax'][pp],johnson['bx'][pp],johnson['ay'][pp], johnson['by'][pp],johnson['p'][pp], johnson['type'][pp]
XX = np.random.randn(1000)
Y =Y_Johnson(XX,ax,bx,ay,by,type_id)
sns.kdeplot(Y, color='r',lw=2 ,label='Probability Density Function')
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)
plt.show()
示例图
X空间拟合(将Y空间下转为到X空间)
def X_Johnson(Yspace, axx, bxx, ayy, byy, jstype):
if jstype == 1: #SU
x_var = (Yspace - byy)/ayy
Xspace = bxx + axx * np.log (x_var + np.sqrt(x_var**2 +1))
elif jstype == 2: #SB
Xspace = bxx + axx * np.log( (Yspace - byy) /( ayy + byy - Yspace))
else:
Xspace = bxx + axx * np.log ((Yspace - byy)/ayy)
return Xspace
for pp in range(9):
plt.figure()
data_h = np.log(data[column_name])
data_h = pd.to_numeric(data_h, errors='coerce') # object -> float
ax,bx,ay,by,pvalue,type_id = johnson['ax'][pp],johnson['bx'][pp],johnson['ay'][pp], johnson['by'][pp],johnson['p'][pp], johnson['type'][pp]
Y = data_h
X = X_Johnson(Y, ax, bx, ay, by, type_id)
plt.hist(X, bins=20, density=True, color='skyblue', edgecolor='black')
sns.kdeplot(X,bw_method = 0.9, color='r',lw=2 ,label='Probability Density Function') # bw_method调整平滑度
plt.show()
示例图