我需要比较两个回归斜率,其中:
$
y_1 ~ a + b_1x
y_2 ~ a + b_2x
$
如何比较 b1 和 b2?
或者用我在啮齿动物中的具体例子的语言,我想比较
antero-posterior diameter ~ a + b1 * humeral length
de naso-occipital length ~ a + b2 * humeral length
我需要比较两个回归斜率,其中:
$
y_1 ~ a + b_1x
y_2 ~ a + b_2x
$
如何比较 b1 和 b2?
或者用我在啮齿动物中的具体例子的语言,我想比较
antero-posterior diameter ~ a + b1 * humeral length
de naso-occipital length ~ a + b2 * humeral length
好吧,让我们看看你的情况。您基本上有两个回归(APD = 前后径,NOL = 鼻枕长度,HL = 肱骨长度):
检验假设,您可以执行以下操作:
让我们看一个包含虚构数据的示例(in R
):
# Create artificial data
library(nlme) # needed for the generalized least squares
set.seed(1500)
NOL <- rnorm(10000,100,12)
APD <- 10 + 15*NOL+ rnorm(10000,0,2)
HL <- - 2 - 5*NOL+ rnorm(10000,0,3)
mod1 <- lm(APD~NOL)
mod1
Coefficients:
(Intercept) NOL
10.11 15.00
mod2 <- lm(HL~NOL)
mod2
Coefficients:
(Intercept) NOL
-1.96 -5.00
# Combine the dependent variables and duplicate the independent variable
y.new <- c(APD, HL)
x.new <- c(NOL, NOL)
# Create a dummy variable that is 0 if the data are from the first data set (APD) and 1 if they are from the second dataset (HL)
dummy.var <- c(rep(0, length(APD)), rep(1, length(HL)))
# Generalized least squares model allowing for differend residual SDs for each regression (strata of dummy.var)
gls.mod3 <- gls(y.new~x.new*dummy.var, weights=varIdent(form=~1|dummy.var))
Variance function:
Structure: Different standard deviations per stratum
Formula: ~1 | dummy.var
Parameter estimates:
0 1
1.000000 1.481274
Coefficients:
Value Std.Error t-value p-value
(Intercept) 10.10886 0.17049120 59.293 0
x.new 14.99877 0.00169164 8866.430 0
dummy.var -12.06858 0.30470618 -39.607 0
x.new:dummy.var -19.99917 0.00302333 -6614.939 0
注:截距和斜率为与第一个回归 (mod1) 中的完全相同。的系数dummy.var
表示两个回归的截距之差。此外:第二次回归的残差标准差估计大于第一次回归的 SD(大约 1.5 倍大)。这正是我们在生成数据时指定的(2 对 3)。我们快到了:交互项 ( x.new:dummy.var
) 的系数测试斜率的相等性。这里第二次回归(mod2)的斜率约为或大约. 的区别正是我们在生成数据时指定的。如果你在 Stata 工作,这里有一个很好的解释。
警告:这只有在前后径和鼻枕长度(两个因变量)是独立的情况下才有效。否则它会变得非常复杂。
编辑