如何用Scipy拟合固定截断阈值的截断正态分布
用Scipy拟合已知绝对截断范围的截断正态分布
我需要用Scipy拟合截断正态分布,已知数据的截断范围为[np.log(2.5e6), np.inf],且有经验数据可用。已知通过scipy.stats.truncnorm.fit(data, fb=np.inf)可以设置正确的上界,但fa参数需要通过公式fa=(np.log(2.5e6)-mu)/sigma计算——而潜在正态分布的mu和sigma是未知的,无法直接确定fa。
遇到的问题:
- 不提供
fa参数时,拟合结果完全错误; - 用样本均值和标准差估算
fa时,拟合效果极差; - 只有在模拟场景中传入正确的
fa作为初始值时,拟合才能正常进行。
我尝试过以下约束优化代码,但运行后只得到NaN值:
def func(p, r, xa): a, loc, scale = p return scipy.stats.truncnorm.nnlf([a, np.inf, loc, scale], r) #return truncnorm.nnlf(p, r) def constraint(p, r, xa): a, loc, scale = p return np.array([a*scale + loc - xa]) xa = np.log(2.5e6) mu = 14.71 sigma = 1.14 a = (xa - mu)/sigma log_data = scipy.stats.truncnorm(a=a, b=np.inf, loc=mu, scale=sigma).rvs(10**6) loc_guess = np.mean(log_data) scale_guess = np.std(log_data) a_guess = (xa - loc_guess)/scale_guess p0 = [a_guess, loc_guess, scale_guess] par = scipy.optimize.fmin_slsqp(func, p0, f_eqcons=constraint, args=(log_data, xa), iprint=False, iter=1000) print(par)
补充说明:我还做了模拟数据拟合测试:不传入归一化下界时,拟合结果错误;传入正确的归一化下界则拟合正常。但实际场景中,我只知道绝对值形式的截断点(即log_data >= np.log(2.5e6)),不知道相对于mu和sigma的归一化值,该怎么处理?
对应测试代码:
import scipy import numpy as np THRESHOLD = np.log(2.5e6) mu = 14.71 sigma = 1.14 A_CORRECT = (THRESHOLD - mu)/sigma BLN = scipy.stats.truncnorm(loc=mu, scale=sigma, a=A_CORRECT, b=np.inf) log_data = BLN.rvs(10**6) print('理论正态分布统计量', BLN.mean(), BLN.std()) print('经验正态分布统计量', np.mean(log_data), np.std(log_data)) # 原代码中data未定义,此处注释 # print('对数正态经验统计量', np.mean(data), np.std(data)) # A_GUESS = (THRESHOLD-np.mean(log_data))/np.std(log_data) # print(A_CORRECT, A_GUESS) x = scipy.stats.truncnorm.fit(log_data, fb=np.inf, method='MLE') print("a", "b", "loc", "std") print(x) print(scipy.stats.truncnorm.fit(log_data, fb=np.inf, fa=A_CORRECT, method="MLE"))
测试输出:
理论正态分布统计量 14.73053747333533 1.139387450709973 经验正态分布统计量 14.73043234715727 1.1392765414017013 a b loc std (4.332558230073726, inf, -0.26590264062021884, 3.4612803954831683) (0.019123938454760524, inf, 14.710001292351723, 1.1399781227638002)
内容的提问来源于stack exchange,提问作者Massimo
相关产品推荐
相关产品推荐

