Comment spécifier une matrice de contraste (en R) pour la différence entre un niveau et la moyenne des autres?

9

J'ai un modèle de régression qui ressemble à ceci:

Oui=β0+β1X1+β2X2+β3X3+β12X1X2+β13X1X3+β123X1X2X3

... ou en notation R: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3

Supposons que et sont des variables catégorielles et est numérique. La complication est que a trois niveaux et au lieu de contrastes standard, je dois tester:X 2 X 3 X 1 X 1 a , X 1 b , X 1 cX1X2X3X1X1une,X1b,X1c

  • Si l'interception pour le niveau diffère significativement de l'interception moyenne pour les niveaux et .X1uneX1bX1c
  • Si la réponse de est significativement différente entre le niveau et la moyenne des niveaux et .X2X1uneX1bX1c
  • Si la pente de est significativement différente entre le niveau et la moyenne des niveaux et .X3X1uneX1bX1c

Sur la base de ce post, il semble que la matrice que je veux est ...

 2
-1
-1

Alors je le fais contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1))). L'estimation de change, mais les autres aussi. Je peux reproduire la nouvelle estimation de en soustrayant les valeurs prévues des moyennes des et (lorsque et est à son niveau de référence) de deux fois la valeur de à ces niveaux. Mais je ne peux pas croire que j'ai spécifié ma matrice de contraste correctement, sauf si je peux également dériver de la même manière les autres coefficients.β1betune1X1bX1cX3=0X2X1une

Quelqu'un a-t-il des conseils pour savoir comment comprendre ma relation entre les moyens cellulaires et les contrastes? Merci. Existe-t-il un nom standard pour ce type de contraste?


Ah! Selon le lien publié dans la réponse de Glen_b, la conclusion est que vous pouvez convertir N'IMPORTE QUELLE comparaison de groupe que vous voulez en un attribut de contraste de style R comme suit:

  1. Faites une matrice carrée. Les lignes représentent les niveaux de votre facteur et les colonnes représentent les contrastes. Sauf le premier, qui indique au modèle ce que l'interception devrait représenter.
  2. Si vous voulez que votre interception soit la grande moyenne, remplissez la première colonne avec la même valeur non nulle, peu importe quoi. Si vous voulez que l'interception soit l'un des moyens de niveau, mettez un nombre dans cette ligne et remplissez le reste de zéros. Si vous voulez que l'interception soit une moyenne de plusieurs niveaux, mettez des nombres dans ces lignes et des zéros dans le reste. Si vous voulez que ce soit une moyenne pondérée, utilisez des nombres différents, sinon utilisez le même nombre. Vous pouvez même mettre des valeurs négatives dans la colonne d'interception et cela signifie probablement aussi quelque chose, mais cela change complètement les autres contrastes, donc je n'ai aucune idée de ce à quoi cela sert
  3. Remplissez le reste des colonnes avec des valeurs positives et négatives indiquant quels niveaux vous voulez par rapport à ce que les autres. J'oublie pourquoi la sommation à zéro est importante, mais ajustez les valeurs pour que les colonnes totalisent à zéro.
  4. Transposez la matrice à l'aide de la t()fonction.
  5. Utilisez à ginv()partir du MASSpackage ou solve()pour obtenir l'inverse de la matrice transposée.
  6. Déposez la première colonne, par exemple mycontrast<-mycontrast[,-1]. Vous avez maintenant la matrice apx p-1, mais les informations que vous avez saisies pour votre interception ont été encodées dans la matrice dans son ensemble lors de l'étape 5.
  7. Si vous souhaitez que les étiquettes de la sortie récapitulative soient plus agréables à lire que lm()la sortie par défaut et al., Nommez les colonnes de votre matrice en conséquence. (Intercept)Cependant, l' interception sera toujours automatiquement nommée .
  8. Faites de votre matrice le nouveau contraste pour le facteur en question, par exemple contrasts(mydata$myfactor)<-mymatrix
  9. Run lm()(et probablement beaucoup d' autres fonctions qui utilisent des formules) normalement en R standard sans avoir à charge glht, doByou contrasts.

Glen_b, merci, et merci UCLA Statistical Consulting Group. Mon prof de statistiques appliqué a passé plusieurs jours à se pencher sur ce sujet, et je ne savais toujours pas comment écrire ma propre matrice de contraste. Et maintenant, une heure de lecture et de jeu avec R, et je pense enfin que je comprends. Je suppose que j'aurais dû appliquer à UCLA à la place. Ou Université de StackExchange.

f1r3br4nd
la source

Réponses:

5

Cette comparaison de l'une avec la moyenne de toutes les variables ultérieures est (à part l'échelle), appelée codage Helmert ou contrastes Helmert . Celui que vous donnez est le premier contraste, l'autre serait une version à l'échelle de .(0,1,1)

Ce que R appelle le codage helmert, cela appelle «Helmert inversé». Ils sont équivalents jusqu'à un changement d'ordre variable.

Glen_b -Reinstate Monica
la source
Un équivalent "jusqu'à un changement d'ordre variable" doit-il être "donné une inversion de l'ordre des niveaux"? Donc pour obtenir le type de helmert SAS / SPSS (comparer à la moyenne des niveaux restants), il faudrait soit inverser l'ordre des niveaux du facteur concerné, soit rev () chaque colonne puis rev () chaque ligne de la matrice retourné par contra.helmert?
tim
@tim "un changement de l'ordre des variables" n'est pas censé signifier " tout changement de l'ordre des variables", mais littéralement un changement d'ordre variable (c'est-à-dire un en particulier).
Glen_b -Reinstate Monica