2016-04-15 7 views
2

Ich habe einen Datenrahmen mit der folgenden Struktur:Gruppierungsfehler mit LMER

> t <- read.csv("combinedData.csv")[,1:7] 
> str(t) 
'data.frame': 699 obs. of 7 variables: 
$ Awns    : int 0 0 0 0 0 0 0 0 1 0 ... 
$ Funnel    : Factor w/ 213 levels "MEL001","MEL002",..: 1 1 2 2 2 3 4 4 4 4 ... 
$ Plant    : int 1 2 1 3 8 1 1 2 3 5 ... 
$ Line    : Factor w/ 8 levels "a","b","c","cA",..: 2 2 1 1 1 3 1 1 1 1 ... 
$ X     : int 1 2 3 4 7 8 9 10 11 12 ... 
$ ID     : Factor w/ 699 levels "MEL_001-1b","MEL_001-2b",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ BobWhite_c10082_241: int 2 2 2 2 2 2 0 2 2 0 ... 

Ich möchte ein Mischeffekt-Modell konstruieren. Ich weiß in meinem Datenrahmen, dass der Zufallseffekt I (Funnel) ist ein Faktor enthalten sein sollen, aber es funktioniert nicht:

> lmer(t$Awns ~ (1|t$Funnel) + t$BobWhite_c10082_241) 
Error: couldn't evaluate grouping factor t$Funnel within model frame: try adding grouping factor to data frame explicitly if possible 

In der Tat dies geschieht, was ich als Zufallseffekt einschließen möchten z.B. Werk:

> lmer(t$Awns ~ (1|t$Plant) + t$BobWhite_c10082_241) 
Error: couldn't evaluate grouping factor t$Plant within model frame: try adding grouping factor to data frame explicitly if possible 

Warum gibt R mir diesen Fehler? Die einzige andere Antwort, die ich googlen konnte, ist, dass der zugeführte Zufallseffekt kein Faktor im DF war. Aber wie str zeigt, ist df $ Trichter sicherlich.

+4

Sie sollten wirklich den Parameter 'data' verwenden:' lmer (Awns ~ (1 | Trichter) + BobWhite_c10082_241, data = t) 'Seltsame Dinge können passieren, wenn Sie dieser Praxis nicht folgen (auch mit anderen Modellen Funktionen wie 'lm'). – Roland

+0

Das löst es tatsächlich komplett! Erstellen Sie eine Antwort und ich werde es akzeptiert. – Ward9250

+0

@Roland, bitte als Antwort posten? –

Antwort

2

Es ist eigentlich nicht so einfach, eine bequeme Syntax für Modellierungsfunktionen bereitzustellen und gleichzeitig eine robuste Implementierung zu haben. Die meisten Paketautoren gehen davon aus, dass Sie den Parameter data verwenden, und selbst dann können Probleme mit dem Umfang auftreten. So können seltsame Dinge passieren, wenn Sie Variablen mit DF$col Syntax angeben, da Paketautoren selten viel Mühe darauf verwenden, dass dies richtig funktioniert, und viele Unit-Tests dafür nicht enthalten. Es wird daher dringend empfohlen, den Parameter data zu verwenden, wenn die Modellfunktion eine formula-Methode bietet. Seltsame Dinge können passieren, wenn Sie dieser Praxis nicht folgen (auch mit anderen Modellfunktionen wie lm).

In Ihrem Beispiel:

lmer(Awns ~ (1|Funnel) + BobWhite_c10082_241, data = t) 

Dies funktioniert nicht nur, sondern ist auch bequemer zu schreiben.

Verwandte Themen