t検査及びpythonコード実装

15131 ワード

t分布
全体的に正規分布に合致すると、σ 2 σ^2 σ2未知で支配可能なサンプルが小さい(n≦30)場合、サンプルはt分布に合致する.【サンプルのみから全体分散の真実値を正確に反映できないため】t分布形状はサンプルサイズに依存し、サンプルが大きい場合、t分布外形は正規分布に近づき、サンプルが小さい場合、曲線は比較的平坦である.t分布は1つのパラメータ→自由度v=n-1のみである.
標準分T=(x−μ )/( s/s q r t ( n ) ) T=(x-μ)/(s/sqrt(n)) T=(x−μ)/(s/sqrt(n))
t検査
統計分析はサンプリング研究の方法をよく採用しているが、抽出した2つのサンプルは同じ全体から来ているのだろうか.あるいは抽出した2つのサンプルは、全体的に違いがあることを説明できますか?そこで,全体的な研究問題をサンプルの平均比較問題に変換した.
一般的に3つのアプリケーションシーンが存在します
  • 単一サンプルt検査
  • ペアサンプルt検査
  • 独立サンプルt検査
  • 単一サンプルt検査
    単一サンプルt検査は、サンプル平均値と全体平均値との比較問題である.ここで、全体は正規分布に従い、正規全体からn個の個体組成サンプリングサンプルをサンプリングし、サンプリングサンプルの平均値と標準差を計算し、全体平均値とサンプリングサンプルの平均値が同じかどうかを判断する.
    この問題について:
  • まず仮説を立てる、検査レベルH 0を決定する.μ=μ0 H1:μ≠μ0 α=0.05
  • 次いで、t検査のための検査方法を選択し、統計量t=∣x−を計算する.μ ∣/( s/s q r t ( n ) ) t=|x-μ|/(s/sqrt(n)) t=∣x−μ∣/(s/sqrt(n))ここでxはサンプル平均値であり、μ全体平均値であり、nはサンプル量であり、sはサンプル標準差である.
  • 自由度v=n-1、t表を調べて対応するtを得るα , v t_{\alpha,v} tα,v値、p値を決定し、αレベル、推論をする.
  • from scipy.stats import ttest_1samp
    import numpy as np
    
    print("Null Hypothesis:μ=μ0=30,α=0.05")
    ages = [25,36,15,40,28,31,32,30,29,28,27,33,35]
    t = (np.mean(ages)-30)/(np.std(ages,ddof=1)/np.sqrt(len(ages)))
    
    ttest,pval = ttest_1samp(ages,30)
    print(t,ttest)
    if pval < 0.05:
    	print("Reject the Null Hypothesis.")
    else:
    	print("Accept the Null Hypothesis.")
    
    

    ペアサンプルt検査
    ペアリング試料は主に同一実験前後の効果の比較,あるいは同一試料の2つの方法で結果の比較を行った.ペアリングサンプルの差を変数とすることができ,差の全体平均数は0であり,正規分布に従う.
  • まず仮定を確立する:2つの処理効果は同じで、サンプル差値の平均値=0
  • は、次いで、t検査のための検査方法を選択し、前の問題と同様のプロセス完了検査を推論する.
  • from scipy.stats import ttest_rel
    s1 = [620.16,866.50,641.22,812.91,738.96,899.38,760.78,694.95,749.92,793.94]
    s2 = [958.47,838.42,788.90,815.20,783.17,910.92,758.49,870.80,826.26,805.48]
    print("Null Hypothesis:mean(s1)=mean(s2),α=0.05")
    ttest,pval = ttest_rel(s1,s2)
    if pval < 0.05:
    	print("Reject the Null Hypothesis.")
    else:
    	print("Accept the Null Hypothesis.")
    

    独立サンプルt検査
    第3の問題の独立したサンプルt検査について、2つのサンプルが表す2つの全体平均値に有意な差があるかどうかを比較した.サンプルが正規分布から来ることを要求するだけでなく、2つのサンプルの全体的な分散が等しい「分散整合性」も求められる.
  • まずF検査サンプルの全体分散が等しいH 0:二つの全体分散が等しい、H 1:二つの全体分散が等しくないα=0.1 F検査方法を選択し、統計量F=s 1 2/s 2【F>1】F=s_を計算する1^2/s_2^2【F>1】F=s 12/s 22【F>1】自由度v=n-1チャートからFを得るα , ( v 1 , v 2 ) F_{\alpha,(v_1,v_2)} Fα,(v 1,v 2)、P値を確定して分散性推論を行う.
  • 全体分散条件の下で、tはサンプルの平均値が
  • に等しいかどうかを検査する.
    from scipy.stats import ttest_ind,norm,f
    import numpy as np
    def ftest(s1,s2):
    	'''F            '''
    	print("Null Hypothesis:var(s1)=var(s2),α=0.05")
    	F = np.var(s1)/np.var(s2)
    	v1 = len(s1) - 1
    	v2 = len(s2) - 1
    	p_val = 1 - 2*abs(0.5-f.cdf(F,v1,v2))
    	print(p_val)
    	if p_val < 0.05:
    		print("Reject the Null Hypothesis.")
    		equal_var=False
    	else:
    		print("Accept the Null Hypothesis.")
    	 	equal_var=True
    	return equal_var
    	 	
    def ttest_ind_fun(s1,s2):
    	'''t                      '''
    	equal_var = ftest(s1,s2)
    	print("Null Hypothesis:mean(s1)=mean(s2),α=0.05")
    	ttest,pval = ttest_ind(s1,s2,equal_var=equal_var)
    	if pval < 0.05:
    		print("Reject the Null Hypothesis.")
    	else:
    		print("Accept the Null Hypothesis.")
    	return pval
    
    np.random.seed(42)
    s1 = norm.rvs(loc=1,scale=1.0,size=20)
    s2 = norm.rvs(loc=1.5,scale=0.5,size=20)
    s3 = norm.rvs(loc=1.5,scale=0.5,size=25)
    
    ttest_ind_fun(s1,s2)
    ttest_ind_fun(s2,s3)
    

    t検査t検査2
    「python科学計算第2版」Pythonを用いて機械学習の仮定検査を行う