2016-11-21 4 views
2

Je ne veux pas principal effet parce qu'il est colinéaires avec un facteur plus fin effet fixe, il est donc ennuyeux d'avoir ces NA.Comment utiliser la formule en R pour exclure l'effet mais conserver l'interaction

Dans cet exemple:

lm(y ~ x * z) 

Je veux l'interaction de x (numérique) et z (facteur), mais pas l'effet principal de z.

+0

si 'fz <- facteur (z)' (juste pour la notation), alors 'x: fz' doit travailler dans un sens (il partitionne la variabilité dans les données différemment), mais il construira un modèle qui est * équivalent * en termes de complexité, de qualité d'ajustement, etc. à 'x * fz'. –

+0

@ZheyuanLi oui c'est correct, Ben est-il correct? – robertevansanders

Répondre

2

De votre question, x est numérique. En supposant que vous avez z comme facteur déjà, la spécification que vous voulez est:

y ~ x + x:z 

Depuis x est numérique, il est équivalent à faire

y ~ x:z 

La seule différence ici est paramétrisation (voir exemples ci-dessous) . Mais si x est un facteur aussi, ces deux spécifications sont différentes que vous pouvez lire Why do I get NA coefficients and how does lm drop reference level for interaction.

Tenir compte un petit exemple:

set.seed(0) 
y <- rnorm(10) 
x <- rnorm(10) 
z <- gl(2, 5, labels = letters[1:2]) 

fit1 <- lm(y ~ x + x:z) 
#Coefficients: 
#(Intercept)   x   x:zb 
#  0.1989  -0.1627  -0.5456 

fit2 <- lm(y ~ x:z) 
#Coefficients: 
#(Intercept)   x:za   x:zb 
#  0.1989  -0.1627  -0.7082 

Vous pouvez vérifier l'équivalence

all.equal(fit1$fitted, fit2$fitted) 
# [1] TRUE 
1

Ceci est une très bonne explication, mais permettez-moi d'ajouter une chose quand dans le processus de sélection des prédicteurs significatifs .

Considérons à nouveau le modèle suivant:

fit1 <- lm(y ~ x + x:z) 
#Coefficients: 
#(Intercept)   x   x:zb 
#  0.1989  -0.1627  -0.5456 

Supposons que l'effet principal x n'est pas statistiquement significative et vous voulez vous en débarrasser. La chose la plus intuitive, du moins pour moi, est d'écrire le deuxième modèle comme ci-dessus:

fit2 <- lm(y ~ x:z) 
#Coefficients: 
#(Intercept)   x:za   x:zb 
#  0.1989  -0.1627  -0.7082 

qui met finalement en arrière l'effet principal masqué que l'interaction avec le niveau de référence du facteur. Maintenant, la seule solution que j'ai pu trouver afin d'inclure vraiment pas d'effets principaux est d'exploiter lm.fit qui, comme vous le savez tous, ne retourne pas un objet de classe lm, mais un list. Donc la question est: connaissez-vous une méthode pour se débarrasser des effets principaux sans perdre la classe lm?

+0

Donc, si les modèles sont égaux (les valeurs ajustées sont identiques), pourquoi les coefficients 'x: zb' sont-ils différents? Y a-t-il une différence dans l'interprétation de l'interaction «x: zb» entre les modèles? Je viens de poster cette question sur SE (https://stats.stackexchange.com/q/280265/161806) qui semble liée, soin de jeter un oeil? – wibom