Quel est un exemple de colinéarité parfaite en termes de matrice de conception ?
Je voudrais un exemple où β = ( X ' X ) - 1 X ' Y ne peut pas être estimée parce que ( X ' X ) n'est pas inversible.
Quel est un exemple de colinéarité parfaite en termes de matrice de conception ?
Je voudrais un exemple où β = ( X ' X ) - 1 X ' Y ne peut pas être estimée parce que ( X ' X ) n'est pas inversible.
Réponses:
Voici un exemple avec 3 variables, , et , liées par l'équation
où
Les données particulières sont
y x1 x2
1 4.520866 1 2
2 6.849811 2 4
3 6.539804 3 6
Il est donc évident que est un multiple de nous avons donc une colinéarité parfaite.
Nous pouvons écrire le modèle comme
où:
Nous avons donc
Nous calculons maintenant le déterminant de :
Dans R, nous pouvons montrer ceci comme suit:
> x1 <- c(1,2,3)
créer x2
, un multiple dex1
> x2 <- x1*2
créer y, une combinaison linéaire de x1
, x2
et une certaine aléatoire
> y <- x1 + x2 + rnorm(3,0,1)
Observe ceci
> summary(m0 <- lm(y~x1+x2))
ne parvient pas à estimer une valeur pour le x2
coefficient:
Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.9512 1.6457 2.401 0.251
x1 1.0095 0.7618 1.325 0.412
x2 NA NA NA NA
Residual standard error: 0.02583 on 1 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 0.9999
F-statistic: 2.981e+04 on 1 and 1 DF, p-value: 0.003687
La matrice modèle est:
> (X <- model.matrix(m0))
(Intercept) x1 x2
1 1 1 2
2 1 2 4
3 1 3 6
Alors est
> (XXdash <- X %*% t(X))
1 2 3
1 6 11 16
2 11 21 31
3 16 31 46
qui n'est pas inversible, comme le montre
> solve(XXdash)
Error in solve.default(XXdash) :
Lapack routine dgesv: system is exactly singular: U[3,3] = 0
Ou:
det (XXdash) [1] 0
Voici quelques scénarios assez courants produisant une multicolinéarité parfaite, c'est-à-dire des situations dans lesquelles les colonnes de la matrice de conception sont linéairement dépendantes. Rappelons de l'algèbre linéaire que cela signifie qu'il existe une combinaison linéaire de colonnes de la matrice de conception (dont les coefficients ne sont pas tous nuls) qui est égal à zéro. J'ai inclus quelques exemples pratiques pour aider à expliquer pourquoi ce piège frappe si souvent - je les ai rencontrés presque tous!
Une variable est un multiple d'une autre , qu'il y ait ou non un terme d'interception: peut-être parce que vous avez enregistré deux fois la même variable en utilisant des unités différentes (par exemple, "la longueur en centimètres" est précisément 100 fois plus grande que la "longueur en mètres") ou parce que vous avez enregistré une variable une fois sous forme de nombre brut et une fois sous forme de proportion ou de pourcentage, lorsque le dénominateur est fixe (par exemple, "superficie de la boîte de Pétri colonisée" et "pourcentage de la boîte de Pétri colonisée" seront des multiples exacts l'un de l'autre si la zone de chaque boîte de Pétri est le même). Nous avons une colinéarité parce que si où et sont des variables (colonnes de votre matrice de conception) et est une constante scalaire, w x aest une combinaison linéaire de variables qui est égale à zéro.
Il existe un terme d'interception et une variable diffère d'une autre par une constante : cela se produira si vous centrez une variable ( ) et incluez à la fois brut et centré dans votre régression. Cela se produira également si vos variables sont mesurées dans différents systèmes d'unités qui diffèrent par une constante, par exemple si est "température en degrés kelvin" et comme "température en ° C" alors . Si nous considérons le terme d'interception comme une variable qui est toujours (représentée comme une colonne d' , , dans la matrice de conception), alors avoir pour une constantesignifie que est une combinaison linéaire des colonnes , et de la matrice de conception qui est égale à zéro.
Il existe un terme d'interception et une variable est donnée par une transformation affine d'une autre : c'est-à-dire que vous avez des variables et , liées par où et sont des constantes. Par exemple, cela se produit si vous standardisez une variable en tant que et incluez à la fois des variables brutes et normalisées dans votre régression. Cela se produit également si vous enregistrez comme "température en ° F" et comme "température en ° C", car ces systèmes unitaires ne partagent pas un zéro commun mais sont liés par. Ou dans un contexte commercial, supposons qu'il y ait un coût fixe (par exemple couvrant la livraison) pour chaque commande, ainsi qu'un coût par unité vendue; alors si est le coût de la commande et est le nombre d'unités commandées, nous avons . La combinaison linéaire d'intérêt est . Notez que si , alors (3) inclut (2) comme cas spécial; si , (3) inclut (1) comme cas spécial.
Il existe un terme d'interception et la somme de plusieurs variables est fixe (par exemple dans le fameux "piège variable factice") : par exemple si vous avez "pourcentage de clients satisfaits", "pourcentage de clients insatisfaits" et "pourcentage de clients non satisfaits" ni insatisfait ", ces trois variables totaliseront toujours (sauf erreur d'arrondi) à 100. L'une de ces variables - ou alternativement, le terme d'interception - doit être supprimée de la régression pour éviter la colinéarité. Le «piège des variables muettes» se produit lorsque vous utilisez des variables indicatrices (plus couramment mais moins utilement appelées «variables muettes») pour chaque niveau possible d'une variable catégorielle. Par exemple, supposons que les vases soient produits dans des jeux de couleurs rouge, vert ou bleu. Si vous avez enregistré la variable catégorielle "red
green
et blue
seraient des variables binaires, stockées comme 1
pour "oui" et 0
pour "non"), alors pour chaque vase, une seule des variables serait une, et donc red + green + blue = 1
. Puisqu'il existe un vecteur d'un pour le terme d'interception, la combinaison linéaire 1(red) + 1(green) + 1(blue) - 1(1) = 0
. Le remède habituel ici est soit de supprimer l'interception, soit de supprimer l'un des indicateurs (par exemple, laisser de côté red
) qui devient une ligne de base ou un niveau de référence. Dans ce cas, le coefficient de régression pour green
indiquerait le changement de la réponse moyenne associée au passage d'un vase rouge à un vase vert, en maintenant les autres variables explicatives constantes.
Il existe au moins deux sous-ensembles de variables, chacune ayant une somme fixe , qu'il existe ou non un terme d'interception: supposons que les vases dans (4) ont été produits en trois tailles, et que la variable catégorielle pour la taille a été stockée sous forme de trois variables indicatrices supplémentaires . Nous aurions large + medium + small = 1
. Ensuite, nous avons la combinaison linéaire 1(large) + 1(medium) + 1(small) - 1(red) - 1(green) - 1(blue) = 0
, même lorsqu'il n'y a pas de terme d'interception. Les deux sous-ensembles n'ont pas besoin de partager la même somme, par exemple si nous avons des variables explicatives telles que chaque et puis .
Une variable est définie comme une combinaison linéaire de plusieurs autres variables : par exemple, si vous enregistrez la longueur , la largeur et le périmètre de chaque rectangle, alors nous avons donc la combinaison linéaire . Un exemple avec un terme d'interception: supposons qu'une entreprise de vente par correspondance possède deux lignes de produits, et nous enregistrons que la commande composait de du premier produit au coût unitaire et du second au coût unitaire , avec frais de livraison fixes . Si nous incluons également le coût de la commande comme variable explicative, alors et ainsi . Il s'agit d'une généralisation évidente de (3). Cela nous donne également une façon différente de penser (4): une fois que nous connaissons toutes les barres d'un des sous-ensembles de variables dont la somme est fixe, alors la dernière est leur complément et peut donc être exprimée comme une combinaison linéaire entre elles et leur somme . Si nous savons que 50% des clients étaient satisfaits et 20% étaient insatisfaits, alors 100% - 50% - 20% = 30% ne doivent être ni satisfaits ni insatisfaits; si nous savons que le vase n'est pas rouge ( ) et qu'il est vert ( ), alors nous savons qu'il n'est pas bleu ( ).red=0
green=1
blue = 1(1) - 1(red) - 1(green) = 1 - 0 - 1 = 0
Une variable est constante et nulle , qu'il y ait ou non un terme d'interception: dans une étude observationnelle, une variable sera constante si votre échantillon ne présente pas (tout!) De variation suffisante. Il peut y avoir des variations dans la population qui ne sont pas capturées dans votre échantillon, par exemple s'il existe une valeur modale très courante: peut-être que votre taille d'échantillon est trop petite et qu'il était donc peu probable qu'elle inclue des valeurs qui différaient du mode, ou vos mesures étaient insuffisamment précis pour détecter de petites variations du mode. Alternativement, il peut y avoir des raisons théoriques pour le manque de variation, en particulier si vous étudiez une sous-population. Dans une étude des nouvelles constructions à Los Angeles, il ne serait pas surprenant que chaque point de données ait AgeOfProperty = 0
etState = California
! Dans une étude expérimentale, vous avez peut-être mesuré une variable indépendante qui est sous contrôle expérimental. Si l'une de vos variables explicatives est à la fois constante et nulle, alors nous avons immédiatement que la combinaison linéaire (avec le coefficient zéro pour toutes les autres variables) est .
Il existe un terme d'interception et au moins une variable est constante : si est constant de sorte que chaque , alors la combinaison linéaire .
Au moins deux variables sont constantes , qu'il existe ou non un terme d'interception: si chaque et , alors la combinaison linéaire .
Le nombre de colonnes de la matrice de conception, , dépasse le nombre de lignes, : même en l'absence de relation conceptuelle entre vos variables, il est mathématiquement nécessaire que les colonnes de votre matrice de conception soient linéairement dépendantes lorsque . Il n'est tout simplement pas possible d'avoir vecteurs linéairement indépendants dans un espace avec un nombre de dimensions inférieur à : par exemple, alors que vous pouvez dessiner deux vecteurs indépendants sur une feuille de papier (un plan bidimensionnel,), tout autre vecteur dessiné sur la page doit se situer dans leur étendue, et donc être une combinaison linéaire d'entre eux. Notez qu'un terme d'interception contribue une colonne de uns à la matrice de conception, donc compte comme l'une de vos colonnes. (Ce scénario est souvent appelé le problème "grand , petit ": voir aussi cette question CV connexe .)
Exemples de données avec code R
Chaque exemple donne une matrice de conception , la matrice (notez qu'elle est toujours carrée et symétrique) et . Notez que si est singulier (déterminant zéro, donc non inversible) alors nous ne pouvons pas estimer . La condition que soit non singulier est équivalente à la condition que ait un rang complet donc ses colonnes sont linéairement indépendantes: voir cette question Math SE , ou celle-ci et son inverse .
(1) Une colonne est multiple d'une autre
# x2 = 2 * x1
# Note no intercept term (column of 1s) is needed
X <- matrix(c(2, 4, 1, 2, 3, 6, 2, 4), ncol = 2, byrow=TRUE)
X
# [,1] [,2]
#[1,] 2 4
#[2,] 1 2
#[3,] 3 6
#[4,] 2 4
t(X) %*% X
# [,1] [,2]
#[1,] 18 36
#[2,] 36 72
round(det(t(X) %*% X), digits = 9)
#0
(2) Terme d'interception et une variable diffère d'une autre par une constante
# x1 represents intercept term
# x3 = x2 + 2
X <- matrix(c(1, 2, 4, 1, 1, 3, 1, 3, 5, 1, 0, 2), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 2 4
#[2,] 1 1 3
#[3,] 1 3 5
#[4,] 1 0 2
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 4 6 14
#[2,] 6 14 26
#[3,] 14 26 54
round(det(t(X) %*% X), digits = 9)
#0
# NB if we drop the intercept, cols now linearly independent
# x2 = x1 + 2 with no intercept column
X <- matrix(c(2, 4, 1, 3, 3, 5, 0, 2), ncol = 2, byrow=TRUE)
X
# [,1] [,2]
#[1,] 2 4
#[2,] 1 3
#[3,] 3 5
#[4,] 0 2
t(X) %*% X
# [,1] [,2]
#[1,] 14 26
#[2,] 26 54
# Can you see how this matrix is related to the previous one, and why?
round(det(t(X) %*% X), digits = 9)
#80
# Non-zero determinant so X'X is invertible
(3) Terme d'interception et une variable est la transformation affine d'une autre
# x1 represents intercept term
# x3 = 2*x2 - 3
X <- matrix(c(1, 2, 1, 1, 1, -1, 1, 3, 3, 1, 0, -3), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 2 1
#[2,] 1 1 -1
#[3,] 1 3 3
#[4,] 1 0 -3
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 4 6 0
#[2,] 6 14 10
#[3,] 0 10 20
round(det(t(X) %*% X), digits = 9)
#0
# NB if we drop the intercept, cols now linearly independent
# x2 = 2*x1 - 3 with no intercept column
X <- matrix(c(2, 1, 1, -1, 3, 3, 0, -3), ncol = 2, byrow=TRUE)
X
# [,1] [,2]
#[1,] 2 1
#[2,] 1 -1
#[3,] 3 3
#[4,] 0 -3
t(X) %*% X
# [,1] [,2]
#[1,] 14 10
#[2,] 10 20
# Can you see how this matrix is related to the previous one, and why?
round(det(t(X) %*% X), digits = 9)
#180
# Non-zero determinant so X'X is invertible
(4) Le terme d'interception et la somme de plusieurs variables sont fixes
# x1 represents intercept term
# x2 + x3 = 10
X <- matrix(c(1, 2, 8, 1, 1, 9, 1, 3, 7, 1, 0, 10), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 2 8
#[2,] 1 1 9
#[3,] 1 3 7
#[4,] 1 0 10
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 4 6 34
#[2,] 6 14 46
#[3,] 34 46 294
round(det(t(X) %*% X), digits = 9)
#0
# NB if we drop the intercept, then columns now linearly independent
# x1 + x2 = 10 with no intercept column
X <- matrix(c(2, 8, 1, 9, 3, 7, 0, 10), ncol = 2, byrow=TRUE)
X
# [,1] [,2]
#[1,] 2 8
#[2,] 1 9
#[3,] 3 7
#[4,] 0 10
t(X) %*% X
# [,1] [,2]
#[1,] 14 46
#[2,] 46 294
# Can you see how this matrix is related to the previous one, and why?
round(det(t(X) %*% X), digits = 9)
#2000
# Non-zero determinant so X'X is invertible
(4a) Terme d'interception avec piège variable factice
# x1 represents intercept term
# x2 + x3 + x4 = 1
X <- matrix(c(1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0), ncol = 4, byrow=TRUE)
X
# [,1] [,2] [,3] [,4]
#[1,] 1 0 0 1
#[2,] 1 1 0 0
#[3,] 1 0 1 0
#[4,] 1 1 0 0
#[5,] 1 0 1 0
t(X) %*% X
# [,1] [,2] [,3] [,4]
#[1,] 5 2 2 1
#[2,] 2 2 0 0
#[3,] 2 0 2 0
#[4,] 1 0 0 1
# This matrix has a very natural interpretation - can you work it out?
round(det(t(X) %*% X), digits = 9)
#0
# NB if we drop the intercept, then columns now linearly independent
# x1 + x2 + x3 = 1 with no intercept column
X <- matrix(c(0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 0 0 1
#[2,] 1 0 0
#[3,] 0 1 0
#[4,] 1 0 0
#[5,] 0 1 0
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 2 0 0
#[2,] 0 2 0
#[3,] 0 0 1
# Can you see how this matrix is related to the previous one?
round(det(t(X) %*% X), digits = 9)
#4
# Non-zero determinant so X'X is invertible
(5) Deux sous-ensembles de variables à somme fixe
# No intercept term needed
# x1 + x2 = 1
# x3 + x4 = 1
X <- matrix(c(0,1,0,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,0), ncol = 4, byrow=TRUE)
X
# [,1] [,2] [,3] [,4]
#[1,] 0 1 0 1
#[2,] 1 0 0 1
#[3,] 0 1 1 0
#[4,] 1 0 0 1
#[5,] 1 0 1 0
#[6,] 0 1 1 0
t(X) %*% X
# [,1] [,2] [,3] [,4]
#[1,] 3 0 1 2
#[2,] 0 3 2 1
#[3,] 1 2 3 0
#[4,] 2 1 0 3
# This matrix has a very natural interpretation - can you work it out?
round(det(t(X) %*% X), digits = 9)
#0
(6) Une variable est une combinaison linéaire d'autres
# No intercept term
# x3 = x1 + 2*x2
X <- matrix(c(1,1,3,0,2,4,2,1,4,3,1,5,1,2,5), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 1 3
#[2,] 0 2 4
#[3,] 2 1 4
#[4,] 3 1 5
#[5,] 1 2 5
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 15 8 31
#[2,] 8 11 30
#[3,] 31 30 91
round(det(t(X) %*% X), digits = 9)
#0
(7) Une variable est constante et nulle
# No intercept term
# x3 = 0
X <- matrix(c(1,1,0,0,2,0,2,1,0,3,1,0,1,2,0), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 1 0
#[2,] 0 2 0
#[3,] 2 1 0
#[4,] 3 1 0
#[5,] 1 2 0
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 15 8 0
#[2,] 8 11 0
#[3,] 0 0 0
round(det(t(X) %*% X), digits = 9)
#0
(8) Terme d'interception et une variable constante
# x1 is intercept term, x3 = 5
X <- matrix(c(1,1,5,1,2,5,1,1,5,1,1,5,1,2,5), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 1 5
#[2,] 1 2 5
#[3,] 1 1 5
#[4,] 1 1 5
#[5,] 1 2 5
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 5 7 25
#[2,] 7 11 35
#[3,] 25 35 125
round(det(t(X) %*% X), digits = 9)
#0
(9) Deux variables constantes
# No intercept term, x2 = 2, x3 = 5
X <- matrix(c(1,2,5,2,2,5,1,2,5,1,2,5,2,2,5), ncol = 3, byrow=TRUE)
X
# [,1] [,2] [,3]
#[1,] 1 2 5
#[2,] 2 2 5
#[3,] 1 2 5
#[4,] 1 2 5
#[5,] 2 2 5
t(X) %*% X
# [,1] [,2] [,3]
#[1,] 11 14 35
#[2,] 14 20 50
#[3,] 35 50 125
round(det(t(X) %*% X), digits = 9)
#0
(10)
# Design matrix has 4 columns but only 3 rows
X <- matrix(c(1,1,1,1,1,2,4,8,1,3,9,27), ncol = 4, byrow=TRUE)
X
# [,1] [,2] [,3] [,4]
#[1,] 1 1 1 1
#[2,] 1 2 4 8
#[3,] 1 3 9 27
t(X) %*% X
# [,1] [,2] [,3] [,4]
#[1,] 3 6 14 36
#[2,] 6 14 36 98
#[3,] 14 36 98 276
#[4,] 36 98 276 794
round(det(t(X) %*% X), digits = 9)
#0
Il existe une multitude de façons telles qu'une colonne de données sera une fonction linéaire de vos autres données. Certains d'entre eux sont évidents (par exemple, les mètres par rapport aux centimètres) tandis que d'autres peuvent être plus subtils (par exemple, l'âge et les années de scolarité pour les jeunes enfants).
Notes de notation: Soit dénoter la première colonne de , la deuxième colonne etc ..., et dénote un vecteur de ceux qui est inclus dans la matrice de conception X si vous incluez une constante dans votre régression. X x 2 1