不管是在练习项目还是实际工作中,我们基本上是抽样获取数据,通过一定的抽样设置得到一定数据量,然后从样本数据推断总体分布。但是不同情景下的数据分布是不同的,为了数据分析和后期模型建立,我们需要了解数据的实际分布。

. 数据分布检验

1. 判断一组数据是否服从正态分布

# python
import scipy.stats as stats
# Shapiro-Wilk test, x 为待检测数据,返回统计量和P值,适合样本量小于50
stats.shapiro(x)
# Kolmogorov–Smirnov,K-S 检验,样本量适合50~300,x 待检测数据,cdf为待检验分布,norm可检验正态,返回统计量和P值
stats.kstest (x, cdf, args = ( ), alternative ='two-sided', mode ='approx')stats.anderson (x, dist ='norm' )  # x 为待检测数据,dist为待检测分布,可以正态、指数、二项等
stats.normaltest (a, axis=0) # 样本量大于300

2. 判断两组数据是否服从同一分布-- K-S检验

统计量为各阶段两组数据的累计概率分布差值的最大值

stats.ks_2samp(x, y)

3. 方差齐性检验--F检验

比较两组数据方差是否存在显著性差异,适用于两样本t检验之前。

# 正态分布 F 检验
p = stats.f.sf(var1, var2, n1-1, n2-1)  # 非正态分布
stats.bartlett(*args)  # Bartlett's test 球状检验  ,输入为array_like的sample1,sample2, sample3 ...,返回统计量和P值
stats.levene(*args)   # Levene's test 参数同上,对于显著非正常人群,鲁棒性强

二. 总体推断

  1. 一个总体参数检验--单样本检验

a. 总体均值

① 总体方差已知 or(总体方差未知 and 样本量大)

② 总体方差未知 and 样本量小

b. 总体比例

c. 总体方差(正态分布)

2、两个总体参数检验--两样本检验

a. 两总体均值是否相等

① 总体方差已知 or(总体方差未知 and 样本量大)

② 总体方差未知 and 总体方差相等 and 样本量小

,自由度n1+n2-2

③ 总体方差未知 and 总体方差不等 and 样本量小

自由度

b. 两总体比例是否相等

c. 两总体方差是否相等(正态分布)

自由度(n1-1, n2-1)

import scipy.stats as stats
import numpy as npnp.random.seed(7653567)
x = stats.norm.rvs(loc=2, scale=10, size=100)
y = stats.norm.rvs(loc=2, scale=10, size=100)
z = stats.norm.rvs(loc=2, scale=10, size=100)# 单样本========================================================================
# 单样本z检验
from statsmodels.stats.weightstats import ztest
ztest(x, value=20)  # 判断总体均值是否是20# 单样本 t检验
stats.ttest_1samp(x, 2.0)# 单因素方差分析 ANOVA
stats.f_oneway(x, y, z) # x,y,z 是同一个自变量3个类别分别对应的样本观察值(因变量),样本量可不等# 单样本K-S 检验(Kolmogorov–Smirnov test),检验是否服从某个分布
stats.kstest(x, 'norm')# 单样本Wilcoxon检验--符号秩检验,检验样本中位数
import statsmodels
statsmodels.stats.descriptivestats.sign_test(x, mu0=0)  # mu0 通常为中位数# 二项分布检验
stats.binom_test(x, n=None, p=0.5, alternative='two-sided') # 检验x成功率与p是否有显著差异,n是抽样次数# 游程检验,判断总体变量值是否随机
from statsmodels.sandbox.stats.runs import runstest_1samp
runstest_1samp(x,cutoff='median'/'mean')
# =============================================================================# 两独立样本=====================================================================
# 两独立样本t检验
stats.ttest_ind(x, y, equal_var=True)  # equal_var:方差齐性# Mann-Whitney检验,假设总体其它参数相同,检验总体均值是否有差异,样本量可不同
stats.mannwhitneyu(x, y)# K-S检验,检验两总体分布是否相同,在信用评级模型中可以验证模型对违约对象的区分能力
stats.ks_2samp(x, y)# 两样本游程检验,即 Wald-Wolfowitz检验,检验俩总体是否相同
from statsmodels.sandbox.stats.runs import runstest_2samp
runstest_2samp(x, y)# Moses极端反应检验, 检验总体分布是否相同,对全体样本混合求秩分,根据两端的极端秩分值确定其差异性。
# =============================================================================# 配对样本=======================================================================
# 配对样本t检验
stats.ttest_rel(x, y)# 配对wilcoxon检验,检验俩样本中位数是否有显著差异,要求样本量相等
# correction表示小样本时,计算z统计量用0.5校正,alternative:two-sided,greater 针对H1假设大于
stats.wilcoxon(x,y,correction=True,alternative='greater')  # 样本量n>20# McNemar检验,配对卡方检验,是基于两次测量差值情况的检验方法。
# 即把样本的两次测量值相减,记录差值,然后通过校验公式处理后,求取卡方值
from statsmodels.sandbox.stats.runs import mcnemar
import numpy as np
mcnemar(x, y)  #  If y is None, then x can be a 2 by 2 contingency table
x = np.array([[80, 110], [75, 90]])
mcnemar(x)
# =============================================================================# 多样本========================================================================
# KrusKal-Wallis检验,设两个分布的样本中位数相等,用于检验样本是否来源于相同的分布
stats.kruskal(x, y)  # 样本量可不同, 可比较多个样本# 有序备择检验J-T检验 适用备择假设有上升或下降的趋势,大样本时趋于正态分布# Friedman 秩和检验,适用于算法模型的性能比较,基本思想是先对样本的K个检验量进行降序求秩分,然后按照秩分做方差分析。
"""构造降序排序矩阵
"""
def rank_matrix(matrix):cnum = matrix.shape[1]rnum = matrix.shape[0]## 升序排序索引sorts = np.argsort(matrix)for i in range(rnum):k = 1n = 0flag = Falsensum = 0for j in range(cnum):n = n+1## 相同排名评分序值if j < 3 and matrix[i, sorts[i,j]] == matrix[i, sorts[i,j + 1]]:flag = True;k = k + 1;nsum += j + 1;elif (j == 3 or (j < 3 and matrix[i, sorts[i,j]] != matrix[i, sorts[i,j + 1]])) and flag:nsum += j + 1flag = False;for q in range(k):matrix[i,sorts[i,j - k + q + 1]] = nsum / kk = 1flag = Falsensum = 0else:matrix[i, sorts[i,j]] = j + 1continuereturn matrix"""Friedman检验参数:数据集个数n, 算法种数k, 排序矩阵rank_matrix(k x n)函数返回检验结果(对应于排序矩阵列顺序的一维数组)
"""
def friedman(n, k, rank_matrix):# 计算每一列的排序和sumr = sum(list(map(lambda x: np.mean(x) ** 2, rank_matrix.T)))result = 12 * n / (k * ( k + 1)) * (sumr - k * (k + 1) ** 2 / 4)result = (n - 1) * result /(n * (k - 1) - result)return result
# friedman example
matrix = np.array([sample1, sample2, sample3, sample4])
matrix_r = rank_matrix(matrix.T)
Friedman = friedman(n, k, matrix_r)  # n 是每组样本大小,k是k组样本# Kendall 协同系数检验,先计算K个观测量卡方值和协同系数W,然后判断其观测值的分布是否一致。
# W表示被检验变量的秩分之间的差异程度。协同系数W的取值在0~1,W越接近于1,表示变量的组件差异越大
stats.kendalltau(x, y)# Cochran Q检验,分析K各关联样本是否来自同一总体或者具有相同的分布
from statsmodels.sandbox.stats.runs import cochrans_q
cochrans_q(x)  # x 是n*k矩阵,k组n样本大小

三、其它检验

  1. Permutation test 置换检验

基于大量计算,利用样本的全排列推断总体。适用于总体未知的小样本检验。比较两组方案的样本观测值,推断总体是否存在差异,两组样本量可不同。具体操作是混合两组样本,重复抽样两组与原样本量相同的样本,计算均值差分布,根据原始样本均值差在此分布中的概率,并根据显著性水平判断是否存在差异。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
def permutation_test(x, y, n):m, k = len(x), 0diff = np.abs(np.mean(x)-np.mean(y))z = np.concatenate([x, y])lst = np.empty(n)for j in range(n):np.random.shuffle(z)lst[j] = np.abs(np.mean(z[:m])-np.mean(z[m:]))k += diff<lst[j]p = k/nreturn lst, px = np.array([24,43,58,67,61,44,67,49,59,52,62,50])
y = np.array([42,43,65,26,33,41,19,54,42,20,17,60,37,42,55,28])
lst, p = permutation_test(x, y, 999)
print(p)  # p=0.013
sns.set_palette("hls")
sns.distplot(lst,color="g",bins=40,kde=True)
plt.title('Permutation Test')
plt.xlabel('difference')
plt.ylabel('distribution')
plt.show()

2. Mann-kendall检验

判断变量,随着时间变化,是否有单调上升或下降的趋势。可替代参数线性回归分析,MK检验是非参数检验(不要求服从任何分布),允许少量缺失值和异常值。在气候诊断和预测的场景使用较多。

前提要求:无趋势时样本是独立同分布的。样本是无偏,有效。

stats

bartlett方差齐性检验_数据总体分布检验相关推荐

  1. bartlett方差齐性检验_基于R实现统计中的检验方法方差分析

    作者:徐涛,19年应届毕业生,专注于珊瑚礁研究,喜欢用R各种清洗数据. 知乎: https://www.zhihu.com/people/parkson-19/posts 前言 方差分析(均数的显著性 ...

  2. bartlett方差齐性检验_方差齐性检验

    总第235篇/张俊红 1.前言 我们在方差分析里面有讲过,方差分析有一个很重要的前提就是叫方差齐性.这一篇来讲讲如何来检验方差齐性. 先讲讲什么是方差齐性,方差齐性是指不同组间的总体方差是一样的.那为 ...

  3. python方差齐性检验_方差分析中的方差齐性检验_方差齐性检验结果分析

    方差分析中的方差齐性检验_方差齐性检验结果分析_方差分析 齐性检验 方差分析时的方差齐性检验是方差分析的前提条件,还是只是后面进行均值的多重比较时选择分析方法的依据?看过几本书,这两种观点都有.我看方 ...

  4. bartlett方差齐性检验_R语言实用教程-数据正态性以及方差齐性检验

    第一节:数据正态性分析 数据是不是正态分布是接下来选择正确的分析方法的基础.因为通常的方差分析用到的都要求是正态分布的数据(或者经过转换之后为正态的数据).而数据如果不满足正态性,那么通常要选择非参数 ...

  5. python方差齐性检验_讲讲如何来检验方差齐性

    1.前言 我们在方差分析里面有讲过,方差分析有一个很重要的前提就是叫方差齐性.这一篇来讲讲如何来检验方差齐性. 先讲讲什么是方差齐性,方差齐性是指不同组间的总体方差是一样的.那为什么方差分析的前提是要 ...

  6. python 方差齐性检验_Python数据科学:正态分布与t检验

    昨天介绍了两连续变量的相关分析,今天来说说连续变量与分类变量(二分)之间的检验. 通俗的来讲,就是去发现变量间的关系. 连续变量数量为一个,分类变量数量为两个. 总体:包含所有研究个体的集合. 样本: ...

  7. python方差齐性检验_方差齐性检验的原理

    统计学搜索整理汇总--方差齐性检验的原理 LXK的结论:齐性检验时F越小(p越大),就证明没有差异,就说明齐,比如F=1.27,p>0.05则齐,这与方差分析均数时F越大约好相反.[www.Ni ...

  8. python方差齐性检验_【Python】统计科学之方差齐性检验

    首页 专栏 python 文章详情 0 统计科学之方差齐性检验 张俊红发布于 今天 10:38 1.前言 我们在方差分析里面有讲过,方差分析有一个很重要的前提就是叫方差齐性.这一篇来讲讲如何来检验方差 ...

  9. python 方差齐性检验_Python数据科学:方差分析

    之前已经介绍的变量分析: ①相关分析:一个连续变量与一个连续变量间的关系. ②双样本t检验:一个二分分类变量与一个连续变量间的关系. 本次介绍: 方差分析:一个多分类分类变量与一个连续变量间的关系. ...

最新文章

  1. css 子元素设置float,父元素高度塌陷
  2. 清单革命:为什么不仅是工具革命
  3. hdu2149 巴什博奕
  4. Linux Crontab 详解
  5. 使用jquery检查/取消选中复选框? [重复]
  6. C# 正则匹配 电话号码 和 座机号
  7. CentOS7 升级到7.4
  8. access h3c交换机光口_华为交换机的配置及:access、trunk、hybird端口详解
  9. XSS fuzzing 工具
  10. Linux 文件权限、目录权限
  11. 怎样更改网站服务器的ip地址,如何更改您的服务器IP地址
  12. Linux编程学习笔记-多进程编程
  13. 【软件工程】决策表和决策树
  14. 万能通用网关系统!就该这么设计,稳的一批!
  15. Python数据可视化 - 直方图hist ≠ 条形图bar ( pandas与hist快速作图 )
  16. vue获取qq音乐歌曲音频资源
  17. (二)编译PVE内核5.10.6-1-pve及安装内核补丁fullconeNat
  18. 10万元4厘利息怎么算_10万利息4厘是多少钱
  19. MVC设计模式,自己搭建MVC开发框架
  20. 迅雷下载原理的源代码(linux c)

热门文章

  1. jQuery Mobile中链接(包含button和表单提交的链接)的data-*选项
  2. Linux环境下实现一个简单socket通信
  3. Ubuntu图形界面更改软件下载源为清华镜像站以及解决等待apt退出的问题
  4. 编程心法 之 内聚度和耦合度是什么
  5. 严蔚敏版《数据结构 (C语言版)》和《数据结构题集》(五)——栈和队列...
  6. 软件构造 第五章第三节 可复用的设计模式
  7. PHP 中的对象传递
  8. sql 查询Africa城市的人口和城市名字
  9. Android开发技术周报 Issue#101
  10. C++ Pitfalls 之 reference to an object in a dynamically allocated containter