Python用法kstest函数对正态分布、对数正态分布及Weibull分布进行拟合检验

背景知识

KS(Kolmogorov-Smirnow)是针对连续分布的非参数的统计检验方法。

分为单样本检验与双样本检验。

单样本检验是比较单样本是否符合某个已知分布

双样本检验是比较两个数据集的累积分布的相似性

问题重述

在之前我已经利用参数推导和optimize优化两种方法分别计算了正态分布、对数正态分布与Weibull分布的参数值(这一部分如有需要可以再写文章),现需用kstest进行非参数检验

问题解决

我发现,利用单样本检验得到的p值均非常小,都不能通过检验。但从图像上来看数据拟合效果还好。

所以我决定利用双样本检验,利用之前求得的参数生成正态分布、对数正态分布与Weibull分布的数据,之后比较两个数据集的相似性从而判断是否符合某项分布。

import numpy as np
from scipy.stats import weibull_min
import pandas as pd
from scipy.stats import ks_2samp


# 数据准备
data_dataframe= pd.read_excel(r"data.xlsx")
data = np.array(data_dataframe)
data = data.flatten()
# print(data)
n = data.size


#正态分布拟合结果数据
mu_1=1560.2494837122676
sigma_1=2031.6216216216217
data_norm = np.random.normal(mu_1, sigma_1, size=1000)
# print(data_norm)


ks_statistic, p_value = ks_2samp(data,data_norm)
print("-----正态分布拟合数据检验-----")
print("KS统计量:", ks_statistic)
print("p值:", p_value)

# 判断
alpha = 0.05
if p_value > alpha:
    print("接受正态分布拟合")
else:
    print("拒绝正态分布拟合")


#定义对数正态分布参数
mu_2=7.174609656062055
sigma_2=1.0982798189842946
#生成对数正态分布数据
data_lognorm = np.random.lognormal(mu_2, sigma_2, size=1000)
# print(data_norm)

ks_statistic, p_value = ks_2samp(data,data_lognorm)
print("-----对数正态分布拟合数据检验-----")
print("KS统计量:", ks_statistic)
print("p值:", p_value)

# 判断
alpha = 0.05
if p_value > alpha:
    print("接受对数正态分布拟合")
else:
    print("拒绝对数正态分布拟合")


# 定义Weibull分布的参数
shape = 1.2070274296947248  # 形状参数
scale = 2156.942406132043 # 尺度参数
# 生成Weibull分布的数据
data_weibull = weibull_min.rvs(shape, scale=scale, size=1000)


ks_statistic, p_value = ks_2samp(data,data_weibull)
print("-----Weibull分布拟合数据检验-----")
print("KS统计量:", ks_statistic)
print("p值:", p_value)

# 判断
alpha = 0.05
if p_value > alpha:
    print("接受Weibull分布拟合")
else:
    print("拒绝Weibull分布拟合")

最终结果如下: 

-----正态分布拟合数据检验-----
KS统计量: 0.245
p值: 0.02243389023618303
拒绝正态分布拟合
-----对数正态分布拟合数据检验-----
KS统计量: 0.1464864864864865
p值: 0.3896872830210435
接受对数正态分布拟合
-----Weibull分布拟合数据检验-----
KS统计量: 0.09948648648648649
p值: 0.8364168630447264
接受Weibull分布拟合

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值