使用excel的Student T.TEST(学生T检验)和Z.TEST计算不方便,使用python的包scipy可以方便实现计算,但是网上有参考价值的资料少,特此总结源代码,直接展示常用方法。
一、T-TEST
from scipy.stats import ttest_1samp, ttest_ind, ttest_rel
import scipy
from scipy import stats
上面是常用的导入,下边对如何使用进行说明。
rvs1 = stats.norm.rvs(loc=600, scale=13.14, size=(100))
使用上一行代码可以生成平均值600,标准差13.14的100个numpy格式的数组。
ttest_1samp(rvs1, 606.8)
如何你想判断这个数组是否是均值为606.8可以执行上一行代码。零假设(H0):平均值是606.8。结果如下:
Ttest_1sampResult(statistic=-5.248931487366472, pvalue=8.740647032540755e-07)
可以看到pvalue<0.05(95%置信区间),可以否定原假设,即平均值不是606.8,同时可以设置600的均值会发现,pvalue大于0.05,即不能否定零假设(接受零假设)。
ttest_1samp(rvs1, 600)
Ttest_1sampResult(statistic=-0.6284560569204097, pvalue=0.5311524646461774)
同时,也可以判断2组数据是否独立。结果如下。
rvs2 = np.array([587, 602, 627, 610, 619, 622, 605, 608, 596, 592])
stats.ttest_ind(rvs1, rvs2)
Ttest_indResult(statistic=-1.5961716809020776, pvalue=0.11337255170409642)
可以看到,pvalue>0.05,即不能否定零假设,2组数据是匹配样本。
同时,我们可以使用代码计算出95%的critical value。
scipy.stats.t.ppf(level_of_confidence, degree_of_freedom)
scipy.stats.t.ppf(0.95, 9)
第一个置信水平一般是95%,第二个是自由度,等于n-1(样本数量减1),可以求出结果是1.8331129326536333。
同时如果使用公式=(新样本均值-大样本均值)/(标准差/样本数量开方)计算出了t得分,可以用求出pvalue。
scipy.stats.t.sf(abs(t_score),degree_of_freedom)
scipy.stats.t.sf(abs(1.64), 9)
如此,可以求出结果0.0677128969326147。
同时,也可以附带参数equal_var代表不同方差。
a = np.array([99.3, 98.7, 100.5, 101.2, 98.3, 99.7, 99.5, 102.1, 100.5])
b = np.array([91.1, 93.7, 93.6, 96.1, 94.3, 92.2, 94.0, 95.7, 97.1])
print(st.ttest_ind(a, b, equal_var=False))
rel代表的是related samples。
print(st.ttest_rel(a, b))
二、Z-TEST
同理可以计算critical value,pvalue。
scipy.stats.norm.ppf(level_of_confidence)
scipy.stats.norm.sf(abs(z_score))
已知样本后,可以判断均值。
arr = np.array([650, 730, 510, 670, 480, 800, 690, 530, 590, 620, 710, 670, 640, 780, 650, 490, 800, 600, 510, 700])
print(sw.ztest(arr, value=690))
(-2.1891585528829745, 0.028585317966169962)
由上一行结果可知,不能接受690的均值。同时,也可以使用代码进行不等式判断,alternative是备选(H1),他的反面的H0,即均值是大于700。
sw.ztest(arr, value=700,