Warum geben lme und aov bei ANOVA mit wiederholten Messungen in R unterschiedliche Ergebnisse zurück?


24

Ich versuche, von der Verwendung des ezPakets zu lmeANOVA für wiederholte Messungen überzugehen (da ich hoffe, dass ich benutzerdefinierte Kontraste verwenden kann lme).

Den Ratschlägen dieses Blogposts folgend, konnte ich dasselbe Modell mit sowohl aov(als auch auf ezAnfrage) als auch einrichten lme. Während in dem Beispiel in diesem Beitrag die F- Werte perfekt zwischen aovund übereinstimmen lme(ich habe es überprüft und sie tun es), ist dies für meine Daten nicht der Fall. Obwohl die F- Werte ähnlich sind, sind sie nicht gleich.

aovgibt einen f-Wert von 1.3399 zurück, lmegibt 1.36264 zurück. Ich bin bereit, das aovErgebnis als das "richtige" zu akzeptieren, da dies auch das ist, was SPSS zurückgibt (und dies ist das, was für mein Feld / meinen Vorgesetzten zählt).

Fragen:

  1. Es wäre großartig, wenn jemand erklären könnte, warum dieser Unterschied besteht und wie ich lmeglaubwürdige Ergebnisse erzielen kann. (Ich wäre auch bereit, lmeranstelle von lmefür diese Art von Sachen zu verwenden, wenn es das "richtige" Ergebnis gibt. Allerdings habe ich es bisher nicht verwendet.)

  2. Nach der Lösung dieses Problems möchte ich eine Kontrastanalyse durchführen. Insbesondere würde mich der Kontrast interessieren, die ersten beiden Faktorebenen (dh c("MP", "MT")) zusammenzufassen und diese mit der dritten Faktorebene (dh "AC") zu vergleichen. Testen des dritten gegenüber dem vierten Faktor (dh "AC"gegenüber "DA").

Daten:

tau.base <- structure(list(id = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 
22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
19L, 20L, 21L, 22L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L), .Label = c("A18K", 
"D21C", "F25E", "G25D", "H05M", "H07A", "H08H", "H25C", "H28E", 
"H30D", "J10G", "J22J", "K20U", "M09M", "P20E", "P26G", "P28G", 
"R03C", "U21S", "W08A", "W15V", "W18R"), class = "factor"), factor = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("MP", "MT", "AC", "DA"
), class = "factor"), value = c(0.9648092876, 0.2128662077, 1, 
0.0607615485, 0.9912814024, 3.22e-08, 0.8073856412, 0.1465590332, 
0.9981672618, 1, 1, 1, 0.9794401938, 0.6102546108, 0.428651501, 
1, 0.1710644881, 1, 0.7639763913, 1, 0.5298989196, 1, 1, 0.7162733447, 
0.7871177434, 1, 1, 1, 0.8560509327, 0.3096989662, 1, 8.51e-08, 
0.3278862311, 0.0953598576, 1, 1.38e-08, 1.07e-08, 0.545290432, 
0.1305621416, 2.61e-08, 1, 0.9834051136, 0.8044114935, 0.7938839461, 
0.9910112678, 2.58e-08, 0.5762677121, 0.4750002288, 1e-08, 0.8584252623, 
1, 1, 0.6020385797, 8.51e-08, 0.7964935271, 0.2238374288, 0.263377904, 
1, 1.07e-08, 0.3160751898, 5.8e-08, 0.3460325565, 0.6842217296, 
1.01e-08, 0.9438301877, 0.5578367224, 2.18e-08, 1, 0.9161424562, 
0.2924856039, 1e-08, 0.8672987992, 0.9266688748, 0.8356425464, 
0.9988463913, 0.2960361777, 0.0285680426, 0.0969063841, 0.6947998266, 
0.0138254805, 1, 0.3494775301, 1, 2.61e-08, 1.52e-08, 0.5393467752, 
1, 0.9069223275)), .Names = c("id", "factor", "value"), class = "data.frame", row.names = c(1L, 
6L, 10L, 13L, 16L, 17L, 18L, 22L, 23L, 24L, 27L, 29L, 31L, 33L, 
42L, 43L, 44L, 45L, 54L, 56L, 58L, 61L, 64L, 69L, 73L, 76L, 79L, 
80L, 81L, 85L, 86L, 87L, 90L, 92L, 94L, 96L, 105L, 106L, 107L, 
108L, 117L, 119L, 121L, 124L, 127L, 132L, 136L, 139L, 142L, 143L, 
144L, 148L, 149L, 150L, 153L, 155L, 157L, 159L, 168L, 169L, 170L, 
171L, 180L, 182L, 184L, 187L, 190L, 195L, 199L, 202L, 205L, 206L, 
207L, 211L, 212L, 213L, 216L, 218L, 220L, 222L, 231L, 232L, 233L, 
234L, 243L, 245L, 247L, 250L))

Und der Code:

require(nlme)

summary(aov(value ~ factor+Error(id/factor), data = tau.base))

anova(lme(value ~ factor, data = tau.base, random = ~1|id))

Es sieht so aus, als hätten Sie in Ihrer Antwort hier nur den Teil über die Kontraste selbst beantwortet . Wenn nicht, bearbeiten Sie diese Frage, damit wir wissen, welche Schwierigkeiten noch bestehen.
Aaron - Reinstate Monica

2
@Aaron, solange es Unterschiede in den lmeErgebnissen des Standardlehrbuchs ANOVA gibt (gegeben durch aovund was ich brauche), ist dies für mich keine Option. In meiner Arbeit möchte ich eine ANOVA melden, nicht so etwas wie eine ANOVA. Interessanterweise zeigen Venables & Ripley (2002, S. 285), dass beide Ansätze zu identischen Schätzungen führen. Aber die Unterschiede in den F- Werten hinterlassen ein schlechtes Gefühl. Darüber hinaus gibt Anova()(from car) nur Chi²-Werte für lmeObjekte zurück. Daher ist meine erste Frage für mich noch nicht beantwortet.
Henrik

Ich verstehe (aber teile nicht) deine Vorsicht gegenüber lme; Aber für Kontraste glhtfunktioniert auch die lmAnpassung, nicht nur die lmeAnpassung. (Auch die lmeErgebnisse sind Standard-Lehrbuchergebnisse.)
Aaron - Reinstate Monica

Leider können Sie lmfür eine wiederholte Messung keine Analyse angeben . Nur aovkann mit wiederholten Messungen befassen , sondern wird ein Objekt der Klasse zurückgeben , aovlistdie leider gehandhabt wird nicht durch glht.
Henrik

3
lmverwendet den Restfehler als Fehlerbegriff für alle Effekte; Wenn es Effekte gibt, die einen anderen Fehlerausdruck verwenden sollten, aovist dies erforderlich (oder verwenden Sie stattdessen die Ergebnisse von lm, um die F-Statistiken manuell zu berechnen). In Ihrem Beispiel ist der Fehlerterm für factordie id:factorInteraktion, dh der Restfehlerterm in einem additiven Modell. Vergleichen Sie Ihre Ergebnisse mit anova(lm(value~factor+id)).
Aaron - Reinstate Monica

Antworten:


28

Sie unterscheiden sich, weil das IME-Modell die Varianzkomponente zwingt id, größer als Null zu sein. Wenn wir die rohe Anova-Tabelle für alle Terme betrachten, sehen wir, dass der mittlere quadratische Fehler für id kleiner ist als der für die Residuen.

> anova(lm1 <- lm(value~ factor+id, data=tau.base))

          Df  Sum Sq Mean Sq F value Pr(>F)
factor     3  0.6484 0.21614  1.3399 0.2694
id        21  3.1609 0.15052  0.9331 0.5526
Residuals 63 10.1628 0.16131   

Wenn wir die Varianzkomponenten berechnen, bedeutet dies, dass die Varianz aufgrund von id negativ ist. Mein Gedächtnis des erwarteten Gedächtnisses der mittleren Quadrate ist wackelig, aber die Berechnung ist ungefähr so

(0.15052-0.16131)/3 = -0.003597.

Das klingt seltsam, kann aber passieren. Dies bedeutet, dass die Durchschnittswerte für jede ID näher beieinander liegen, als Sie es aufgrund der verbleibenden Abweichungen im Modell erwarten würden.

Im Gegensatz dazu erzwingt die Verwendung von lme, dass diese Varianz größer als Null ist.

> summary(lme1 <- lme(value ~ factor, data = tau.base, random = ~1|id))
...
Random effects:
 Formula: ~1 | id
        (Intercept)  Residual
StdDev: 3.09076e-05 0.3982667

Hier werden Standardabweichungen angegeben, die quadriert werden, um die Varianzausbeuten 9.553e-10für die ID-Varianz und 0.1586164für die Restvarianz zu erhalten.

Nun sollten Sie wissen, dass die Verwendung aovfür wiederholte Messungen nur dann sinnvoll ist, wenn Sie der Ansicht sind, dass die Korrelation zwischen allen Paaren wiederholter Messungen identisch ist. Dies nennt man zusammengesetzte Symmetrie. (Technisch gesehen Rundheitsgrad erforderlich ist , aber das ist jetzt ausreichend.) Ein Grund für die Verwendung lmeüber aovist , dass es verschiedene Arten von Korrelationsstrukturen umgehen kann.

In diesem bestimmten Datensatz ist die Schätzung für diese Korrelation negativ; Dies erklärt, warum der mittlere quadratische Fehler für id kleiner war als der verbleibende quadratische Fehler. Eine negative Korrelation bedeutet, dass die erste Messung eines Individuums unter dem Durchschnitt liegt und die zweite Messung über dem Durchschnitt liegt, wodurch die Gesamtdurchschnittswerte für das Individuum weniger variabel sind, als wir es bei einer Nullkorrelation oder einer positiven Korrelation erwarten würden.

Die Verwendung lmemit einem Zufallseffekt entspricht der Anpassung eines zusammengesetzten Symmetriemodells, bei dem diese Korrelation nicht negativ sein muss. Wir können ein Modell anpassen, in dem die Korrelation negativ sein darf, indem wir verwenden gls:

> anova(gls1 <- gls(value ~ factor, correlation=corCompSymm(form=~1|id),
                    data=tau.base))
Denom. DF: 84 
            numDF   F-value p-value
(Intercept)     1 199.55223  <.0001
factor          3   1.33985   0.267

Diese ANOVA-Tabelle stimmt mit der Tabelle von der aovPassform und von der lmPassform überein .

In Ordnung und jetzt? Wenn Sie der Meinung sind, dass die Varianz von idund die Korrelation zwischen Beobachtungen nicht negativ sein sollten, ist die lmeAnpassung tatsächlich geeigneter als die Anpassung unter Verwendung von aovoder lmweil ihre Schätzung der Restvarianz etwas besser ist. Wenn Sie jedoch die Korrelation zwischen Beobachtungen glauben könnte negativ sein aovoder lmoder glsbesser ist.

Sie könnten auch daran interessiert sein, die Korrelationsstruktur weiter zu untersuchen. Um eine allgemeine Korrelationsstruktur zu betrachten, würden Sie so etwas tun

gls2 <- gls(value ~ factor, correlation=corSymm(form=~unclass(factor)|id),
data=tau.base)

Hier beschränke ich die Ausgabe nur auf die Korrelationsstruktur. Die Werte 1 bis 4 stehen für die vier Stufen von factor; Wir sehen, dass Faktor 1 und Faktor 4 eine ziemlich starke negative Korrelation haben:

> summary(gls2)
...
Correlation Structure: General
 Formula: ~unclass(factor) | id 
 Parameter estimate(s):
 Correlation: 
  1      2      3     
2  0.049              
3 -0.127  0.208       
4 -0.400  0.146 -0.024

Eine Möglichkeit, zwischen diesen Modellen zu wählen, ist ein Likelihood-Ratio-Test. Dies zeigt, dass das Zufallseffektmodell und das allgemeine Korrelationsstrukturmodell sich statistisch nicht signifikant unterscheiden. In diesem Fall wird normalerweise das einfachere Modell bevorzugt.

> anova(lme1, gls2)
     Model df      AIC      BIC    logLik   Test  L.Ratio p-value
lme1     1  6 108.0794 122.6643 -48.03972                        
gls2     2 11 111.9787 138.7177 -44.98936 1 vs 2 6.100725  0.2965

2
Es ist tatsächlich möglich, die Verbindungssymmetrie mit lmezu verwenden, um die gleichen Ergebnisse wie mit aov(und damit lmefür alle ANOVAs) zu erhalten, und zwar unter Verwendung des Korrelationsarguments in der Aufforderung an lme:anova(lme(value ~ factor, data = tau.base, random = ~1|id, correlation = corCompSymm(form = ~1|id)))
Henrik,

1
Schöner Fund. Aber passt da nicht ein zusätzlicher Parameter? Es hat drei Varianzparameter; Varianz für id, Restvarianz und die Korrelation, während die gls nur eine Restvarianz und eine Korrelation hat.
Aaron - Reinstate Monica

1
Ihr Argument klingt plausibel, die Ergebnisse stimmen jedoch nicht überein. Alle die anova Tabellen ( aov, lmeohne Verbindung Symmetrie und lmemit Verbindung Symmetrie) haben genau die gleiche Anzahl von dfs.
Henrik

1
Sie müssen mich davon überzeugen, dass diese drei Parameter wirklich eine Überparametrisierung der ersten beiden sind. Hast du herausgefunden, wie sie zusammenhängen?
Aaron - Reinstate Monica

1
Ich vertraue der Ausgabe von anova.lme(). Aus Ihrer Antwort ging hervor, dass die Beziehung zwischen der ANOVA und den gemischten Modellen in ihrer Korrelationsstruktur liegt. Ich habe dann gelesen, dass das Auferlegen einer kompundsymmetrischen Korrelationsstruktur zur Gleichheit zwischen den beiden Ansätzen führt. Deshalb habe ich es auferlegt. Ich habe keine Ahnung, ob dies einen anderen DF auffrisst. Die Ausgabe ist jedoch mit dieser Interpretation nicht einverstanden.
Henrik

2

aov()passt das Modell über die lm()Verwendung der kleinsten Quadrate, lmepasst über die maximale Wahrscheinlichkeit. Dieser Unterschied in der Art und Weise, wie die Parameter des linearen Modells geschätzt werden, erklärt wahrscheinlich den (sehr kleinen) Unterschied in Ihren f-Werten.

In der Praxis (z. B. beim Testen von Hypothesen) sind diese Schätzungen dieselben, sodass ich nicht sehe, wie eine glaubwürdiger als die andere sein könnte. Sie stammen aus verschiedenen Modellanpassungsparadigmen.

Für Kontraste müssen Sie eine Kontrastmatrix für Ihre Faktoren einrichten. Wie das geht, zeigen Venebles und Ripley auf den Seiten 143, 146 und 293-294 der 4. Ausgabe.


Hmm, aber warum gibt es dann manchmal Unterschiede und manchmal sind die Ergebnisse genau gleich? Außerdem scheint es unmöglich zu sein, eine ANOVA (genau genommen) zu verwenden lmeoder lmerzu berechnen, da sie eine Methode verwendet, die ähnlich, aber nicht identisch ist. Gibt es also keine Möglichkeit, Kontraste für ANOVAs mit wiederholten Messungen in R zu berechnen?
Henrik

Wenn das System Ihre Modellierung wirklich linear ist, sollten die kleinsten Quadrate und ML dieselbe f-Statistik ergeben. Nur wenn die Daten eine andere Struktur aufweisen, führen die beiden Methoden zu unterschiedlichen Ergebnissen. Pinheiro und Bates behandeln dies in ihrem Modellbuch mit gemischten Effekten. Außerdem sind sie wahrscheinlich nicht "genau" gleich, wenn Sie in Sig-Ziffern weit genug gehen würden, würden Sie bestimmt einen Unterschied feststellen. Für alle praktischen Zwecke sind sie jedoch gleich.
Chris
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.