如何可视化独立的两个样本 t 检验?

机器算法验证 数据可视化 t检验
2022-03-23 11:29:13

将独立的两个样本 t 检验的结果可视化的最被接受的方法是什么?是更常用的数字表还是某种情节?目标是让一个不经意的观察者看到这个数字并立即看到它们可能来自两个不同的人群。

4个回答

值得明确你的情节的目的。一般来说,有两种不同的目标:您可以自己绘制图表以评估您所做的假设并指导数据分析过程,或者您可以绘制图表以将结果传达给他人。这些不一样;例如,您的情节/分析的许多观众/读者可能在统计上不成熟,并且可能不熟悉等方差的概念及其在 t 检验中的作用。您希望您的情节甚至向像他们这样的消费者传达有关您的数据的重要信息。他们暗中相信你做的事情是正确的。从你的问题设置中,我猜你是后一种类型。

实际上,用于将 t 检验1的结果传达给其他人的最常见和公认的图(撇开它是否实际上是最合适的)是带有标准误差条的均值条形图。这确实与 t 检验非常匹配,因为 t 检验使用它们的标准误差比较两种均值。当你有两个独立的组时,这将产生一个直观的图片,即使对于统计上不复杂的人来说,并且(数据愿意)人们可以“立即看到他们可能来自两个不同的人群”。这是一个使用@Tim 数据的简单示例:

nonsmokers <- c(18,22,21,17,20,17,23,20,22,21)
smokers <- c(16,20,14,21,20,18,13,15,17,21)
m        = c(mean(nonsmokers), mean(smokers))
names(m) = c("nonsmokers", "smokers")
se       = c(sd(nonsmokers)/sqrt(length(nonsmokers)), 
             sd(smokers)/sqrt(length(smokers)))
windows()
  bp = barplot(m, ylim=c(16, 21), xpd=FALSE)
  box()
  arrows(x0=bp, y0=m-se, y1=m+se, code=3, angle=90)

在此处输入图像描述

也就是说,数据可视化专家通常不屑于这些图。它们经常被嘲笑为“炸药图”(参见为什么炸药图不好)。特别是,如果您只有少量数据,通常建议您简单地显示数据本身如果点重叠,您可以水平抖动它们(添加少量随机噪声),使它们不再重叠。因为 t 检验基本上是关于均值和标准误的,所以最好将均值和标准误叠加到这样的图上。这是一个不同的版本:

set.seed(4643)
plot(jitter(rep(c(0,1), each=10)), c(nonsmokers, smokers), axes=FALSE, 
     xlim=c(-.5, 1.5), xlab="", ylab="")
box()
axis(side=1, at=0:1, labels=c("nonsmokers", "smokers"))
axis(side=2, at=seq(14,22,2))
points(c(0,1), m, pch=15, col="red")
arrows(x0=c(0,1), y0=m-se, y1=m+se, code=3, angle=90, length=.15)

在此处输入图像描述

如果您有大量数据,箱线图可能是快速了解分布的更好选择,您也可以在那里叠加均值和 SE。

data(randu)
x1 = qnorm(randu[,1])
x2 = qnorm(randu[,2])
m  = c(mean(x1), mean(x2))
se = c(sd(x1)/sqrt(length(x1)), sd(x2)/sqrt(length(x2)))
boxplot(x1, x2)
points(c(1,2), m, pch=15, col="red")
arrows(x0=1:2, y0=m-(1.96*se), y1=m+(1.96*se), code=3, angle=90, length=.1)
# note that I plotted 95% CIs so that they will be easier to see

在此处输入图像描述

简单的数据图和箱线图非常简单,即使不是很精通统计数据,大多数人也能理解它们。但请记住,这些都不能轻松评估使用 t 检验比较您的组的有效性。这些目标最好通过不同类型的情节来实现。

1. 请注意,此讨论假设独立样本 t 检验。这些图可以与依赖样本 t 检验一起使用,但在这种情况下也可能会产生误导(参见,在受试者内部研究中使用误差线表示均值是否错误?)。

最常用的可视化方法t-test-like 比较是使用boxplots下面我使用数据集提供了一个示例,该数据集描述了来自该站点的“吸食大麻与测量短期记忆的任务的表现缺陷之间的关系”

> nonsmokers <- c(18,22,21,17,20,17,23,20,22,21)
> smokers <- c(16,20,14,21,20,18,13,15,17,21)
> 
> t.test(nonsmokers, smokers)

    Welch Two Sample t-test

data:  nonsmokers and smokers
t = 2.2573, df = 16.376, p-value = 0.03798
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.1628205 5.0371795
sample estimates:
mean of x mean of y 
     20.1      17.5 

在此处输入图像描述

实际上,箱线图通常用于“非正式”假设检验,例如 Yoav Benjamini 在 1988 年的论文Open the Box of a Boxplot中所描述的:

常规箱线图由批次中位数的近似置信区间补充,显示为从盒子侧面取出的一对楔形。这些置信区间的构造方式是,当不同箱线图的两个缺口不重叠时,它们的中位数显着不同。(...) 由于置信区间的公式是常数乘以四分位间距除以批量大小的平方根,因此可以从楔形长度相对于盒子长度的关系中感知后者。

另请参阅: 仅使用箱形图中的汇总数据的 T 检验

该图没有显示直接参与的数量t-test ,正如@NickCox注意到的那样。如果您想直接比较均值与置信区间,您可以使用带有标记置信区间的条形图。使用均值和置信区间还可以让您进行假设检验(请参阅此处此处)。

在此处输入图像描述

正如您从该主题下的其他帖子和评论中看到的那样,箱线图和炸药图都是有争议的选择,所以让我再给您一个尚未提及的替代方案。首先,请记住t-测试和回归是相关的你可以绘制t- 类似测试的比较,作为带有与线相连的误差线(置信区间)的两个点。如果您使用线性回归而不是线性回归,则线的斜率与回归斜率成正比t- 在这种情况下进行测试。这种图的主要优点是它使您可以通过查看线的斜率轻松判断均值差异的大小。它的缺点可能是它可能表明平均值之间存在一些“连续性”(即您有配对样本)。

在此处输入图像描述

箱线图似乎更常用,因为它们提供了有关可视化变量分布的更多信息(仅与置信区间的平均值相比)。它们还补充而不是复制来自t大多数风格指南都鼓励测试和这种情节的使用,例如美国心理学会的出版手册

首先要考虑的是图形在其将出现的论文文本中的信息价值。如果该图没有实质性地增加对论文的理解或重复论文的其他元素,则不应包括在内。

这主要是@Tim 和@gung 的有用答案的变体,但这些图表不能适合评论。

小但可能有用的点:

  1. @gung 所示的条形图或点图需要修改,如果有关系,如示例数据中所示。点可以堆叠或抖动,或者如下例所示,您可以使用 Emanuel Parzen 建议的混合分位数箱形图(最容易获得的参考资料可能是 1979 年。非参数统计数据建模。Journal , American Statistical Association74:105-121)。这也有其他优点,强调如果一半数据在盒子内,那么一半也在盒子外,并且基本上显示了分布的所有细节。在只有两组的情况下,就像在这种情况下一样,任何更传统的箱线图都可以是最小的,实际上是骨架的显示。有些人会认为这是一种美德,但仍有展示更多细节的空间。相反的论点是,箱线图标记了特定点,特别是那些距离较近的四分位数超过 1.5 IQR 的点,是对用户的明确警告:注意 t 检验,因为尾部可能存在您应该使用的点担心。

  2. 您可以自然地向箱形图添加均值指示,这通常是这样做的。添加不同的标记或点符号很常见。这里我们选择参考线。

在此处输入图像描述

吸烟者和非吸烟者的分位数箱图。方框显示中位数和四分位数。蓝色的水平线表示意思。

笔记。该图是在 Stata 中创建的。这是给感兴趣的人的代码。stripplot必须先安装ssc inst stripplot.

clear 
mat nonsmokers = (18,22,21,17,20,17,23,20,22,21)
mat smokers = (16,20,14,21,20,18,13,15,17,21)
local n = max(colsof(nonsmokers), colsof(smokers)) 
set obs `n' 
gen smokers = smokers[1, _n] 
gen nonsmokers = nonsmokers[1, _n] 
stripplot smokers nonsmokers, vertical cumul centre xla(, noticks) ///
xsc(ra(0.6 2.4)) refline(lcolor(blue)) height(0.5) box ///
ytitle(digit span score) yla(, ang(h)) mcolor(red) msize(medlarge) 

编辑。针对@Frank Harrell 的回答,这一进一步的想法叠加了两个正态概率图(真正的分位数-分位数图)。水平线表示平均值。有些人想为每个组添加表示完美匹配的线条,例如通过 (0, 它的平均值) 和 (1, 其均值+它的 SD)或坚固耐用的替代品。

在此处输入图像描述

除了呈现结果的好目标之外,还应该考虑哪些图形检查了两个样本等方差的假设t- 测试它是否具有出色的性能。那将是两个经验累积分布函数的正态反函数。为了满足测试假设,这两条曲线必须是平行的直线。