单样本T检验|独立样本T检验|配对样本T检验(绘图)

news/2024/7/24 10:24:51 标签: 人工智能, 开发语言, python, 概率论, 算法

学生 t 检验的基本思想是通过比较两组数据的均值以及它们的方差来判断是否存在显著差异。下面更详细地解释了学生 t 检验的基本思想:

  1. 均值比较:学生 t 检验的首要目标是比较两组数据的均值。我们通常有一个零假设(null hypothesis),该假设声称两组数据的均值相等,即没有显著差异。备择假设则声称两组数据的均值不相等,即存在显著差异。

  2. 方差比较:除了均值,t 检验还考虑了数据的方差。如果两组数据的方差差异很大,那么在比较均值时需要考虑这个差异,以确保显著性测试的准确性。

  3. t 统计量:为了比较均值和方差之间的差异,t 检验计算了一个称为 t 统计量的值。这个统计量表示两组数据均值之间的差异相对于它们的方差的一个度量。

  4. p 值:t 统计量用于计算一个概率值,称为 p 值。p 值表示在零假设成立的情况下,观察到如此极端结果的概率。较小的 p 值意味着观察到的差异更显著。

  5. 显著性水平:通常,研究人员会选择一个显著性水平,例如0.05,作为判断是否拒绝零假设的阈值。如果 p 值小于显著性水平,就拒绝零假设,认为存在显著差异。

单样本T检验、独立样本T检验和配对样本T检验是统计学中用于比较样本均值之间差异的常见方法,它们适用于不同的场景:

  1. 单样本T检验:

    • 场景:用于比较一个样本的均值是否与已知的总体均值或理论值有显著差异。
    • 示例:你想知道一群学生的平均考试成绩是否显著高于全国平均分(已知的总体均值)。
  2. 独立样本T检验:

    • 场景:用于比较两个独立样本(不相关的样本)的均值是否有显著差异。
    • 示例:你想知道男性和女性在某一项测试中的平均得分是否存在显著差异,你会将男性和女性的得分作为两个独立样本进行比较。
  3. 配对样本T检验:

    • 场景:用于比较同一组样本在两个不同条件下的均值差异,这些条件是相关的。
    • 示例:你想知道一组患者在治疗前和治疗后的体重是否存在显著差异,你会将每个患者的治疗前和治疗后的体重数据配对进行比较。

这些T检验方法都用于检验均值之间的显著性差异,但在不同的数据情境下使用。选择适当的T检验方法取决于你的研究设计和数据类型。

在Python中,你可以使用不同的库来执行各类T检验。常用的库包括NumPy(用于数据处理)、SciPy(用于科学计算和统计分析)以及StatsModels(用于统计建模)。以下是针对不同T检验的Python实现示例:

单样本T检验:

python">import numpy as np
from scipy import stats

# 创建样本数据
data = np.array([34, 45, 28, 56, 40, 30, 48, 55, 37, 42])

# 假设的总体均值
population_mean = 45

# 执行单样本T检验
t_statistic, p_value = stats.ttest_1samp(data, population_mean)

# 输出结果
print("T统计量:", t_statistic)
print("P值:", p_value)

 独立样本T检验:

python">import numpy as np
from scipy import stats

# 创建两组独立样本数据
group1 = np.array([34, 45, 28, 56, 40])
group2 = np.array([30, 48, 55, 37, 42])

# 执行独立样本T检验
t_statistic, p_value = stats.ttest_ind(group1, group2)

# 输出结果
print("T统计量:", t_statistic)
print("P值:", p_value)

配对样本T检验:

python">import numpy as np
from scipy import stats

# 创建配对样本数据
before = np.array([68, 72, 63, 71, 73])
after = np.array([70, 74, 65, 72, 75])

# 执行配对样本T检验
t_statistic, p_value = stats.ttest_rel(before, after)

# 输出结果
print("T统计量:", t_statistic)
print("P值:", p_value)

当你执行不同类型的T检验时,有几个关键步骤和考虑因素,我将继续深入说明这些方面

  1. 收集和准备数据:

    • 在执行T检验之前,首先需要收集和准备你的样本数据。确保数据满足T检验的前提条件,即数据应该是连续的,并且满足正态性和方差齐性的假设。
  2. 假设检验:

    • 在执行T检验时,你需要明确你的零假设(H0)和备择假设(H1)。
    • 对于单样本T检验,H0通常是样本均值等于某个特定值。
    • 对于独立样本T检验,H0通常是两组样本均值相等,而H1是两组样本均值不相等。
    • 对于配对样本T检验,H0通常是配对前后样本均值相等,而H1是均值不相等。
  3. 计算T统计量和P值:

    • 使用适当的Python库函数(如SciPy中的ttest_1sampttest_indttest_rel)来计算T统计量和P值。
    • T统计量用于衡量样本均值之间的差异,P值表示在零假设下观察到这种差异的概率。
  4. 解释结果:

    • 检查计算得到的P值。如果P值小于事先选择的显著性水平(通常为0.05),则可以拒绝零假设。
    • 如果P值大于显著性水平,那么不能拒绝零假设,表明没有足够的证据来支持备择假设。
  5. 报告结果:

    • 在报告研究结果时,提供T统计量、P值以及你的决策,即是拒绝还是不拒绝零假设。
    • 如果拒绝了零假设,解释结果的实际意义。
  6. 考虑效应大小:

    • 除了P值之外,还应该考虑效应大小。效应大小可以帮助你理解观察到的差异的实际重要性。
    • 常见的效应大小度量包括Cohen's d等。
  7. 检验前提条件:

    • 在执行T检验之前,还应该检验数据是否满足T检验的前提条件,如正态性和方差齐性。可以使用统计图和检验方法(如Shapiro-Wilk检验和Levene检验)来评估这些前提条件。

以上是执行T检验时的一般步骤和要考虑的重要事项。根据你的具体研究问题和数据,你可以选择适当类型的T检验并按照上述步骤进行分析。

------------------

在执行T检验之前,确保数据满足T检验的前提条件非常重要。这两个主要的前提条件是正态性和方差齐性。

  1. 正态性(Normality):

    • 正态性假设是指样本数据应该来自一个正态分布(或近似正态分布)。如果数据不满足正态性假设,T检验可能不可靠。
    • 你可以使用统计图形(如直方图和Q-Q 图)来可视化数据的分布,以及正态性检验方法(如Shapiro-Wilk检验、Kolmogorov-Smirnov检验)来检验数据的正态性。
  2. 方差齐性(Homogeneity of Variance):

    • 方差齐性假设是指不同样本的方差应该大致相等。如果不同组的方差明显不相等,T检验的结果可能不准确。
    • 方差齐性可以使用Levene检验或Bartlett检验来检验。

如果数据不满足这些前提条件,你可以考虑以下选项:

  • 数据不满足正态性但满足方差齐性:在这种情况下,你可以考虑使用非参数检验方法,如Wilcoxon符号秩检验(对应于单样本T检验)或Mann-Whitney U检验(对应于独立样本T检验)。

  • 数据不满足方差齐性:你可以使用修正的T检验方法,如Welch's T检验,它允许在方差不相等的情况下执行独立样本T检验。这个修正考虑了方差不齐的情况。

  • 数据不满足正态性和方差齐性:在这种情况下,非参数检验可能是更合适的选择。

确保在执行T检验之前,检查和报告数据是否满足这些前提条件,以确保你的统计分析结果的可信度。如果数据不满足这些条件,选择适当的替代方法来进行假设检验。

 正态性检验(Shapiro-Wilk检验):

python">import numpy as np
from scipy import stats

# 创建样本数据
data = np.array([34, 45, 28, 56, 40, 30, 48, 55, 37, 42])

# 执行Shapiro-Wilk正态性检验
statistic, p_value = stats.shapiro(data)

# 输出结果
print("Shapiro-Wilk统计量:", statistic)
print("P值:", p_value)

# 判断是否满足正态性假设
alpha = 0.05
if p_value > alpha:
    print("数据看起来满足正态性假设")
else:
    print("数据不满足正态性假设")

方差齐性检验(Levene检验):

python">import numpy as np
from scipy import stats

# 创建两组独立样本数据
group1 = np.array([34, 45, 28, 56, 40])
group2 = np.array([30, 48, 55, 37, 42])

# 执行Levene方差齐性检验
statistic, p_value = stats.levene(group1, group2)

# 输出结果
print("Levene统计量:", statistic)
print("P值:", p_value)

# 判断是否满足方差齐性假设
alpha = 0.05
if p_value > alpha:
    print("数据满足方差齐性假设")
else:
    print("数据不满足方差齐性假设")

对于小样本,Shapiro-Wilk检验通常比Kolmogorov-Smirnov检验更合适,因为Shapiro-Wilk检验对样本量的要求较小,而且在小样本情况下通常更具有统计功效(能够更准确地检测正态性假设的违背)。

Shapiro-Wilk检验的优势在于它可以有效地处理小样本,并且对于正态性的敏感性相对较高。它是许多统计学家和研究者首选的正态性检验方法,尤其是在小样本研究中。但请注意,对于非常小的样本,即使数据是正态分布的,Shapiro-Wilk检验也可能会因样本量不足而产生不显著的结果。

总之,对于小样本,建议使用Shapiro-Wilk检验来检验正态性,但也要谨慎解释结果,尤其是当样本数量非常有限时。在小样本情况下,始终考虑其他检验方法或可视化技巧来评估数据的正态性,例如正态概率图(Q-Q 图)或直方图。综合使用多种方法可以更全面地评估数据的分布特征。

python">import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
import seaborn as sns

# 生成一个示例数据集,替换成你的实际数据
data = np.random.normal(loc=0, scale=1, size=20)

# 正态性检验 - Shapiro-Wilk检验
stat, p = stats.shapiro(data)
print("Shapiro-Wilk检验统计量:", stat)
print("Shapiro-Wilk检验p值:", p)

# 可视化 - 正态概率图(Q-Q图)
stats.probplot(data, dist="norm", plot=plt)
plt.title("Q-Q Plot")
plt.show()

# 可视化 - 直方图
sns.histplot(data, kde=True)
plt.title("Histogram with Kernel Density Estimate")
plt.show()

 多种方式整合

python">import numpy as np
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as plt

data = np.random.normal(loc=12, scale=2.5, size=120)
df = pd.DataFrame({'Data': data})

# 描述性统计分析
mean = df['Data'].mean()
std_dev = df['Data'].std()
skewness = df['Data'].skew()
kurtosis = df['Data'].kurtosis()

print("均值:", mean)
print("标准差:", std_dev)
print("偏度:", skewness)
print("峰度:", kurtosis)

# 创建一个2x1的子图布局
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(6, 8))
# 可视化 - 正态概率图(Q-Q图)
stats.probplot(data, plot=ax1, dist='norm', fit=True, rvalue=True)
ax1.set_title("Q-Q Plot")
 
# 可视化 - 直方图
ax2.hist(data, bins=10, rwidth=0.8, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙
ax2.set_title("Histogram with Kernel Density Estimate")

# 调整子图之间的间距
plt.tight_layout()
# 显示图形
plt.show()

# 正态性检验 - Shapiro-Wilk检验
stat, p = stats.shapiro(data)
print("Shapiro-Wilk检验统计量:", stat)
print("Shapiro-Wilk检验p值:", p)

# Anderson-Darling检验
result = stats.anderson(df['Data'], dist='norm')
print("Anderson-Darling检验统计量:", result.statistic)
print("Anderson-Darling检验临界值:", result.critical_values)

# 执行单样本K-S检验,假设数据服从正态分布
statistic, p_value = stats.kstest(data, 'norm')
print("K-S检验统计量:", statistic)
print("K-S检验p值:", p_value)

---------------------

如果数据无法通过变换满足正态性假设,可以考虑使用非参数统计方法,如Wilcoxon秩和检验或Kruskal-Wallis检验,来进行假设检验。
Wilcoxon秩和检验(也称为Wilcoxon符号秩检验或Wilcoxon-Mann-Whitney检验)是一种非参数统计方法,用于比较两个独立样本的中位数是否存在显著差异。这个检验适用于不满足正态分布假设的数据。以下是使用Python进行Wilcoxon秩和检验的示例代码:

python">import numpy as np
from scipy.stats import wilcoxon

# 生成两个示例数据集,替换成你的实际数据
group1 = np.array([75, 80, 85, 90, 95])
group2 = np.array([60, 70, 75, 80, 85])

# 执行Wilcoxon秩和检验
statistic, p_value = wilcoxon(group1, group2)

# 输出检验结果
print("Wilcoxon秩和检验统计量:", statistic)
print("Wilcoxon秩和检验p值:", p_value)

# 判断显著性
alpha = 0.05  # 设置显著性水平
if p_value < alpha:
    print("拒绝原假设:两组数据的中位数存在显著差异")
else:
    print("无法拒绝原假设:两组数据的中位数没有显著差异")

 Kruskal-Wallis检验是一种非参数统计方法,用于比较三个或更多独立样本的中位数是否存在显著差异。与Wilcoxon秩和检验类似,Kruskal-Wallis检验也适用于不满足正态分布假设的数据。以下是使用Python进行Kruskal-Wallis检验的示例代码:

python">import numpy as np
from scipy.stats import kruskal

# 生成三个示例数据集,替换成你的实际数据
group1 = np.array([75, 80, 85, 90, 95])
group2 = np.array([60, 70, 75, 80, 85])
group3 = np.array([70, 75, 78, 82, 88])

# 执行Kruskal-Wallis检验
statistic, p_value = kruskal(group1, group2, group3)

# 输出检验结果
print("Kruskal-Wallis检验统计量:", statistic)
print("Kruskal-Wallis检验p值:", p_value)

# 判断显著性
alpha = 0.05  # 设置显著性水平
if p_value < alpha:
    print("拒绝原假设:至少有一组数据的中位数存在显著差异")
else:
    print("无法拒绝原假设:各组数据的中位数没有显著差异")


http://www.niftyadmin.cn/n/5058716.html

相关文章

python实现钉钉推送

python推送消息到钉钉python钉钉消息推送python钉钉机器人 import json import hashlib import base64 import hmac import os import time import requests from urllib.parse import quote_plusclass Messenger:def __init__(self, tokenos.getenv("DD_ACCESS_TOKEN&qu…

华为ac无线侧命令行配置思路和步骤

无线侧配置思路&#xff1a; Ap和ac在同一个广播域内&#xff0c;不用配置 option 43 source 源ip回包哪个模式都得配置 Cli配置业务模版流程&#xff1a; 1、 AC控制器上全局配置capwap回包接口地址 1、配置ssid&#xff1a;wifi名称 2、配置安全模版&#xff1a;用户连接密码…

docker自定义网络下 :不同容器的nginx通过容器名称相互访问PHP项目

场景&#xff1a;每个服务都有自己运行的一套环境&#xff0c;分别都有自己的nginx &#xff1b;我们像用A容器的Nginx 的项目访问到B容器下的nginx项目内容&#xff0c;并且在自定义的网络下面 首先我们可以自定义一个网络&#xff1a;docker默认桥接&#xff1a; docker ne…

在优化问题里,强化学习相比启发式算法有什么好处?

本文出自https://mp.weixin.qq.com/s/J1SsNtU1wkqdGcKZvNACHw纯属个人科研收餐使用 存在部分数学符号和公式,都可通过上面链接查看!!!! 关于强化学习和传统优化算法(包括:数学优化,启发式,元启发式)的探讨越来越多了,很多同学可能是一上来就集中在一个方向和方法上,…

Python大数据之Python进阶(四)进程的注意点

文章目录 进程的注意点1. 进程的注意点介绍2. 进程之间不共享全局变量3. 进程之间不共享全局变量的小结4. 主进程会等待所有的子进程执行结束再结束5. 主进程会等待所有的子进程执行结束再结束的小结 进程的注意点 学习目标 能够说出进程的注意点 1. 进程的注意点介绍 进程之…

抽象工厂模式 创建性模式之五

在看这篇文章之前&#xff0c;请先看看“简单工厂模式”和“工厂方法模式”这两篇博文&#xff0c;会更有助于理解。我们现在已经知道&#xff0c;简单工厂模式就是用一个简单工厂去创建多个产品&#xff0c;工厂方法模式是每一个具体的工厂只生产一个具体的产品&#xff0c;然…

【Leetcode】162.寻找峰值

一、题目 1、题目描述 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。 你必须实现时间复杂度为 O(log n…

kuaishou sig、sig3参数记录分析

**免责任声明: 任何可操作性的内容与本文无关,文章内容仅供参考学习 如有侵权, 损害贵公司利益&#xff0c; 请联系作者&#xff0c;会立刻马上进行删除** 经常研究快手的小伙伴都知道&#xff0c;快手有几个比较重要的参数&#xff0c;像sig&#xff0c;token-sig和sig3字段…