目錄
獨立樣本中位數(均值)檢驗【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)