我有两个种群,一个具有 N=38,704(观察次数),另一个具有 N=1,313,662。这些数据集有大约 25 个变量,都是连续的。我取每个数据集中每个数据的平均值,并使用公式计算测试统计量
t=平均差/标准差
问题在于自由度。通过 df=N1+N2-2 的公式,我们将拥有比表格处理更多的自由度。对此有何建议?如何在此处检查 t 统计量。我知道 t 检验用于处理样本,但如果我们将其应用于大样本会怎样。
我有两个种群,一个具有 N=38,704(观察次数),另一个具有 N=1,313,662。这些数据集有大约 25 个变量,都是连续的。我取每个数据集中每个数据的平均值,并使用公式计算测试统计量
t=平均差/标准差
问题在于自由度。通过 df=N1+N2-2 的公式,我们将拥有比表格处理更多的自由度。对此有何建议?如何在此处检查 t 统计量。我知道 t 检验用于处理样本,但如果我们将其应用于大样本会怎样。
chl 已经提到了在使用相同的数据集同时进行 25 次测试时多重比较的陷阱。一种简单的处理方法是通过将 p 值阈值除以测试数(在本例中为 25)来调整它们。更精确的公式是:调整后的 p 值 = 1 - (1 - p 值)^(1/n)。然而,这两个不同的公式得出几乎相同的调整 p 值。
您的假设检验练习还有另一个主要问题。你肯定会遇到第一类错误(误报),你会发现一些非常微不足道的差异,这些差异在 99.9999% 的水平上非常显着。这是因为当您处理如此大的样本(n = 1,313,662)时,您会得到一个非常接近于 0 的标准误差。这是因为 1,313,662 的平方根 = 1,146。因此,您将标准差除以 1,146。简而言之,您将捕捉到可能完全无关紧要的微小差异。
我建议您摆脱这种假设检验框架,而是进行效果大小类型分析。在这个框架内,统计距离的度量是标准偏差。与标准误差不同,标准差不会因样本大小而人为缩小。而且,这种方法将使您更好地了解数据集之间的实质性差异。效应大小也更关注平均差异周围的置信区间,这比假设检验关注通常根本不显着的统计显着性提供的信息要多得多。希望有帮助。
随着自由度变大,学生的t分布越来越接近标准正态分布。自由度为 1313662 + 38704 – 2 = 1352364,t分布与标准正态分布无法区分,如下图所示(除非您可能处于非常极端的尾部并且您对将绝对微小的p值与更小的 p 值区分开来)。因此,您可以使用标准正态分布表而不是t分布表。
当分布倾向于(高斯)分布(实际上,当时,它们几乎相同,参见@onestop 提供的图片)。在您的情况下,我会说非常大,因此您可以只使用 -test。由于样本量的原因,任何非常小的差异都将被宣布为显着。因此,值得问问自己这些测试(使用完整数据集)是否真的很有趣。
可以肯定的是,由于您的数据集包含 25 个变量,因此您要进行 25 个测试?如果是这种情况,您可能需要纠正多重比较,以免夸大 I 类错误率(请参阅本网站上的相关主题)。
顺便说一句,R 软件会为您提供您正在寻找的 p 值,无需依赖表格:
> x1 <- rnorm(n=38704)
> x2 <- rnorm(n=1313662, mean=.1)
> t.test(x1, x2, var.equal=TRUE)
Two Sample t-test
data: x1 and x2
t = -17.9156, df = 1352364, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.1024183 -0.0822190
sample estimates:
mean of x mean of y
0.007137404 0.099456039
您可以使用我编写的以下 python 函数来计算尺寸效果。这里的测试很简单
import numpy as np
from scipy.stats import t
def Independent_tTest(x1, x2, std1, std2, n1, n2):
'''Independent t-test between two sample groups
Note:
The test assumptions:
H0: The two samples are not significantly different (from same population)
H1: The two samples are siginficantly different (from two populations)
- Accept the H1 if t-value > t-critical or p-value value < p-value critical
Args:
x1(float): mean of the first sample group.
x2(float): mean of the second sample group.
std1(float): standard deviation of first sample group.
std2(float): standard devation of second sample group.
Return:
degree_of_freedome, t-statistics, p-value
'''
degree_of_freedom = n1 + n2 -2
corrected_degree_of_freedom = (((std1**2/n1) + (std2**2/n2))**2)/(((std1**4)/((n1**2)*(n1-1)))+((std2**4)/((n2**2)*(n2-1))))
poolvar = ((n1-1)*(std1**2)+ (n2-1)*(std2**2))/corrected_degree_of_freedom
t_value = (x1 -x2)/np.sqrt(poolvar*((1/n1)+ (1/n2)))
sig = 2 * (1-(t.cdf(abs(t_value), corrected_degree_of_freedom)))
effect_size = np.sqrt((t_value**2)/(t_value**2+corrected_degree_of_freedom))
return f"corrected degree of freedom {corrected_degree_of_freedom:0.4f} give a t-value = {t_value:0.4f}, with significant = {sig:0.4f} with effectsize ={effect_size:0.4f}"