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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章