当斜率可能不同时,我可以使用什么测试来比较来自两个或多个回归模型的截距?

机器算法验证 r 回归 截距
2022-03-29 09:30:34

我希望测试线性回归模型中的截距是否在两个或多个组之间不同,当组特定的斜率本身可能不同时(即,可能存在交互项)。具体来说,我想比较组的所有成对组合之间的截距。

题为“我可以使用什么测试来比较两个或多个回归模型的斜率”的问题?显示如何测试组的所有成对组合之间的斜率是否不同。但是,我还没有找到一种等效的方法来测试组的成对组合之间的截距是否不同。

ANOVA(例如,anova(lm(Sepal.Length ~ Petal.Width*Species, data = iris)))将告诉您每组的截距是否相对于基线组(即分组因子中的第一个水平)有所不同。但是,有没有一种方便的方法来执行组之间的所有成对比较?

2个回答

我将回答技术问题,然后尝试说服您不要这样做。

截距是横坐标为零时的预测值。因此,示例中的截距通过以下方式获得:

> mod = lm(Sepal.Length ~ Petal.Width*Species, data = iris)

> library("emmeans")
> (emm = emmeans(mod, "Species", at = list(Petal.Width = 0)))
NOTE: Results may be misleading due to involvement in interactions
 Species    emmean    SE  df lower.CL upper.CL
 setosa       4.78 0.173 144     4.43     5.12
 versicolor   4.04 0.464 144     3.13     4.96
 virginica    5.27 0.509 144     4.26     6.28

Confidence level used: 0.95 

...并且可以通过这种方式测试其比较:

> pairs(emm)
 contrast               estimate    SE  df t.ratio p.value
 setosa - versicolor       0.733 0.495 144  1.480  0.3037 
 setosa - virginica       -0.492 0.538 144 -0.915  0.6316 
 versicolor - virginica   -1.225 0.689 144 -1.779  0.1804 

P value adjustment: tukey method for comparing a family of 3 estimates 

也就是说,截距是一个有趣或有意义的量,需要对其进行推断,这是一个不寻常的例子。在许多数据集中,截距是一种严重的外推,因为零的预测值与其观察值相去甚远。模型只是对事实的近似,人们是否应该相信你拟合的直线实际上代表了远处的趋势,这是非常值得怀疑的。

因此,我敦促您重新考虑您正在尝试做的事情,并决定您真正想要回答的有意义的问题。

原则上,一旦您拥有由 生成的线性回归对象,您可以通过将总和的方差公式应用于线性回归的协方差矩阵,lm()来测试您希望的任何期望的预测值线性组合之间的显着差异,提供的矩阵当然,您应该更正多重比较。软件包提供了一种执行此类测试的便捷方法。vcov(lm())emmeans

也就是说,当涉及交互项时,您需要非常小心地比较截距,特别是当其中一个预测变量连续且值远非 0 时。在您的示例中,截距代表0时的Sepal.Length每个值这真的是你关心的比较吗?Species Petal.Width

iris数据集中,setosa、versicolor 和 virginica的平均值Petal.Width分别为 0.246、1.326 和 2.026 。Species有了这样一个值范围,在 0 为 0的虚构情况下Petal.Width检查截距的意义何在?Sepal.LengthPetal.Width

我了解您仅将此数据集用作更一般问题的示例,但同样的注意事项广泛适用于涉及交互时的截距评估。