Je ne peux pas comprendre l'utilisation des contrastes polynomiaux dans l'ajustement de régression. En particulier, je me réfère à un codage utilisé par R
afin d'exprimer une variable d'intervalle (variable ordinale avec des niveaux également espacés), décrit sur cette page .
Dans l'exemple de cette page , si j'ai bien compris, R ajuste un modèle pour une variable d'intervalle, renvoyant des coefficients qui pondèrent sa tendance linéaire, quadratique ou cubique. Par conséquent, le modèle ajusté devrait être:
où doit prendre les valeurs , , 3 ou 4 selon le niveau différent de la variable d'intervalle.1 2 3 4
Est-ce correct? Et si oui, quel était le but des contrastes polynomiaux?
r
regression
contrasts
Pippo
la source
la source
contr.poly
en R.Réponses:
Juste pour récapituler (et au cas où les hyperliens OP échoueraient à l'avenir), nous examinons un ensemble
hsb2
de données en tant que tel:qui peut être importé ici .
Nous transformons la variable
read
en variable ordonnée / ordinale:Maintenant , nous sommes tous mis à courir juste un ANOVA régulier - oui, il est R, et nous avons essentiellement une variable dépendante continue,
write
et une variable explicative avec plusieurs niveaux,readcat
. Dans R, nous pouvons utiliserlm(write ~ readcat, hsb2)
1. Génération de la matrice de contraste:
Il existe quatre niveaux différents pour la variable ordonnéen−1=3
readcat
, nous aurons donc contrastes.Tout d'abord, allons-y pour l'argent, et jetons un coup d'œil à la fonction R intégrée:
Décortiquons maintenant ce qui s'est passé sous le capot:
Que s'est-il passé là-bas? le(−1.5)0 (−0.5)0 0.50 1.50 (−1.5)1 (−0.5)1 0.51 1.51 (−1.5)2=2.25 , , 0,5 2 = 0,25 et 1,5 2 = 2,25 ; et le quatrième, ( - 1,5 ) 3 = - 3,375 , ( - 0,5 ) 3 = - 0,125 , 0,5 3 = 0,125 et 1,5 3 = 3,375 .(−0.5)2=0.25 0.52=0.25 1.52=2.25 (−1.5)3=−3.375 (−0.5)3=−0.125 0.53=0.125 1.53=3.375
outer(a, b, "^")
élève les éléments dea
aux éléments deb
, de sorte que la première colonne résulte des opérations, , ( - 0,5 ) 0 , 0,5 0 et 1,5 0 ; la deuxième colonne de ( - 1,5 ) 1 , ( - 0,5 ) 1 , 0,5 1 et 1,5 1 ; le troisième de ( - 1,5 ) 2 = 2,25Ensuite, nous faisons une décomposition orthonormée de cette matrice et prenons la représentation compacte de Q ( ). Certains des fonctionnements internes des fonctions utilisées dans la factorisation QR dans R utilisées dans ce post sont expliqués plus en détail ici .QR
c_Q = qr(X)$qr
... dont nous enregistrons uniquement la diagonale (R QR
z = c_Q * (row(c_Q) == col(c_Q))
). Ce qui se trouve dans la diagonale: juste les entrées "inférieures" de la partie de la décomposition Q R. Juste? eh bien, non ... Il s'avère que la diagonale d'une matrice triangulaire supérieure contient les valeurs propres de la matrice!Ensuite, nous appelons la fonction suivante:,Q Q Qz
raw = qr.qy(qr(X), z)
dont le résultat peut être répliqué "manuellement" par deux opérations: 1. Transformer la forme compacte de , c'est -à- dire en Q , une transformation qui peut être réalisée avec , et 2. Effectuer la multiplication matricielle Q z , comme dans .qr(X)$qr
Q = qr.Q(qr(X))
Q %*% z
Crucialement, la multiplication de par les valeurs propres de R ne change pas l'orthogonalité des vecteurs de colonne constitutifs, mais étant donné que la valeur absolue des valeurs propres apparaît dans l'ordre décroissant du haut à gauche vers le bas à droite, la multiplication de Q z aura tendance à diminuer la valeurs dans les colonnes polynomiales d'ordre supérieur:Q R Qz
Comparez les valeurs des derniers vecteurs de colonne (quadratique et cubique) avant et après les opérations de factorisation , et aux deux premières colonnes non affectées.QR
Enfin, nous appelons la
(Z <- sweep(raw, 2L, apply(raw, 2L, function(x) sqrt(sum(x^2))), "/", check.margin = FALSE))
transformation de la matriceraw
en vecteurs orthonormés :Cette fonction "normalise" simplement la matrice en divisant (∑col.x2i−−−−−−−√ (i) (ii) (i)
"/"
) dans les colonnes chaque élément par le . Il peut donc être décomposé en deux étapes:(i), cequi donne les dénominateurs pour chaque colonne de(ii)où chaque élément d'une colonne est divisé par la valeur correspondante de(i).apply(raw, 2, function(x)sqrt(sum(x^2)))
2 2.236 2 1.341
À ce stade, les vecteurs de colonne forment une base orthonormée de , jusqu'à ce que nous nous débarrassions de la première colonne, qui sera l'ordonnée à l'origine, et nous avons reproduit le résultat de :R4
contr.poly(4)
Les colonnes de cette matrice sont orthonormées , comme le montrentscores - mean 1 2 3
(sum(Z[,3]^2))^(1/4) = 1
etz[,3]%*%z[,4] = 0
par exemple (incidemment, il en va de même pour les lignes). Et, chaque colonne est le résultat de l' élévation des premiers pour le 1 -st, 2 -ND et 3 alimentation -rd, respectivement - c. -à- linéaire, quadratique et cubique .2. Quels contrastes (colonnes) contribuent de manière significative à expliquer les différences entre les niveaux de la variable explicative?
Nous pouvons simplement exécuter l'ANOVA et regarder le résumé ...
summary(lm(write ~ readcat, hsb2))
... pour voir qu'il y a un effet linéaire de
readcat
onwrite
, de sorte que les valeurs d'origine (dans le troisième morceau de code au début de l'article) peuvent être reproduites comme:... ou...
... ou bien mieux ...
Étant des contrastes orthogonaux, la somme de leurs composantes ajoute à zéro pour a 1 , ⋯ , a t constantes, et le produit scalaire de deux d'entre elles est nul. Si nous pouvions les visualiser, ils ressembleraient à ceci:∑i=1tai=0 a1,⋯,at
Graphiquement, c'est beaucoup plus facile à comprendre. Comparez les moyennes réelles par groupes dans de grands blocs noirs carrés aux valeurs prédites, et voyez pourquoi une approximation en ligne droite avec une contribution minimale des polynômes quadratiques et cubiques (avec des courbes uniquement approximées avec du loess) est optimale:
Si, juste pour l'effet, les coefficients de l'ANOVA avaient été aussi importants pour le contraste linéaire pour les autres approximations (quadratique et cubique), le tracé absurde qui suit représenterait plus clairement les diagrammes polynomiaux de chaque "contribution":
Le code est ici .
la source
qr.qy()
fonction, mais je vais certainement essayer de voir si je peux dire quelque chose de peu cohérent à propos de votre question dès que j'aurai du temps.Je vais utiliser votre exemple pour expliquer comment cela fonctionne. L'utilisation de contrastes polynomiaux avec quatre groupes donne les résultats suivants.
Où la première équation fonctionne pour le groupe des scores de lecture les plus bas et la quatrième pour le groupe des meilleurs scores de lecture. nous pouvons comparer ces équations à celle donnée en utilisant une régression linéaire normale (en supposantr e a dje est continu)
Habituellement au lieu deL , Q , C tu aurais β1, β2, β3 et écrit en première position. Mais cette écriture ressemble à celle aux contrastes polynomiaux. Donc, les chiffres devantL , Q , C sont en fait au lieu de r e a dje, r e a d2je, r e a d3je . You can see that coefficients before L have linear trend, before Q quadratic and before C cubic.
Then R estimates parametersμ,L,Q,C and gives you
In that example is significantly non-zero onlyLˆ . So your conclusion could be: We see that the better scoring in writing depends linearly on reading score, but there is no significant quadratic or cubic effect.
la source