【Python】韦伯分布的拟合

韦伯分布的定义

本文为博主原创文章,未经博主允许不得转载。

二参数韦伯分布的累计分布函数CDF为: F ( x ) = 1 − e x p [ − ( x b ) a ] F(x) = 1 - exp[ - (\frac{x}{b})^a ] F(x)=1exp[(bx)a]

概率密度函数为:
f ( x ) = a b ( x b ) a − 1 e x p [ − ( x b ) a ] f(x) = \frac{a}{b}(\frac{x}{b})^{a-1} exp[-(\frac{x}{b})^a] f(x)=ba(bx)a1exp[(bx)a]

其中,a>0,为形状参数,b>0为尺度参数

拟合方法的原理

采用最小二乘法求解参数a,b:

对累计分布函数两边取双对数后可以得到: l n [ − l n ( 1 − F ( x ) ) ] = a l n ( x ) − a l n b ln[-ln(1-F(x))] = a ln(x) - a lnb ln[ln(1F(x))]=aln(x)alnb

改写为Y=Bx+A,则:

Y = l n [ − l n ( 1 − F ( x ) ) ] Y = ln[-ln(1-F(x))] Y=ln[ln(1F(x))]

X = l n ( x ) X = ln(x) X=ln(x)

B = a B = a B=a

A = − a l n b A = -alnb A=alnb

用最小二乘法求解系数:

B = ∑ ( X i − X ˉ ) ( Y i − Y ˉ ) ∑ ( X i − X ˉ ) 2 B = \frac{\sum (X_i - \bar X)(Y_i - \bar Y)}{\sum (X_i - \bar X)^2} B=(XiXˉ)2(XiXˉ)(YiYˉ)
A = Y ˉ − b X ˉ A = \bar{Y} - b \bar{X} A=YˉbXˉ
a = B a = B a=B
b = e x p [ − ( Y ˉ − B X ˉ ) / a ] b = exp[-(\bar{Y}-B \bar{X})/a] b=exp[(YˉBXˉ)/a]

python代码实现

from scipy.stats import exponweib
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
import math

def Cal_Weibull_CDF(data):
	cdf = sm.distributions.ECDF(data)
	data_min = min(data)
	data_max = max(data)
	x = np.linspace(data_min+1.0,data_max-1.0,num=100,endpoint=True)
	X = np.log(x) # X = ln(x)
	Y = np.log(-np.log(1.0-cdf(x))) # Y = ln[-ln[1-F(x)]]
	coef = np.polyfit(X,Y,1)
	a = coef[0]
	b = math.exp(-coef[1]/a)

	fcdf = lambda x: 1-np.exp(-np.power(x/b,a))
	return fcdf


# 用exponweib生成符合weibull分布的随机数组
n = 100     # number of samples
k = 2.89    # shape
lam = 1.95  # scale
obs = exponweib.rvs(k, lam, scale=20,size=n)

ocdf = sm.distributions.ECDF(obs)
# 拟合
fcdf = Cal_Weibull_CDF(obs) 

# 画图
x = np.linspace(0,50,num=100,endpoint=True)
y1 = ocdf(x)
y2 = fcdf(x)

plt.figure()
plt.plot(x,y1,color='blue',label='O')
plt.plot(x,y2,color='black',label='F')
plt.legend()
plt.show()

拟合结果:
CDF_fifting

参考

  1. Weibull分布参数估计方法及其应用_张秀芝
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值