单样本T检验-ttest_1samp
1 2 3 4 5
| from scipy import stats import numpy as np np.random.seed(7654567) rvs = stats.norm.rvs(loc=5,scale=10,size=(100,2)) r
|
检验两列数的均值与1和2的差异是否显著
1 2 3 4
| stats.ttest_1samp(rvs, [1, 2])
|
Ttest_1sampResult(statistic=array([3.71134343, 2.85084277]), pvalue=array([0.00034072, 0.00530677]))
不拒绝原假设——均值等于5
1
| stats.ttest_1samp(rvs, 5.0)
|
Ttest_1sampResult(statistic=array([-0.01631806, -0.25538594]), pvalue=array([0.98701349, 0.79895486]))
拒绝原假设——均值不等于5
1
| stats.ttest_1samp(rvs, 0.0)
|
Ttest_1sampResult(statistic=array([4.6432588 , 4.92166191]), pvalue=array([1.05510059e-05, 3.42688414e-06]))
第一行数均值等于5,第二行数均值不等于0
axis=0按列运算,axis=1按行运算
1
| stats.ttest_1samp(rvs.T,[5.0,0.0],axis=1)
|
Ttest_1sampResult(statistic=array([-0.01631806, 4.92166191]), pvalue=array([9.87013492e-01, 3.42688414e-06]))
两独立样本t检验-ttest_ind
生成数据
1 2 3 4
| np.random.seed(12345678)
rvs1 = stats.norm.rvs(loc=5,scale=10,size=500) rvs2 = stats.norm.rvs(loc=5,scale=10,size=500)
|
当两总体方差相等时,即具有“方差齐性”,可以直接检验
不拒绝原假设——两总体均值相等
1
| stats.ttest_ind(rvs1,rvs2)
|
Ttest_indResult(statistic=0.26833823296238857, pvalue=0.788494433695651)
当不确定两总体方差是否相等时,应先利用levene检验,检验两总体是否具有方差齐性。
1
| stats.levene(rvs1, rvs2)
|
LeveneResult(statistic=0.9775501222315258, pvalue=0.323044034693146)
p值远大于0.05,认为两总体具有方差齐性。
如果两总体不具有方差齐性,需要将equal_val参数设定为“False”。
需注意的情况:
如果两总体具有方差齐性,错将equal_var设为False,p值变大
1
| stats.ttest_ind(rvs1,rvs2, equal_var = False)
|
Ttest_indResult(statistic=0.26833823296238857, pvalue=0.7884945274950106)
两总体方差不等时,若没有将equal_var参数设定为False,则函数会默认equal_var为True,这样会低估p值
1 2 3
| rvs3 = stats.norm.rvs(loc=5, scale=20, size=500) stats.ttest_ind(rvs1, rvs3, equal_var = False)
|
Ttest_indResult(statistic=-0.46580283298287956, pvalue=0.6414964624656874)
1 2
| stats.ttest_ind(rvs1, rvs3)
|
Ttest_indResult(statistic=-0.46580283298287956, pvalue=0.6414582741343561)
当两样本数量不等时,equal_val的变化会导致t统计量变化
rvs1:来自总体——均值5,方差10,样本数500
rvs4:来自总体——均值5,方差20,样本数100
两总体不具有方差齐性,应设定equal_var=False
1 2 3
| rvs4 = stats.norm.rvs(loc=5, scale=20, size=100) stats.ttest_ind(rvs1, rvs4)
|
Ttest_indResult(statistic=-0.9988253944278285, pvalue=0.3182832709103878)
1
| stats.ttest_ind(rvs1, rvs4, equal_var = False)
|
Ttest_indResult(statistic=-0.6971257058465435, pvalue=0.4871692772540187)
不同均值,不同方差,不同样本量的t检验
错误的检验:未将equal_var设定为False
1 2
| rvs5 = stats.norm.rvs(loc=8, scale=20, size=100) stats.ttest_ind(rvs1, rvs5)
|
Ttest_indResult(statistic=-1.467966985449067, pvalue=0.14263895620529113)
正确的检验:
1
| stats.ttest_ind(rvs1, rvs5, equal_var = False)
|
Ttest_indResult(statistic=-0.9436597361713308, pvalue=0.3474417033479409)
配对样本t检验
1
| np.random.seed(12345678)
|
不拒绝原假设,认为rvs1 与 rvs2 所代表的总体均值相等
1 2 3
| rvs1 = stats.norm.rvs(loc=5,scale=10,size=500) rvs2 = (stats.norm.rvs(loc=5,scale=10,size=500) + stats.norm.rvs(scale=0.2,size=500)) stats.ttest_rel(rvs1,rvs2)
|
Ttest_relResult(statistic=0.24101764965300979, pvalue=0.8096404344581155)
拒绝原假设,认为rvs1 与 rvs3所代表的总体均值不相等
1 2
| rvs3 = (stats.norm.rvs(loc=8,scale=10,size=500) + stats.norm.rvs(scale=0.2,size=500)) stats.ttest_rel(rvs1,rvs3)
|
Ttest_relResult(statistic=-3.9995108708727924, pvalue=7.308240219166128e-05)
你的支持是我写作的莫大鼓励