lme4

2011-10-25 10 views
5

Cosa c'è di sbagliato con il seguente modello:lme4

# simulated data yr = 2; vg = 4, fm = 5, gen = 5 
    mbb <- data.frame(trait1 = rnorm(200, 15, 4),yr = c(rep (1:2, each = 100)), 
    vg = c(rep(rep(1:4, each =25), 2)), fm = rep(rep(1:5, each = 5), 8), 
    gen = sample(c(1:5), 200, replace = T)) 
    require(lme4) 
    lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fm:vg), data= mbb)# full model 

sto ottenendo seguente errore:

Error in validObject(.Object) : 
    invalid class "mer" object: Slot Zt must by dims['q'] by dims['n']*dims['s'] 
In addition: Warning messages: 
1: In fm:vg : numerical expression has 200 elements: only the first used 
2: In fm:vg : numerical expression has 200 elements: only the first used 
+0

Non sembra gradire il bit di interazione del tuo effetto casuale. Cambia 'gen | fm: vg' in' gen | fm' e gira. Non ancora sicuro del significato di questo. –

risposta

7

Il problema è proprio quello fm e vg sono memorizzati come numerico, non come fattori, e così lmer cerca di interpretare fm:vg come operatore sequenza (vedi ?seq) piuttosto che un operatore di interazione (vedi ?interaction). È possibile:

  • convertito fm e vg a fattori all'interno del frame di dati (mbb <- transform(mbb,vg=factor(vg),fm=factor(fm))) [non è chiaro dal vostro setup se si desidera vg e fm di essere fattori o predittori continui ... che differenza sarebbe molto importante, naturalmente ... se li desidera come predittori continui, quindi è un po 'strano di trattarli come fattori ai fini del raggruppamento ...]
  • scrivere l'interazione in modo esplicito come interaction(fm,vg) al volo
  • convertire in fattori al volo ((yr+vg+gen|factor(fm):factor(vg)))
  • uso soluzione di Jim M.

    Io penso questi saranno tutti i lavori, anche se devo ammettere che non li ho ancora testato.

3

Una possibile soluzione per modellare l'interazione come un effetto casuale è quello di aggiungere il termine di interazione come colonna aggiuntiva nel frame di dati di mbb.

mbb$fmvg <- with(mbb, interaction(fm,vg, sep=":")) 

il modello diventa quindi

lmer(trait1 ~ (yr + vg + gen)^3 + (yr + vg + gen|fmvg), data= mbb) 
Problemi correlati