t检验及python代码实现

t分布

当总体符合正态分布, σ 2 σ^2 σ2未知,且可供支配的样本很小(n≤30)时,样本符合t分布。【因为仅从样本无法精确反映总体方差的真实值】
t分布形状取决于样本大小,当样本很大时,t分布外形接近正态分布,当样本很小时,曲线较为扁平。t分布只有一个参数→自由度v=n-1.

标准分 T = ( x − μ ) / ( s / s q r t ( n ) ) T=(x-μ)/(s/sqrt(n)) T=(xμ)/(s/sqrt(n))

t检验

统计分析常采用抽样研究的方法,那么抽取的2个样本是否来自相同的总体?或者抽取的2个样本能否说明其总体存在差异?于是我们把总体的研究问题转化成样本的均值比较问题。

普遍存在三种应用场景

  1. 单样本t检验
  2. 配对样本t检验
  3. 独立样本t检验

单样本t检验

单样本t检验是样本均值与总体均值的比较问题。其中总体服从正态分布,从正态总体中抽样得到n个个体组成抽样样本,计算抽样样本均值和标准差,判断总体均值与抽样样本均值是否相同。

针对这个问题:

  • 首先建立假设,确定检验水准
    H0:μ=μ0 H1:μ≠μ0 α=0.05
  • 然后选择检验方法为t检验,计算统计量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检验

配对样本主要是同一实验前后效果的比较,或者同一样品用两种方法检验结果的比较。可以把配对样本的差作为变量,差值的总体均数为0,服从正态分布

  • 首先建立假设:两种处理效果相同,样本差值均值=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检验

对于第三个问题独立样本t检验,比较两个样本所代表的两个总体均值是否存在显著差异。除了要求样本来自正态分布,还要求两个样本的总体方差相等“方差齐性”。

  • 首先F检验样本总体方差相等
    H0:两总体方差相等,H1:两总体方差不相等 α=0.1
    选择F检验方法,计算统计量
    F = s 1 2 / s 2 2 【 F &gt; 1 】 F=s_1^2/s_2^2【F&gt;1】 F=s12/s22F>1
    由自由度v=n-1查表得到 F α , ( v 1 , v 2 ) F_{\alpha,(v_1,v_2)} Fα,(v1,v2),确定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科学计算第二版》
使用Python进行机器学习的假设检验

  • 11
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值