Python: 约翰逊分布族转换【自留】

本文介绍了如何使用约翰逊分布族对非标准正态数据进行拟合,并提供了X空间和Y空间之间的转换函数。通过实例展示了如何应用这些函数对数据进行密度估计和可视化。
摘要由CSDN通过智能技术生成

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()

示例图

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值