Jak porównać dwa nachylenia regresji dla jednego predyktora z dwoma różnymi wynikami?

10

Muszę porównać dwa stoki regresji, gdzie:

$
y_1 ~ a + b_1x
y_2 ~ a + b_2x
$

Jak mogę porównać b1 i b2?

Lub w języku mojego konkretnego przykładu u gryzoni, chcę porównać

antero-posterior diameter ~  a + b1 * humeral length   
de naso-occipital length  ~  a + b2 * humeral length 
Dra. Alejandra Echeverria
źródło
2
Oblicz model regresji dla obu zmiennych PLUS oddziaływanie dwóch zmiennych (długość ramienia średnica przednio-tylna). Interakcja testuje założenie równoległości nachyleń dwóch zmiennych. Jeśli termin interakcji jest znaczący, nachylenia są różne. ×
COOLSerdash
Dzięki!! Ale długość ramienia i średnica przednio-tylna kości ramiennej to DV, a długość nosowo-potyliczna to IV. Czy mogę uruchomić analizę zgodnie z sugestią?
Dra.
1
@ Dra.AlejandraEcheverria Czy masz na myśli, że masz jeden model regresji liniowej z dwiema zmiennymi niezależnymi i chcesz przetestować równość dwóch współczynników na zmiennych niezależnych, czy masz dwa proste modele regresji liniowej i chcesz porównać współczynniki w obu modelach?
Graeme Walsh
1
Drogi @Graeme Walsh, mam dwa proste modele regresji liniowej i chcę porównać współczynniki w obu modelach.
Dra.

Odpowiedzi:

11

Ok, spójrzmy na twoją sytuację. Masz w zasadzie dwie regresje (APD = średnica przednio-tylna, NOL = długość nosowo-potyliczna, HL = długość ramienia):

  1. APD=β0,1+β1,1NOL
  2. HL=β0,2+β1,2NOL

Aby przetestować hipotezę , możesz wykonać następujące czynności:β1,1=β1,2

  1. Ynew
  2. Xnew
  3. D
  4. YnewXnewD

Spójrzmy na przykład z gotowymi danymi (w 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

Xnewdummy.varx.new:dummy.varβx.newβx.new×dummy.var1520=520

Ostrzeżenie: Działa to tylko wtedy, gdy średnica przednio-tylna i długość nosowo-potyliczna (dwie zmienne zależne) są niezależne. W przeciwnym razie może się to bardzo skomplikować.

EDYTOWAĆ

Te dwa posty na stronie dotyczą tego samego pytania: pierwszego i drugiego .

COOLSerdash
źródło
Aby uniknąć zamieszania, wygląda na to, że masz pomieszane NOL i HL. HL był predyktorem, NOL był drugim DV (a APD był pierwszym DV, jak wskazałeś). Chociaż zauważyłem, że sam plakat zmienił status swoich zmiennych w komentarzu ...
Patrick Coulombe
@Patrick Coulombe Dzięki za wskazanie tego. Nie było jasne z jej wczorajszego komentarza.
COOLSerdash
@PatrickCoulombe Druga myśl: Myślę, że Jeromy Anglim źle zrozumiał komentarz Alejandry i wymienił zmienne.
COOLSerdash
1
To rozwiązanie wydaje się rozsądne, ale jestem nieco zaniepokojony faktem, że w modelu złożonym / interaktywnym zakłada się, że wariancja rezydualna jest równa na obu poziomach dummy.var, to znaczy dla obu DV. W zależności od tego, jakie DV są w oryginalnym kontekście, możliwe jest, że rezydualne wariancje są radykalnie różne w oddzielnych regresjach każdego DV. Zastanawiam się, czy lepiej byłoby zastosować to samo zaproponowane przez ciebie podstawowe podejście, ale z glsmodelem, w którym szacujemy różne odchylenia rezydualne dla każdego DV. Masz jakieś przemyślenia na ten temat?
Jake Westfall
1
@COOLSerdash Jasne, wyglądałoby to mniej więcej tak:library(nlme); mod4 <- gls(y.new~x.new*dummy.var, weights=varIdent(form= ~1 | dummy.var))
Jake Westfall