Python利用scipy实现T-TEST和Z-TEST源代码

使用excel的T.TEST和Z.TEST计算不方便,使用python的包scipy可以方便实现计算,但是网上有参考价值的资料少,特此总结源代码,直接展示常用方法。一、T-TESTfrom scipy.stats import ttest_1samp, ttest_ind, ttest_relimport scipyfrom scipy import stats上面是常用的导入,下边对如何使用进行说明。rvs1 = stats.norm.rvs(loc=600, scale=13.14, siz
摘要由CSDN通过智能技术生成

使用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,

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baozouxiaoxian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值