数据分析:两组数据的T检验power评估

2024-08-01 09:29:52 浏览数 (1)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者!

介绍

  • 功效分析(power analysis)是在实验设计阶段进行的,用于确定在给定的效应量、显著性水平和样本大小下,实验能够检测到实际效应的概率。
  • 功效分析有助于确定所需的样本量,以确保实验设计能够检测到有意义的效应。
  • 通过计算功效,研究者可以评估当前设计的实验是否有足够的统计能力来检测效应,如果没有,可能需要增加样本量。
在这里插入图片描述在这里插入图片描述

导入python包

代码语言:javascript复制
import pandas as pd
import numpy as np
from math import sqrt
from statsmodels.stats.power import TTestPower
​

加载数据

百度网盘链接: https://pan.baidu.com/s/1NE-jYGWY9snI7j8NkJS-8A

提取码: gns9

代码语言:javascript复制
​
df = pd.read_excel("ST1_oralASV_mouse.xlsx", sheet_name="S1b")
​
df.head()
​
在这里插入图片描述在这里插入图片描述

数据预处理

代码语言:javascript复制
df1 = df[df['Mouse ID'].str.contains('Abx_1')][['Mouse ID','Collection time point','Gut bacterial load']]
df1 = pd.pivot_table(df1, index='Mouse ID', columns='Collection time point', values='Gut bacterial load')
df1
在这里插入图片描述在这里插入图片描述

运行

下面是这段代码的逐步解释:

  1. n_pren_post 分别代表两组样本的大小,这里都是3。
  2. gutload_pregutload_post 分别是两组数据的列表,代表实验前后的肠道负荷。
  3. s_pres_post 是这两组数据的方差。
  4. s 是合并标准差(pooled standard deviation),计算公式是:
s=(npre−1)⋅spre (npost−1)⋅spostnpre npost−2*s*=*n**p**re* *n**p**os**t*−2(*n**p**re*−1)⋅*s**p**re* (*n**p**os**t*−1)⋅*s**p**os**t*s=(npre−1)⋅spre (npost−1)⋅spostnpre npost−2*s*=*n**p**re* *n**p**os**t*−2(*n**p**re*−1)⋅*s**p**re* (*n**p**os**t*−1)⋅*s**p**os**t*

这个公式用于计算两组样本合并后的标准差,用于后续的t检验。

  1. u_preu_post 是两组数据的平均值。
  2. d 是效应量(effect size),这里使用的是Cohen's d,计算公式是:
d=upre−uposts*d*=*s**u**p**re*−*u**p**os**t*d=upre−uposts*d*=*s**u**p**re*−*u**p**os**t*

效应量是一个标准化的量度,用于衡量两个群体间的差异大小。

  1. alpha 是显著性水平,这里设置为0.05,表示有5%的概率拒绝正确的零假设。
  2. obj = TTestPower() 创建了一个用于计算t检验功效的对象。
  3. power 是通过power函数计算的,需要提供效应量、样本大小、显著性水平和备择假设。这里nobs是样本数量,df是自由度(在这里没有指定,通常由样本大小决定)。
  4. alternative='larger' 表示备择假设是实验组的均值大于对照组的均值。
  5. 最后,代码打印出当样本量为3时,检验的功效值。
代码语言:javascript复制
n_pre = 3
n_post = 3
gutload_pre = list(df1.pre)
gutload_post = list(df1.w1)
s_pre, s_post = np.var(gutload_pre), np.var(gutload_post)
s = sqrt(((n_pre - 1) * s_pre   (n_post - 1) * s_post) / (n_pre   n_post - 2)) # calculate the pooled standard deviation 
u_pre, u_post = np.mean(gutload_pre), np.mean(gutload_post) # means of the samples
d = (u_pre - u_post) / s # calculate the effect size
alpha = 0.05 # significance leve
obj = TTestPower()
power = obj.power(effect_size=d, nobs=3, alpha=alpha, df=None, alternative='larger')
print('power of 3 mice: %.6f'%(power))
在这里插入图片描述在这里插入图片描述

结果 power of 3 mice: 1.000000 表示在给定的条件下,当样本量为3时,检验的功效(power)是1.000000,即100%。这有以下几个含义:

  1. 高统计能力:功效为100%意味着在当前的实验设计下,如果存在效应(即两组之间确实有差异),那么实验几乎可以100%地检测到这种效应,并且能够以0.05的显著性水平拒绝零假设。
  2. 效应量足够大:由于效应量(Cohen's d)是计算功效的关键因素之一,一个非常高的功效值可能意味着效应量较大,即实验前后的肠道负荷差异非常明显。
  3. 样本量与效应量的关系:尽管样本量只有3,但可能由于效应量较大,使得所需的样本量较小就能达到很高的统计能力。然而,这也可能意味着实验设计或数据本身存在某些特殊情况,使得效应量被高估。
  4. 可能的过度估计:在实际应用中,功效为100%可能看起来有些不切实际,因为通常会有一些随机变异或其他因素影响实验结果。这可能表明计算过程中的某些假设过于理想化,或者效应量计算可能基于非常极端的数据。
  5. 实验设计的考虑:尽管功效很高,但这并不意味着实验设计不需要进一步的考虑。例如,如果实验的可重复性或外部有效性是关注点,可能需要更多的样本来确保结果的稳健性。

0 人点赞