2016-10-10 1 views
4

Je comprends que d'avoir une variable continue ou numérique en tant qu'effet aléatoire dans un modèle d'effets mixtes n'a pas beaucoup de sens (par exemple, voir here).Les variables d'effets aléatoires sont-elles automatiquement considérées comme des facteurs dans lmer (ou lme) dans R?

Mais ce que je me demande est si lme4::lmer ou nlme::lme en R vous empêche délibérément de le faire ...

Plus précisément, ce que je demande est: si je l'offre lmer (ou lme) tout non variable factorielle (non catégorielle) en tant qu'effet aléatoire, la fonction la traite-t-elle automatiquement comme un facteur?

Insertion factor() directement dans lmer (ce qui est la méthode habituelle pour l'utilisation de lm) produit l'erreur suivante:

lmer(y ~ z + (1|factor(x)), data = dat) 
Error: couldn't evaluate grouping factor factor(x) within model frame: try adding grouping factor to data frame explicitly if possible 

Bien que l'erreur ci-dessus mentionne l'addition d'un facteur de groupement directement aux données, il n'a pas préciser si le facteur de regroupement a besoin de pour être un facteur (ou est-ce peut-être implicite du mot choix)? Je comprends qu'il est assez simple de créer simplement une nouvelle variable de classe de facteur directement à partir de mes données, mais je suis juste curieux de savoir si c'est vraiment nécessaire lorsque vous utilisez lmer (ou lme).

Répondre

2

Cela ne semble pas important.

library(lme4) 

sl <- sleepstudy 
sl$Subject <- as.numeric(levels(sl$Subject))[sl$Subject] 

## subject as factor 
m1 <- lmer(Reaction ~ Days + (1|Subject), data = sleepstudy) 

## subject as numeric 
m2 <- update(m1, data = sl) 

all.equal(VarCorr(m1), VarCorr(m2)) 
# TRUE 

Vérification du reste de l'objet, l'appel est différent (ce qui est logique, j'ai appelé la trame de données quelque chose de différent), et le cadre est différent (en raison de la différence numérique par rapport à des facteurs dans sujet). Tout le reste est identique.

all.equal(m1, m2) 
#[1] "Attributes: < Component “call”: target, current do not match when deparsed >"  
#[2] "Attributes: < Component “frame”: Component “Subject”: 'current' is not a factor >" 

facteurs de regroupement sont soumis à factorize() au sein mkBlist(), qui est appelée à l'intérieur mkReTrms(), ce qui crée la matrice de modèle pour les effets aléatoires. factorize() est une aide qui appelle finalement factor(x) sur les termes de droite dans la formule des effets aléatoires (à condition que ce soit déjà un facteur, etc.)

+0

Merci pour vos commentaires! C'est une réponse un peu superficielle (répondre à la question en gras "la fonction la traite-elle automatiquement comme un facteur?" Plutôt que "pourquoi" appeler une fonction dans la partie RE de la formule ne fonctionne pas). Ce n'est pas quelque chose que je comprends assez bien pour commenter, voudriez-vous ajouter une réponse à ce sujet? – alexforrence

+0

@alexforrence merci Alex c'est utile. Où/comment avez-vous déterminé votre dernier paragraphe ("Grouping factors ... etc.)"? – theforestecologist

+1

@theforestecologist généralement de la source à https://github.com/lme4/lme4/blob/master/R/utilities.R, y at-il un peu spécifique qui n'a pas de sens? – alexforrence