我同意这没有充分记录,而且代码几乎是一堆意大利面条。但我会尽力解释。
首先,这些比较箭头绝对不是置信区间。均值的置信区间由单独的选项提供。但比较箭头基于均值成对差异的置信区间。
让均值表示为 m_1, m_2, ..., m_k,并让 d_ij = m_i - m_j 表示第 i 个和第 j 个均值之间的差。那么真实差异的 (1 - alpha) 置信区间为 (d_ij - e_ij, d_ij + e_ij),其中 e_ij 是差异的误差范围;即,e_ij = t_alpha/2 * SE(d_ij)。因此,假设 m_i > m_j 使得 d_ij > 0,如果 d_ij > e_ij,则 d_ij 具有统计显着性。
现在,如何获得比较箭头。这些是在 m_i 处绘制的;我们有一个长度为 L_i 的箭头从 m_i 指向左侧,一个长度为 R_i 的箭头从 m_i 指向右侧。为了比较平均值 m_i 和 m_j,假设 m_i > m_j,我们建议查看从 m_i 向左延伸和从 m_j 向右延伸的箭头是否重叠。所以,理想情况下,我们想要
L_i + R_j = e_ij for all i, j such that m_i > m_j
如果我们能做到这一点,那么当且仅当 d_ij < e_ij 时,两个箭头才会重叠。
如果所有的 e_ij 都相等,这很容易实现:只需设置所有 L_i = R_j = e_12/2。但是对于不同的 e_ij 值,它可能会也可能不会。emmeans中的代码使用加权回归的方法来求解上述方程。当 d_ij 接近 e_ij 时,我们给予更大的权重,因为在这些情况下,我们获得正确的箭头长度更为关键。我们必须测试以确保当差异显着时 L_i + R_j < d_ij,并且当差异不显着时 >= d_ij。
这就是它的本质。请注意,还有其他复杂情况需要处理:
- 对于m_i的最小值,L_i是完全任意的;事实上,我们甚至不需要显示那个箭头。对于最大均值 m_j,R_j 也是如此。事实上,当两个或更多 m_i 与最小值或最大值相关时,可能会有额外的不需要的箭头。
- 根据均值 k 的数量以及绑定的最小值和最大值的数量,方程组可能是欠定、超定或恰到好处的。
- 该解决方案可能导致某些 L_i 或 R_j 为负数。那会很糟糕!
所以,总而言之,我们尽力做到最好。尝试这样做的主要原因是鼓励人们不要使用 m_i 的置信区间作为测试比较 d_ij 的手段。这几乎总是不正确的。永远不要将一种均值的误差幅度与两种均值之差的误差幅度混淆。那是两种不同的动物。