python非参数检验

目录

单样本非参数检验

中位数(均值)检验【wilcoxon符号值秩检验】

 分布的检验

游程检验

两样本的非参数检验

独立样本中位数(均值)检验【Mann-Whitney-Wilcoxon检验or Wilcoxon秩和检验】

独立样本的分布检验 

配对样本中位数的检验

两样本游程检验

多个样本的非参数检验

多个样本的分布检验

独立样本位置的检验 


在总体分布未知或与总体分布无关的情况下进行统计推断--非参数估计

对总体分布形式的检验(拟合优度检验)

对总体分布位置的检验(位置检验)

单样本非参数检验

中位数(均值)检验【wilcoxon符号值秩检验】

假定总体是连续且对称(中位数=均值)

原假设H0 :M=M0

基本思想:假设总体中位数M0,计算Di=xi-M0,按照其绝对值排序得到秩。计算Di<0/>0的秩和W-、W+,如果相差很大,则可以拒绝对总体中位数的原假设

def Wilcoxon_signes_rank_test(samp,mu0=0):
    temp=pd.DataFrame(np.asarray(samp),columns=['origin_data'])
    temp['D']=temp['origin_data']-mu0
    temp['rank']=abs(temp['D']).rank()
    posW=sum(temp[temp['D']>0]['rank'])
    negW=sum(temp[temp['D']<0]['rank'])
    n=temp[temp['D']!=0]['rank'].count()
    z=(posW-n*(n+1)/4)/np.sqrt((n*(n+1)*(2*n+1))/24)
    p = (1-stats.norm.cdf(abs(z)))*2
    return z , p

Wilcoxon_signed_rank_test(water['net'],mu0=600)

# 也可以statsmodels.stats.descriptivestats中sign_test

 分布的检验

K-S检验H0:F(X)=F0(X)

检验样本数据是否服从某个分布

stats.kstest(ks['observation'],'norm',args=(ks['observation'].mean(),ks['observation'].std()))
stat.anderson(ks['observation'],dist='norm')
stats.shapiro(ks['observation'])

游程检验

H0:总体变量的取值是随机的

连续变量需要看是否大于均值/中位数进行截断

sm.stats.runstest_lsamp(asarray(runs['economics']),cutoff='median'/'mean')

两样本的非参数检验

独立样本中位数(均值)检验【Mann-Whitney-Wilcoxon检验or Wilcoxon秩和检验】

H0:两个独立样本的中位数相等

合并样本n1/n2之后得到秩,然后得到第一、二个样本的秩和W1、W2,如果差异大,则拒绝原假设

stats.ranksums(sales_district[sales_district['district']==1]['sales'],
                sales_district[sales_district['district']==2]['sales'])
stats.mannwhitneyu(sales_district[sales_district['district']==1]['sales'],
                sales_district[sales_district['district']==2]['sales'],
                alternative='two-sided')

独立样本的分布检验 

检验样本所来自的总体分布是否相同

H0:F1(x)=F2(x)

 

stats.ks_2samp(café_scale[café_scale['city']==1]['computers'],
                café_scale[café_scale['city']==2]['computers'])

配对样本中位数的检验

先变成两者之差,然后利用wilcoxon检验去做

stats.wilcoxon(happiness['Year2015'],happiness['Year2016'])

两样本游程检验

检验两样本数据是否来自于同一总体分布

sm.stats.runstest_2samp(asarray(runs['economics'].astype('float64'),
                        asarray(runs['statistics'].astype('float64'))
sm.stats.runstest_2samp(asarray(runs['score'].astype('float64'),
                        groups=asarray(runs['group'])

多个样本的非参数检验

多个样本的分布检验

检验各样本数据是否来自同一主体

G=ksampledis['class'].unique()
args=[]
for I in list(G):
    args.append(array(ksampledis['class']==I]['statistics_score']))
stats.anderson_ksamp(args)

独立样本位置的检验 

stats.kruskal(*args)
stats.median_test(*args)

 


版权声明:本文为kylin_learn原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。