【统计学精要】:使用 Python 实现的统计检验— 1/10

news2024/11/24 19:11:24

一、介绍

        欢迎来到“掌握 Python 统计测试:综合指南”,它将介绍本手册中您需要熟悉使用 Python 的所有基本统计测试和分析方法。本文将为您提供统计测试及其应用的全面介绍,无论您是新手还是经验丰富的数据科学家。

        使用来自现实世界的实际示例和 Python 代码片段来帮助您理解这些想法,我们将涵盖从假设测试和作为其中一部分进行的测试的所有内容。所以让我们开始吧!

二、Statistics

统计学研究的重点是收集,组织,分析,解释和呈现数据。在将统计应用于科学、工业或社会问题时,通常从统计总体或要研究的统计模型开始。

三、数学中的统计类型

统计数据主要分为两类:

  1. 描述统计学
  2. 推论统计

3.1 描述统计学

        使用提供的观测结果以这种统计形式汇总数据。汇总是使用平均值或标准差等指标的总体样本的表示形式。
使用表、图形和汇总统计量,描述性统计量是一种排列、描绘和描述数据集合的方法。考虑一个城市使用互联网或电视的人数。

        描述性统计也分为四个不同的类别:

  1. 频率测量
  2. 色散测量
  3. 集中趋势的衡量标准
  4. 位置测量

        频率测量显示给定数据发生的频率。离差度量包括范围、方差和标准差。它显示了数据是如何传播的。数据的平均值、中位数和众数是主要趋势。百分位和四分位数等级由位置度量描述。

3.2 推论统计

描述性统计量是使用这种类型的统计量来解释的。换句话说,在收集、检查和总结数据之后,我们使用这些统计数据来解释数据的重要性。或者,换句话说,它用于从易受随机误差(如观测误差、抽样方差等)影响的数据中得出推论。

在推论统计的帮助下,我们可以使用从样本中收集的数据来推断有关人口的结论。它使我们能够提出超出手头事实或数据范围的主张。使用虚构的研究创建估计,作为说明。

四、数据科学中的统计测试

        统计检验用于假设检验。 它们可用于确定预测变量和结果变量是否具有统计显著性关系。应估计两组或多组之间的差异。如果数据呈正态分布,则使用参数检验。

统计检验分为两大类:

  1. 参数
  2. 非参数

        要假设或检查的假设:

        一、观察的独立性: 单独的观察值(每个变量条目)彼此无关(例如,对单个患者重复相同的测试会产生非独立的测量值,即重复测量值)。

        二、数据正态性:数据服从正态分布。只有定量数据才需要此假设。(有关更多详细信息,另请参阅此处)

        三. 方差的同质性:被比较的每个组都有相似的方差(即分数围绕平均值的分布或“散布”)。如果一组的变异明显大于其他组,则检验检测差异的“功效”将降低。

        或者,如果您的数据不符合观察独立性的前提,则可以采用考虑这种情况的检验(即重复测量检验)。

        相反,如果您的数据不满足正态性或方差齐性假设,则可以执行非参数统计检验,这样您就可以在没有这两个假设的情况下进行比较。

在 Python 中选择统计测试的指南

图例.2 — 统计检验选择指南

以下类型的测试用代码解释:

  1. Z — 测试
  2. T — 测试
  3. 方差分析测试
  4. 卡方检验
  5. 相关性测试

五、Z 测试

Z 检验是一种统计检验,用于在总体标准差已知时将样本均值与总体均值进行比较。 简单来说,

  1. 它是一种统计检验,用于确定当方差已知且样本数量较大时,两个总体均值是否不同。
  2. 它适用于 z 统计量服从正态分布的假设检验。
  3. Z 统计量或 Z 分数是表示 Z 检验结果的数字。
统计中的 Z 检验
图例.3 — 统计中的 Z 检验

        为了理解 Z 检验,让我们看一个真实世界的例子。假设一家鞋业公司声称他们的鞋类的典型寿命是 500 天。我们收集了50双鞋的样本来验证这一断言,我们发现平均寿命为490天,标准差为25天。我们现在可以运行 Z 测试以查看样本是否支持公司的说法。

        何时使用 Z 检验:

  • 样本数量应大于 30。否则,我们应该使用 t 检验。
  • 样本应从总体中随机抽取。
  • 应该知道总体的标准差。
  • 从总体中抽取的样本应彼此独立。
  • 数据应呈正态分布,但对于大样本量,假定数据具有正态分布。

        执行 Z 检验的步骤:

  • 首先,确定零假设和替代假设。
  • 确定显著性水平 (∝)。
  • 使用 在 z 检验中查找 z 的临界值。
  • 计算 z 检验统计量。下面是用于计算 z 检验统计量的公式。
图片.4 — Z 分数公式

        如果 p 值低于阈值(表示小于),则可以推断输入变量和目标变量之间存在统计显著性关系。

        否则,您可以推断预测变量和结果变量之间没有统计显著性关系。

5.1 Python 中的一个示例 Z 测试

        假设某个人群中的智商呈正态分布,平均值为 μ = 100,标准差为 σ = 15。

        一位研究人员想知道一种新药是否会影响智商水平(是或否[分类]),因此他招募了20名患者进行尝试并记录他们的智商水平。

Python 中的一个示例 Z 测试
图 5 — 一个样本 Z 测试

以下代码演示如何在 Python 中执行单样本 z 检验,以确定新药是否会导致智商水平的显着差异:

from statsmodels.stats.weightstats import ztest as ztest
"""
H0 : New Drug not Affects the IQ
H1 : New Drug Does Affects the IQ
"""

#enter IQ levels for 20 patients
data = [88, 92, 94, 94, 96, 97, 97, 97, 99, 99,
        105, 109, 109, 109, 110, 112, 112, 113, 114, 115]

#perform one sample z-test
ztest(data, value=100)

        一个样本 z 检验的检验统计量为 1.5976,对应的 p 值为 0.1101。

        由于此 p 值不小于 .05,因此我们没有足够的证据来否定原假设。换句话说,新药不会显着影响智商水平。

5.2 Python 中的两个示例 Z 测试

        假设已知两个不同城市中个人的智商水平以已知的标准差呈正态分布。

        研究人员从每个城市选择20人的基本随机样本,并记录他们的智商水平,以确定城市A和B中人们的平均智商水平是否彼此不同。

统计中的 Z 检验
图 6 — 两个样本 Z 测试

        以下代码演示如何在 Python 中执行双样本 z 检验,以确定两个城市之间的平均 IQ 水平是否不同:


from statsmodels.stats.weightstats import ztest as ztest

"""
H0 : Mean is not Different
H1 : Mean is Different
"""

#enter IQ levels for 20 individuals from each city
cityA = [82, 84, 85, 89, 91, 91, 92, 94, 99, 99,
         105, 109, 109, 109, 110, 112, 112, 113, 114, 114]

cityB = [90, 91, 91, 91, 95, 95, 99, 99, 108, 109,
         109, 114, 115, 116, 117, 117, 128, 129, 130, 133]

#perform two sample z-test
ztest(cityA, cityB, value=0) 

        两个样本 z 检验的检验统计量为 -1.9953,对应的 p 值为 0.0460。

        由于此 p 值小于 .05,因此我们有足够的证据来否定原假设。换句话说,两个城市的平均智商水平存在显着差异。

六、T 检验

        T 检验统计检验用于确定两组均值之间是否存在显著差异。相对于两组均值之间的变异,它估计分组内的方差。当样本量较小且总体标准差未知时,此检验特别有用。

图片.7 — T 检验
  1. T 检验是一种参数化推论统计方法,用于比较两个不同组之间的均值(双样本 t 检验)或与特定值(单样本 t 检验)。
  2. 在 t 检验中,检验统计量遵循原假设下的 t 分布(连续概率分布的类型)。
  3. t 检验是专门为小样本量数据 (n 30) 创建的,而 z 检验需要更高的样本量(t 和 z 分布与较大的样本量相似,例如 n=30)。t 检验也适用于样本量非常小 (n 5) 的数据。对于样本数量有限的数据集,t 检验会产生更保守的结果。
  4. T 检验有三种主要类型:一个样本 t 检验、双样本 t 检验(非配对或独立)和配对 t 检验。
  5. 单样本 t 检验将样本均值与假设值进行比较,而双样本 t 检验(也称为独立或未配对 t 检验)比较两个独立组的均值。在配对 t 检验中比较两个因变量之间的差异。

        一个样本 t 检验

  • 一个样本 t 检验(单样本 t 检验)用于将样本均值(总体中的随机样本)与特定值(总体的假设或已知均值)进行比较。
  • 例如,一个球的直径为 5 厘米,我们要检查从生产线上随机抽取的样本(例如 50 个球)中球的平均直径是否与已知尺寸不同。

        假设

  • 因变量应具有近似正态分布(夏皮罗-威尔克斯检验)
  • 观测值彼此独立

        假设

  • 原假设:样本均值等于假设或已知总体均值
  • 备择假设:样本均值不等于假设或已知总体均值(双尾或双侧)
  • 备择假设:样本均值大于或小于假设或已知总体均值(单尾或单侧)。
T 检验公式
图例.8 - T检验公式

from scipy import stats as st
from bioinfokit.analys import get_data
# load dataset as pandas dataframe
df = get_data('t_one_samp').data
df.head(2)
# output
#size
#0  5.739987
#1  5.254042

# t test using scipy
a =  df['size'].to_numpy()
# use parameter "alternative" for two-sided or one-sided test
st.ttest_1samp(a=a, popmean=5)
# Using only Bioinfokit
from bioinfokit.analys import stat
res = stat()
res.ttest(df=df,test_type=1, res='size',mu=5)
print(res.summary)

        从一个样本 t 检验获得的 p 值不显著 (p > 0.05),因此,我们得出结论,随机样本中球的平均直径等于 5 cm。

6.1 两个样本 t 检验

        双样本(未配对或独立)t 检验通过比较两个独立组的均值是否相等或统计上不同来评估它们。在双样本 t 检验中,通常计算来自两组的样本均值,并为从中选择两组的总体均值(未知均值)形成结论。

        例如,我们有两种不同的植物基因型(基因型A和基因型B),我们想看看基因型A的产量是否与基因型B有很大不同。

        假设

  • 原假设:两个组均值相等
  • 备择假设:两个组均值不同(双尾或双侧)
  • 备择假设:一个组的平均值大于或小于另一个组(单尾或单侧)

        假设

  • 两组中的观测值具有近似正态分布(夏皮罗-威尔克斯检验)
  • 方差的同质性(治疗组之间的方差相等)(莱文或巴特利特检验)
  • 两组从同一人群中彼此独立地抽样。

        注意:当样本数量较大 (n ≥ 30) 且两组中样本数相等 (n1 = n2) 时,两个样本 t 检验对方差的正态性和同质性假设相对稳健。

        如果样本数量较小且不服从正态分布,则应使用非参数曼-惠特尼 U 检验。

        两个样本(独立)t检验公式 -

图 9 — 双样本 T 检验

        如果方差相等,则双样本 t 检验和韦尔奇检验(不等方差 t 检验)的性能相同(就类型 I 错误率而言)并且具有相似的功效。

        计算 Python 中的两个样本 t 检验:

# Perform two sample t-test using SciPy
# install bioinfokit as !pip install bioinfokit
!pip install bioinfokit
from scipy import stats as st
from bioinfokit.analys import get_data
# load dataset as pandas dataframe
df = get_data('t_ind_samp').data
df.head(2)

a = df.loc[df['Genotype'] == 'A', 'yield'].to_numpy()
b = df.loc[df['Genotype'] == 'B', 'yield'].to_numpy()
st.ttest_ind(a=a, b=b, equal_var=True)

# Perform two sample t-test using bioinfokit
from bioinfokit.analys import stat
res = stat()
# for unequal variance t-test (Welch's t-test) set evar=False
res.ttest(df=df, xfac="Genotype", res="yield", test_type=2, evar=False)
print(res.summary)

        注意:尽管当两组的样本数量不相同时可以进行 t 检验,但每组中具有相等的样本数量以提高 t 功效会更有效。测试的

        从t检验获得的p值是显著的(p <0.05),因此,我们得出结论,基因型A的产量与基因型B显着不同。

6.2 配对 t 检验

  • 配对t检验用于比较同一受试者的一对因变量之间的差异
  • 例如,我们有植物品种A,想比较施用一些肥料前后A的产量。
  • 注意:配对 t 检验是对两个因变量之间差异的单样本 t 检验

        假设

  • 原假设:两个因变量之间没有差异(差值 = 0)
  • 备择假设:两个因变量(双尾或双侧)之间存在差异
  • 备择假设:大于或小于零的两个响应变量之间的差异(单尾或单侧)

        假设

  • 两个因变量之间的差异遵循近似正态分布(夏皮罗-威尔克斯检验)
  • 自变量应具有一对因变量
  • 两个因变量之间的差异不应具有异常值
  • 观测值彼此独立地采样

统计学中的配对 t 检验

图例.10 — 统计中的配对 t 检验

# install bioinfokit as !pip install bioinfokit
from bioinfokit.analys import get_data, stat
# load dataset as pandas dataframe
# the dataset should not have missing (NaN) values. If it has, it will omitted
df = get_data('t_pair').data
df.head(2)

res = stat()
res.ttest(df=df, res=['AF', 'BF'], test_type=3)
print(res.summary)

        t检验得到的p值显著(p<0.05),因此,我们得出结论,施肥显著提高了植物品种A的产量。

        注意:如果您有部分配对的数据,则可以对所有未配对的观测值执行配对 t 检验,或者通过将两个因变量视为两个单独的样本来使用独立 t 检验。然而,这两种临时办法都不合适,因为它们不能满足基本条件,并可能导致对方差的偏斜估计和信息丢失。

  • 如果效应量较大且数据遵循 t 检验假设,则 t 检验可以应用于极小样本数量(n = 2 至 5)。请记住,较大的样本量优于较小的样本量。
  • 对于配对 t 检验,建议具有较高的对内相关性 (r > 0.8),以获得小样本量数据的高统计功效 (>80%)。
  • 当样本数量较大 (n ≥ 30) 时,t 检验对方差的正态性和同质性假设相对稳健。

        在下一篇博客中,我将讨论卡方检验、方差分析和相关性检验

七、结语

        通过使用 Python 深入学习 T 检验和 Z 检验,您可以掌握数据分析并开发可靠的结果。Z 检验用于评估有关总体均值的假设,而 T 检验用于发现两组之间是否存在显著差异。凭借对这些统计测试的经验和工作掌握,您将能够处理具有挑战性的问题并为您的公司提供有见地的建议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/845368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux学习之sed替换命令讲解

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;bash --version可以看到bash版本是4.2.46(2)。 sed&#xff08;sed strem editor&#xff09;可以理解为行编辑器&#xff0c;但它…

C++ Lambda表达式的完整介绍

一、Lambda表达式概述 c在c11标准中引入了lambda表达式&#xff0c;一般用于定义匿名函数&#xff0c;lambda表达式&#xff08;也称为lambda函数&#xff09;是在调用或作为函数参数传递的位置处定义匿名函数对象的便捷方法。通常&#xff0c;lambda用于封装传递给算法或异步…

SpringBoot对接OpenAI

SpringBoot对接OpenAI 随着人工智能技术的飞速发展&#xff0c;越来越多的开发者希望将智能功能集成到自己的应用中&#xff0c;以提升用户体验和应用的功能。OpenAI作为一家领先的人工智能公司&#xff0c;提供了许多先进的自然语言处理和语言生成模型&#xff0c;其中包括深…

eclipse Java Code_Style Code_Templates

Preferences - Java - Code Style - Code Templates Eclipse [Java_Code_Style_Code_Templates_ZengWenFeng] 2023.08.07.xml 创建一个新的工程&#xff0c;不然有时候不生效&#xff0c;旧项目可能要重新导入eclipse 创建一个测试类试一试 所有的设置都生效了

【雕爷学编程】Arduino动手做(195)---HT16k33 矩阵 8*8点阵屏模块5

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

Nginx(2)

目录 1.安装Nginx1.yum安装2.编译安装3.Nginx命令 2.配置文件详解 1.安装Nginx 1.yum安装 [rootdocker ~]# yum -y install nginx通过 rpm -ql nginx 查看安装信息 2.编译安装 2.1安装所需要的依赖 yum install -y gcc gcc-c make libtool wget pcre pcre-devel zlib zlib-…

4. C++构造函数和析构函数

一、对象的初始化和清理 C中的面向对象来源于生活&#xff0c;每个对象也都会有初始设置以及对象销毁前的清理数据的设置&#xff0c;对象的初始化和清理也是两个非常重要的安全问题 一个对象或者变量没有初始状态&#xff0c;对其使用后果是未知的使用完一个对象或变量&#x…

CentOS7安装Maven详细教程

&#x1f60a; 作者&#xff1a; Eric &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_47316183?typeblog &#x1f389; 主题&#xff1a;CentOS7安装Maven详细教程 ⏱️ 创作时间&#xff1a; 2023年08月06日 第一步&#xff1a;上传或下载安装包&#x…

【Element】el-cascader 级联选择器

ElementUI label 为空的不展示 将children设为undefined dg(list) {list.forEach(item > {item.label item.nameitem.value item.iditem.children item.childrenList.length ! 0 ? item.childrenList : undefinedif (item.children) {this.dg(item.children)}}) },第…

拦截器对接口细粒度权限校验

文章目录 一、逻辑分析二、校验规则1.规则类型2.规则划分3.规则配置信息4.规则案例说明5.规则加载 三、拦截器定义1.自定义拦截器2.注册拦截器 四、获取请求参数1.获取get提交方式参数2.获取post提交方式参数&#xff08;1&#xff09;定义RequestWrapper类&#xff08;2&#…

pinctrl_desc结构体注册

pinctrl_desc结构体注册 文章目录 pinctrl_desc结构体注册pinctrl_registerpinctrl_register_pins注册所有的引脚 pinctrl_register 构建好struct pinctrl_desc结构以后&#xff0c;会调用pinctrl_register函数注册一个pinctrl控制器&#xff0c;得到一个pinctrl_dev struct …

【大数据】Flink 详解(二):核心篇 Ⅰ

Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅰ 14、Flink 的四大基石是什么&#xff1f; ​ Flink 的四大基石分别是&#xff1a; Checkpoint&#xff08;检查点&#xff09;State&#xff08;状态&#xff09;Time&#xff08;时间&#xff09;Window&#xff…

【机器学习2】什么是Jupyter notebook 新手使用Jupter notebook

什么是Jupyter notebook? Jupyter Notebook&#xff08;此前被称为 IPython notebook&#xff09;是一个交互式笔记本&#xff0c;支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序&#xff0c;便于创建和共享程序文档&#xff0c;支持实时代码&#x…

Redis 7.X Linux 环境安装

Redis 简介 作为一名开发人员&#xff0c;想必大家对Redis一定是耳熟能详&#xff0c;因此在此只做简单介绍。 Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value内存数据库&#xff0c;它提…

命令模式(C++)

定义 将一个请求(行为)封装为一个对象&#xff0c;从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 应用场景 在软件构建过程中&#xff0c;“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合——比…

iPhone苹果手机地震预警功能怎么开启?

iPhone苹果手机地震预警功能怎么开启&#xff1f; 1、打开iPhone苹果手机设置&#xff1b; 2、在iPhone苹果手机设置内找到辅助功能&#xff1b; 3、在辅助功能内找到触控&#xff1b; 4、在iPhone苹果手机辅助功能触控内找到振动&#xff0c;如果是关闭状态请启&#xff1b; …

jdk1.7与jdk1.8中String.split()方法问题

split切割字符串的坑&#xff0c;会有索引越界的风险。 在jdk1.8中 public static void main(String[] args) { String card "abcdefgh"; System.out.println(card.split("").length); } 结果&#xff1a;8 在jdk1.7中&#xff0c;同样的代码 …

kubectl 详解(陈述式资源管理与声明式资源管理)

目录 一、kubectl简介 二、kubectl基础命令 三、基本信息查看 1.查看标签信息 ​2. 查看 master 节点状态 3. 查看命名空间 4.创建、删除命名空间app 5.在命名空间kube-public 创建副本控制器&#xff08;deployment&#xff09;来启动Pod&#xff08;nginx-www&#xf…

网关 GateWay 的使用详解、路由、过滤器、跨域配置

一、网关的基本概念 SpringCloudGateway网关是所有微服务的统一入口。 1.1 它的主要作用是&#xff1a; 反向代理&#xff08;请求的转发&#xff09; 路由和负载均衡 身份认证和权限控制 对请求限流 1.2 相比于Zuul的优势&#xff1a; SpringCloudGateway基于Spring5中…

libcurl网络库的函数接口使用

文章目录 1、libcurl简介2、libcurl的使用3、函数简介4、 curl_easy_setopt函数部分选项介绍5、curl_easy_perform 函数说明&#xff08;error 状态码&#xff09;6、简单实例,包含库文件&#xff0c;头文件即可 1、libcurl简介 libcurl是一个跨平台的网络协议库&#xff0c;支…