原文地址:http://blog.csdn.net/ariesjzj/article/details/7546930

现有两组样本数据,假如它们分别基于两套不同的方法,或者测于不同的设备,又或是出自两个人之手,如何证明它们有或没有显著性差别呢?当然可以拿个Excel表把数据画个图,然后找一堆人来投票,看觉得差不多还是觉得差得多的人哪方票数高。但终归这种做法有些主观,不够说明力。概率统计给出了一种更为客观的基于统计的方法,这里是一个Python的实现:

#!/usr/bin/python
# Paired difference hypothesis testing - Student's t-test
# Author:       Jin Zhuojun
# History:      Create      Tue May  8 16:12:21 CST 2012
import string
import math
import sys
from scipy.stats import  t
import matplotlib.pyplot as plt
import numpy as np
##############
# Parameters #
##############
ver = 1
verbose = 0
alpha = 0.05
def usage():
print """
usage: ./program data_file(one sample in one line)
"""
def main():
##########
# Sample #
##########
if (len(sys.argv) < 2):
usage()
sys.exit()
# f = open('./data.txt')
# f = open('./test.txt')
f = open(sys.argv[1])
try:
sample1_text = f.readline()
sample2_text = f.readline()
finally:
f.close()
if (verbose):
print("sample1 text: ", sample1_text)
print("sample2 text: ", sample2_text)
sample1_text_split = sample1_text.split()
sample2_text_split = sample2_text.split()
if (verbose):
print(sample1_text_split)
print(sample2_text_split)
print("len = ", len(sample1_text_split))
assert(len(sample1_text_split) == len(sample2_text_split))
sample_len = len(sample1_text_split)
sample1 = []
sample2 = []
for i in range(sample_len):
sample1.append(string.atof(sample1_text_split[i]))
sample2.append(string.atof(sample2_text_split[i]))
sample_diff = []
for i in range(sample_len):
sample_diff.append(sample1[i] - sample2[i])
if (verbose):
print("sample_diff = ", sample_diff)
######################
# Hypothesis testing #
######################
sample = sample_diff
numargs = t.numargs
[ df ] = [sample_len - 1,] * numargs
if (verbose):
print("df(degree of freedom, student's t distribution parameter) = ", df)
sample_mean = np.mean(sample)
sample_std = np.std(sample, dtype=np.float64, ddof=1)
if (verbose):
print("mean = %f, std = %f" % (sample_mean, sample_std))
abs_t = math.fabs( sample_mean / (sample_std / math.sqrt(sample_len)) )
if (verbose):
print("t = ", abs_t)
t_alpha_percentile = t.ppf(1 - alpha / 2, df)
if (verbose):
print("abs_t = ", abs_t)
print("t_alpha_percentile = ", t_alpha_percentile)
if (abs_t >= t_alpha_percentile):
print "REJECT the null hypothesis"
else:
print "ACCEPT the null hypothesis"
########
# Plot #
########
rv = t(df)
limit = np.minimum(rv.dist.b, 5)
x = np.linspace(-1 * limit, limit)
h = plt.plot(x, rv.pdf(x))
plt.xlabel('x')
plt.ylabel('t(x)')
plt.title('Difference significance test')
plt.grid(True)
plt.axvline(x = t_alpha_percentile, ymin = 0, ymax = 0.095,
linewidth=2, color='r')
plt.axvline(x = abs_t, ymin = 0, ymax = 0.6,
linewidth=2, color='g')
plt.annotate(r'(1 - $\alpha$ / 2) percentile', xy = (t_alpha_percentile, 0.05),
xytext=(t_alpha_percentile + 0.5, 0.09), arrowprops=dict(facecolor = 'black', shrink = 0.05),)
plt.annotate('t value', xy = (abs_t, 0.26),
xytext=(abs_t + 0.5, 0.30), arrowprops=dict(facecolor = 'black', shrink = 0.05),)
leg = plt.legend(('Student\'s t distribution', r'(1 - $\alpha$ / 2) percentile', 't value'),
'upper left', shadow = True)
frame = leg.get_frame()
frame.set_facecolor('0.80')
for i in leg.get_texts():
i.set_fontsize('small')
for l in leg.get_lines():
l.set_linewidth(1.5)
normalized_sample = [0] * sample_len
for i in range(0, sample_len):
normalized_sample[i] = (sample[i] - sample_mean) / (sample_std / math.sqrt(sample_len))
plt.plot(normalized_sample, [0] * len(normalized_sample), 'ro')
plt.show()
if __name__ == "__main__":
main()

注:因为matplotlib显示时坐标比例老是不对,所以画图的时候把坐标写死了。

把上面的脚本存为main.py,再如数据文件为data.txt(每行表示一组样本):

0.26    0.30    0.40    0.49    0.43    0.84    1.18    0.25    0.67
0.18    0.33    0.57    0.32    0.58    0.29    0.98    0.17    0.79

运行:

$ ./main.py data.txt

得到

这里假设null hypothesis为两组数据无显著性差异,alternative hypothesis为有显著性差异。如图,t value落在了拒绝域外,因此我们拒绝alternative hypothesis,接受null hypothesis,即两组数据无显著性差异。

[Python] 如何证明两组样本有显著性差异(t-test假设检验)相关推荐

  1. python如何检验显著性差异_[Python] 如何证明两组样本有显著性差异(t-test假设检验) | 学步园...

    现有两组样本数据,假如它们分别基于两套不同的方法,或者测于不同的设备,又或是出自两个人之手,如何证明它们有或没有显著性差别呢?当然可以拿个Excel表把数据画个图,然后找一堆人来投票,看觉得差不多还是 ...

  2. python计算相关性显著性p值_基于python实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...

  3. python代码大全p-基于python实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码 # TTest.py # -*- coding: utf-8 -*- ''' # ...

  4. graphpad两组t检验_SPSS如何比较样本两组样本的组内和组间差异(含GraphPad Prism绘图)...

    在生物医药统计分析中,经常会遇到这样一类问题.样本分了实验组和对照组,而又同时进行了一种干预手段,在干预前和干预后进行了分别测量数据.这时候既要考虑实验组和对照组之间的比较,又要考虑干预前和干预后的对 ...

  5. 检验两组数据是否显著差异_SPSS非参数两个相关样本检验

    01 原理与方法 两个相关样本检验的方法主要有:Wilcoxon检验.Sign(符号)检验.McNemar检验和Marginal Homogeneity(边际同质性)检验等. Sign(符号)检验 配 ...

  6. R 两组样本t检验 wilcoxon检验、卡方、fisher精确检验

    一般统计方法R实现 文章目录 一.读入数据 二.连续性变量 1.正态性和方差齐性检验 2.描述统计量 3.独立样本t检验和wilcoxon秩和检验 三.四格表卡方或fisher精确检验(OR[95%C ...

  7. Adonis结果P值小于0.05,一定代表两组样品物种构成差异显著吗?

    前情回顾 方差分析基本概念:方差分析中的"元"和"因素"是什么? PERMANOVA原理解释:这个统计检验可用于判断PCA/PCoA等的分群效果是否显著! 实战 ...

  8. 使用python代码区分两个文档的差异,并将差异内容输出

    使用 python 代码来区分两个文档的差异,并将差异内容输出,可以使用 difflib 库. 首先,需要安装 difflib 库,可以使用以下命令安装: pipinstall difflib 然后, ...

  9. python多线程队列两组数据_python 多线程2-队列同步

    让我们考虑更复杂的一种场景:产品是各不相同的.这时只记录一个数量就不够了,还需要记录每个产品的细节.很容易想到需要用一个容器将这些产品记录下来. Python的Queue模块中提供了同步的.线程安全的 ...

最新文章

  1. XLS封装成EXE制作全攻略
  2. Linux安装及服务控制
  3. 阿里云联合中国信通院发布《云计算开放应用架构》标准
  4. 菏泽合村并居促土地流转-农业大健康·万祥军:集约谋定高效
  5. [改善Java代码]自由选择字符串拼接方法
  6. [SpringSecurity]web权限方案_用户授权_自定义403页面
  7. 【数据结构与算法】广度优先遍历(BFS) 深度优先遍历(DFS)
  8. wcf 返回图片_wcf http 返回图片
  9. 【EOJ Monthly 2018.10 - A】oxx 的小姐姐们(模拟,水题,填充矩阵,输出格式有坑)
  10. 【原】Mysql存储关联数组
  11. 谷歌提出“数据回波”榨干GPU空闲时间,训练速度提升3倍多
  12. “聆听”升级,阿里云智能喜迎首席聆听官
  13. eclipse 的Java Resource文件夹显示有错,可是文件夹下面的文件没有提示错误,这是怎么回事?怎么解决?
  14. 初学django框架
  15. java写http接口,java如何写一个http接口?实例详解
  16. 基于 Roslyn 实现代码动态编译
  17. 直播软件搭建直播服务架构
  18. 微信卡券新功能开放公告
  19. 塔塔露也能学会的算法(2) | 我有背包你有手么
  20. FinClip 8月小报丨小程序转 App 支持增加第三方 SDK 配置

热门文章

  1. mysql 设置计算列_mysql – 创建计算列
  2. 【JAVA】读取excel导入数据库,形成树状结构
  3. Noise-contrastive estimation简介
  4. 针对学生的计算机管理软件,计算机软件在高校学生管理系统中的应用
  5. 基于51单片机红外热释电人体感应蓝牙防盗报警器系统设计
  6. 安利一款Python开发的仿Linux树形显示目录tree命令
  7. RDM连接阿里云服务器的Redis
  8. 黑苹果安装跑码是什么意思?
  9. 火影抽卡模拟器1.0.5[极速版]
  10. 网络安全学习资源分享