Comment comparer deux pentes de régression pour un prédicteur sur deux résultats différents?

10

Je dois comparer deux pentes de régression où:

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

Comment comparer b1 et b2?

Ou dans la langue de mon exemple spécifique chez les rongeurs, je veux comparer

antero-posterior diameter ~  a + b1 * humeral length   
de naso-occipital length  ~  a + b2 * humeral length 
Dra. Alejandra Echeverria
la source
2
Calculer un modèle de régression avec les deux variables PLUS l' interaction des deux variables (longueur humérale diamètre antéro-postérieur). L'interaction teste l'hypothèse de parallélisme des pentes des deux variables. Si le terme d'interaction est significatif, les pentes sont différentes. ×
COOLSerdash
Merci!! Mais la longueur humérale et le diamètre antéro-postérieur de l'humérus sont des DV et la longueur naso-occipitale est le IV. Puis-je exécuter l'analyse comme vous le suggérez?
Dra.
1
@ Dra.AlejandraEcheverria Voulez-vous dire que vous avez un modèle de régression linéaire avec deux variables indépendantes et que vous souhaitez tester l'égalité des deux coefficients sur les variables indépendantes, ou, vous avez deux modèles de régression linéaire simples et vous souhaitez comparer les coefficients entre les deux modèles?
Graeme Walsh
1
Cher @Graeme Walsh, j'ai deux modèles de régression linéaire simples et je veux comparer les coefficients entre les deux modèles.
Dra.

Réponses:

11

D'accord, regardons votre situation. Vous avez essentiellement deux régressions (APD = diamètre antéro-postérieur, NOL = longueur naso-occipitale, HL = longueur humérale):

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

Pour tester l'hypothèse , vous pouvez procéder comme suit:β1,1=β1,2

  1. Ouinew
  2. Xnew
  3. OuinewXnew

Regardons un exemple avec des données composées (en 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×ummy.vuner15-20=-520

Attention: cela ne fonctionne que si le diamètre antéro-postérieur et la longueur naso-occipitale (les deux variables dépendantes) sont indépendants. Sinon, cela peut devenir très compliqué.

ÉDITER

Ces deux articles sur le site traitent de la même question: Premier et deuxième .

COOLSerdash
la source
Juste pour éviter toute confusion, il semble que vous ayez mélangé NOL et HL. HL était le prédicteur, NOL était le deuxième DV (et APD était le premier DV, comme vous l'avez souligné). Bien que je viens de remarquer que l'affiche elle-même a changé le statut de ses variables dans un commentaire ...
Patrick Coulombe
@Patrick Coulombe Merci de l'avoir signalé. Ce n'était pas clair d'après son commentaire d'hier.
COOLSerdash
@PatrickCoulombe Sur une deuxième réflexion: je pense que Jeromy Anglim a mal compris le commentaire d'Alejandra et a échangé les variables.
COOLSerdash
1
Cette solution semble raisonnable, mais je suis légèrement préoccupé par le fait que dans votre modèle combiné / interactif, la variance résiduelle est supposée être égale aux deux niveaux de dummy.var, c'est-à-dire pour les deux DV. Selon ce que sont les DV dans le contexte d'origine, il est possible que les variances résiduelles soient radicalement différentes dans les régressions distinctes de chaque DV. Je me demande s'il serait préférable d'utiliser la même approche de base que vous avez proposée, mais avec un glsmodèle où nous estimons différentes variances résiduelles pour chaque DV. Des pensées à ce sujet?
Jake Westfall
1
@COOLSerdash Bien sûr, cela ressemblerait à quelque chose comme ceci:library(nlme); mod4 <- gls(y.new~x.new*dummy.var, weights=varIdent(form= ~1 | dummy.var))
Jake Westfall