Scipy_常用统计函数
Scipy_常用統(tǒng)計(jì)函數(shù)
Weijia Li
關(guān)注公眾號(hào),一起學(xué)習(xí)~
無聊e編程
from scipy.stats import * import numpy as np import matplotlib.pyplot as pltdescribe
參量(a, axis=0, ddof=1, bias=True, nan_policy=‘propagate’) a:輸入數(shù)據(jù) axis:默認(rèn)0;none計(jì)算整個(gè)a ddof:自由度默認(rèn)為1 bias:如果為False,則校正偏度和峰度計(jì)算以消除統(tǒng)計(jì)偏差 nan_policy:定義當(dāng)輸入包含nan時(shí)如何處理。可以使用以下選項(xiàng) ‘propagate’:返回nan ‘raise’:拋出一個(gè)錯(cuò)誤 ‘omit’:執(zhí)行計(jì)算時(shí)忽略nan值
返回: nobs:觀察數(shù)(沿軸的數(shù)據(jù)長度) minmax:數(shù)據(jù)數(shù)組的最小值和最大值。mean:數(shù)據(jù)沿軸的算術(shù)平均值。方差:沿軸,分母的數(shù)據(jù)的無偏方差是觀察數(shù)減去一。偏度:基于分母等于觀測次數(shù)的矩計(jì)算,即沒有自由度校正。峰度:峰度被歸一化,因此對于正態(tài)分布它為零。沒有使用自由度。
集中趨勢的描述
mean算術(shù)均數(shù)
# 抗體滴度為1:10,1:20,1:40,1:80,1:160,1:320,1:640,1:1280 # 分別對應(yīng)人數(shù)f為:4,3,10,10,11,15,14,2 Didu=np.array([10,20,40,80,160,320,640,1280]) Repeat_f=np.array([4,3,10,10,11,15,14,2]) Data=Didu.repeat(Repeat_f) Data.mean()280.8695652173913
gmean幾何平均值
gmean(Data)150.64109410382258
median中位數(shù)
np.median(Data)160.0
np.percentile(Data,[50])array([160.])
np.percentile(Data,[50])array([160.])
percentile百分位數(shù)
np.percentile(Data,[25,50,100])array([ 80., 160., 1280.])
scoreatpercentile(Data,per=[25,50,100])array([ 80., 160., 1280.])
離散趨勢的描述
極差
np.ptp(Data)1270
四分位數(shù)間距
iqr(Data)240.0
方差,標(biāo)準(zhǔn)差
Data.std(),Data.var()(281.48539298696903, 79234.02646502838)
變異系數(shù)
#標(biāo)準(zhǔn)差與平均值之比 variation(Data)1.0021925756501993
其他統(tǒng)計(jì)描述
樣本偏度
skew(Data)1.4758210321910645
樣本峰度
kurtosis(Data)2.3411133773829924
平均值的標(biāo)準(zhǔn)誤
sem(Data)34.135117863346174
相關(guān)函數(shù)
Pearsonr相關(guān)系數(shù)
a=np.arange(7) b=np.array([0,3,2,1,3,4,8]) plt.plot(a,b)#return:皮爾遜相關(guān)系數(shù)和兩尾p值
pearsonr(a,b)(0.8067793113007157, 0.028319564882430495)
總體均數(shù)的估計(jì)
可信區(qū)間
#a為置信水平 #第一個(gè)參數(shù)為置信水平 t.interval(0.95,loc=166.95,df=9,scale=3.64/np.sqrt(10))(164.34610086233263, 169.55389913766734)
#手工: #假設(shè)樣本均值為166.95,自由度為10-1,標(biāo)準(zhǔn)差為3.64,置信度為1-a [a,μ,df,s]=[0.05,166.95,9,3.64] print('均值的置信區(qū)間95%CI為:(',(μ-t.isf(a/2,df=df)*(s/np.sqrt(df+1))),',',(μ+t.isf(a/2,df=df)*(s/np.sqrt(df+1))),')')均值的置信區(qū)間95%CI為:( 164.34610086233263 , 169.55389913766734 )
#若某市某年18歲男生身高服從μ=167.7,標(biāo)準(zhǔn)差δ=5.3的正態(tài)分布,總體中隨機(jī)抽樣g=100個(gè),每次樣本含量n=10人,置信度為1-0.05 #總體δ未知,小樣本,服從t分布 g,n,μ,s,a=100,10,167.7,5.3,0.05 data=norm.rvs(loc=167.7,scale=5.3,size=n) t.interval(0.95,loc=167.7,scale=sem(data),df=n-1)(164.20057600017955, 171.19942399982043)
#實(shí)驗(yàn)1: #若某市某年18歲男生身高服從μ=167.7,標(biāo)準(zhǔn)差δ=5.3的正態(tài)分布,總體中隨機(jī)抽樣g=100個(gè),每次樣本含量n=10人,置信度為1-0.05 #總體δ未知,小樣本,服從t分布 g,n,μ,s,a=100,10,167.7,5.3,0.05 #記錄每次實(shí)驗(yàn)樣本的置信區(qū)間 records=[] for i in range(g):data=norm.rvs(loc=167.7,scale=5.3,size=n)#每次樣本的值均和標(biāo)準(zhǔn)誤mean,xsem=data.mean(),sem(data)#1-a置信區(qū)間CI為:records.append([mean-t.isf(a/2,n-1)*xsem,mean+t.isf(a/2,n-1)*xsem]) #置信區(qū)間包含住總體μ的概率 count=0 for i in range(g):if records[i][0]<μ<records[i][1]:count+=1 print('概率為:',count/g)概率為:0.96
xl,xu=[i[0] for i in records],[i[1] for i in records] xticks=[i for i in range(len(records))] plt.vlines(xticks,xl,xu,colors='b',alpha=0.8) plt.hlines(μ,0,100,'r')假設(shè)檢驗(yàn)
t檢驗(yàn)
注意!Scipy中的t檢驗(yàn)均是雙尾檢驗(yàn),若要單尾檢驗(yàn),僅需將p-value/2
單樣本t檢驗(yàn)
#n=36,xmean=130.83,s=25.74,μ0=140 #H0:μ=μ0=140,即從事鉛作業(yè)男性工人與正常成年男性的血紅蛋白含量均數(shù)相等 #H1:μ!=μ0=140,即從事鉛作業(yè)男性工人與正常成年男性的血紅蛋白含量均數(shù)不等 #待測樣本來自正態(tài)總體 ttest_1samp(norm.rvs(size=36,loc=130.83,scale=25.74),140)Ttest_1sampResult(statistic=-2.6308725605833954, pvalue=0.012577747566433572)
配對樣本t檢驗(yàn)
#配對實(shí)驗(yàn)設(shè)計(jì)(關(guān)聯(lián)樣本) #差值服從正態(tài)總體 #H0:μd=0,即兩種方法的測定結(jié)果相同 #H1:μd!=0,即兩種方法的測定結(jié)果不同 data=np.array([[0.84,0.591,0.674,0.632,0.687,0.978,0.75,0.73,1.20,0.87],[0.58,0.509,0.5,0.316,0.337,0.517,0.454,0.512,0.997,0.506]]) data #方法1:相關(guān)樣本t檢驗(yàn) ttest_rel(data[0],data[1])Ttest_relResult(statistic=7.925975721054968, pvalue=2.3839523690926263e-05)
#方法2:轉(zhuǎn)化為總體均值為0的單樣本t檢驗(yàn) #因p<=2.384,按a=0.05水準(zhǔn),拒絕H0,接受H1,差異有統(tǒng)計(jì)學(xué)意義。結(jié)合題目可以認(rèn)為這兩種方法對脂肪含量的測定結(jié)果不同,其中哥特里-羅紫法測定結(jié)果較高。 ttest_1samp(data[0]-data[1],0)Ttest_1sampResult(statistic=7.925975721054968, pvalue=2.3839523690926263e-05)
獨(dú)立樣本t檢驗(yàn)
#完全隨機(jī)設(shè)計(jì)實(shí)驗(yàn) #兩樣本均來自正態(tài)總體 #兩樣本的方差相等 #H0:μ1=μ2,即阿卡波糖膠囊組與拜唐蘋膠囊組空腹血糖下降值的總體均數(shù)相等 #H1:μ1!=μ2,即阿卡波糖膠囊組與拜唐蘋膠囊組空腹血糖下降值的總體均數(shù)不相等 #待測兩樣本均來自正態(tài)總體 data=np.array([[-0.7,-5.6,2,2.8,0.7,3.5,4,5.8,7.1,-0.5,2.5,-1.6,1.7,3,0.4,4.5,4.6,2.5,6,-1.4],[3.7,6.5,5,5.2,0.8,0.2,0.6,3.4,6.6,-1.1,6,3.8,2,1.6,2,2.2,1.2,3.1,1.7,-2]]) data.shape(2, 20)
#equal_var參數(shù)表示,兩樣本總體方差是否相等,默認(rèn)為True #方法1:現(xiàn)有兩組樣本,直接計(jì)算 ttest_ind(data[0],data[1])Ttest_indResult(statistic=-0.641871949031214, pvalue=0.5248097059442389)
#方法2:現(xiàn)有兩組樣本的均值和標(biāo)準(zhǔn)差 ttest_ind_from_stats(data[0].mean(),data[0].std(),19,data[1].mean(),data[1].std(),19,equal_var=True) #p=0.53,按a=0.05水準(zhǔn),不拒絕H0,差異無統(tǒng)計(jì)學(xué)意義,尚不能認(rèn)為阿卡波糖膠囊與拜唐蘋膠囊對空腹血糖的降糖效果不同。Ttest_indResult(statistic=-0.641871949031214, pvalue=0.5250226836502808)
正態(tài)檢驗(yàn)
偏度skewtest檢驗(yàn)
skewtest([100, 100, 100, 100, 100, 100, 100, 101]) SkewtestResult(statistic=3.5717766638478086, pvalue=0.0003545677202816322) skewtest([2, 8, 0, 4, 1, 9, 9, 0])SkewtestResult(statistic=0.44626385374196975, pvalue=0.6554066631275459)
峰度kurtosistest檢驗(yàn)
kurtosistest(list(range(20))) KurtosistestResult(statistic=-1.7058104152122062, pvalue=0.08804338332528348) s = np.random.normal(0, 1, 1000) kurtosistest(s)KurtosistestResult(statistic=0.35408712426705563, pvalue=0.7232735911597703)
正態(tài)分布normaltest檢驗(yàn)
a = np.random.normal(0, 1, size=1000) b = np.random.normal(2, 1, size=1000) x = np.concatenate((a, b)) x.shape (2000,) k2,p=normaltest(x) #k2為偏度平方+峰度平方,p為卡方概率 #其中p<0.001,按檢驗(yàn)水平a=0.001,拒絕H0,差異有統(tǒng)計(jì)學(xué)意義,可以認(rèn)為該樣本與正態(tài)分布不同。 print('p={:}'.format(p))p=4.814764728135897e-14
QQ圖
#可以看出當(dāng)df足夠大時(shí),t分布近似正態(tài)分布 probplot(t.rvs(df=49,size=100),dist='norm',fit=True,plot=plt)兩樣本F方差檢驗(yàn)
兩樣本均來自總體總體
#F=var1/Var2 df1=n1-1,df2=n2-1 var1,var2=3.0601**2,2.4205**2 df1,df2=20-1,20-1 F=var1/var2 F1.5983101734517282
f.sf(F,df1,df2)0.157643797395044
#因?yàn)?.60<2.168,故p>0.1水準(zhǔn),不拒絕H0,差異無統(tǒng)計(jì)學(xué)意義。尚不能認(rèn)為阿卡波糖膠囊與拜唐蘋膠囊組空腹血糖下降值的總體方差不等。 f.isf(0.05,df1,df2)2.168251601406261
兩樣本不服從正態(tài)分布
#執(zhí)行Levene檢驗(yàn)以得出均等的方差 a = [8.88, 9.12, 9.04, 8.98, 9.00, 9.08, 9.01, 8.85, 9.06, 8.99] b = [8.88, 8.95, 9.29, 9.44, 9.15, 9.58, 8.36, 9.18, 8.67, 9.05] c = [8.95, 9.12, 8.95, 8.85, 9.03, 8.84, 9.07, 8.98, 8.86, 8.98] stat,p=levene(a,b,c) #較小的p值表明總體沒有相同的方差 p0.002431505967249681
總結(jié)
以上是生活随笔為你收集整理的Scipy_常用统计函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 系统安装aria2以及配置w
- 下一篇: 得到app文稿导出_逻辑思维,阅读付费平