Was ist der Unterschied zwischen der Verwendung von aov () und lme () bei der Analyse eines Längsdatensatzes?

13

Kann mir jemand den Unterschied zwischen der Verwendung aov()und lme()Analyse von Längsschnittdaten und der Interpretation der Ergebnisse dieser beiden Methoden erklären?

Unten analysiere ich den gleichen Datensatz mit aov()und lme()und erhalte 2 unterschiedliche Ergebnisse. Mit habe aov()ich ein signifikantes Ergebnis in der Zeit durch die Interaktion mit der Behandlung erhalten, aber wenn ich ein lineares gemischtes Modell anpasse, ist die Zeit durch die Interaktion mit der Behandlung unerheblich.

> UOP.kg.aov <- aov(UOP.kg~time*treat+Error(id), raw3.42)
> summary(UOP.kg.aov)

Error: id
          Df  Sum Sq Mean Sq F value Pr(>F)
treat      1   0.142  0.1421  0.0377 0.8471
Residuals 39 147.129  3.7725               

Error: Within
            Df  Sum Sq Mean Sq  F value  Pr(>F)    
time         1 194.087 194.087 534.3542 < 2e-16 ***
time:treat   1   2.077   2.077   5.7197 0.01792 *  
Residuals  162  58.841   0.363                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

> UOP.kg.lme <- lme(UOP.kg~time*treat, random=list(id=pdDiag(~time)), 
                    na.action=na.omit, raw3.42)
> summary(UOP.kg.lme)
Linear mixed-effects model fit by REML
 Data: raw3.42 
       AIC      BIC    logLik
  225.7806 248.9037 -105.8903

Random effects:
 Formula: ~time | id
 Structure: Diagonal
        (Intercept)      time  Residual
StdDev:   0.6817425 0.5121545 0.1780466

Fixed effects: UOP.kg ~ time + treat + time:treat 
                 Value Std.Error  DF   t-value p-value
(Intercept)  0.5901420 0.1480515 162  3.986059  0.0001
time         0.8623864 0.1104533 162  7.807701  0.0000
treat       -0.2144487 0.2174843  39 -0.986042  0.3302
time:treat   0.1979578 0.1622534 162  1.220053  0.2242
 Correlation: 
           (Intr) time   treat 
time       -0.023              
treat      -0.681  0.016       
time:treat  0.016 -0.681 -0.023

Standardized Within-Group Residuals:
         Min           Q1          Med           Q3          Max 
-3.198315285 -0.384858426  0.002705899  0.404637305  2.049705655 

Number of Observations: 205
Number of Groups: 41 
biostat_newbie
quelle

Antworten:

18

Basierend auf Ihrer Beschreibung scheint es, dass Sie ein Modell mit wiederholten Messungen mit einem einzelnen Behandlungsfaktor haben. Da ich keinen Zugriff auf das Dataset ( raw3.42) habe, werde ich die Orthodont-Daten aus dem nlmePaket verwenden, um zu veranschaulichen, was hier vor sich geht. Die Datenstruktur ist dieselbe (wiederholte Messungen für zwei verschiedene Gruppen - in diesem Fall Männer und Frauen).

Wenn Sie den folgenden Code ausführen:

library(nlme)
data(Orthodont)

res <- lme(distance ~ age*Sex, random = ~ 1 | Subject, data = Orthodont)
anova(res)

Sie erhalten die folgenden Ergebnisse:

            numDF denDF  F-value p-value
(Intercept)     1    79 4123.156  <.0001
age             1    79  122.450  <.0001
Sex             1    25    9.292  0.0054
age:Sex         1    79    6.303  0.0141

Wenn du läufst:

res <- aov(distance ~ age*Sex + Error(Subject), data = Orthodont)
summary(res)

Sie erhalten:

Error: Subject
          Df Sum Sq Mean Sq F value   Pr(>F)   
Sex        1 140.46 140.465  9.2921 0.005375 **
Residuals 25 377.91  15.117                    

Error: Within
          Df  Sum Sq Mean Sq  F value  Pr(>F)    
age        1 235.356 235.356 122.4502 < 2e-16 ***
age:Sex    1  12.114  12.114   6.3027 0.01410 *  
Residuals 79 151.842   1.922                     

Beachten Sie, dass die F-Tests exakt identisch sind.

Denn lme()Sie haben verwendet list(id=pdDiag(~time)), was dem Modell nicht nur einen zufälligen Achsenabschnitt hinzufügt, sondern auch eine zufällige Steigung. Außerdem setzen pdDiagSie mit die Korrelation zwischen dem zufälligen Schnittpunkt und der Steigung auf Null. Dies ist ein anderes Modell als das, über das Sie angegeben haben, aov()und daher erhalten Sie andere Ergebnisse.

Wolfgang
quelle
Danke @Wolfgang; Ihre Erklärung hilft sehr. Eine Folgefrage, die ich dann habe, ist diese. Ich analysiere tatsächlich ein Modell mit wiederholten Messungen mit einem einzigen Behandlungsfaktor. Jeder Proband wird nach dem Zufallsprinzip entweder der Behandlung A oder B zugeordnet. Dann werden sie zu 0 Minuten, 15 Minuten, 30 Minuten, 60 Minuten, 120 Minuten und 180 Minuten gemessen. Nach meinem Verständnis sollte die Zeit ein Zufallsfaktor sein, da es sich nur um Stichproben von 0 bis 180 Minuten handelt. Also, sollte ich tun: lme (UOP.kg ~ time * treat, random = ~ time | id, raw3.42)?
biostat_newbie
Ja, aber ich würde es so sehen: Sie erlauben im Wesentlichen, dass sich der Achsenabschnitt und die Steigung der Regressionslinie (von UOP.kg pünktlich) zwischen Probanden innerhalb derselben Behandlungsgruppe (zufällig) unterscheiden. Dies ist, was random = ~ time | id tun wird. Das Modell gibt dann Auskunft über die geschätzte Variabilität der Abschnitte und der Steigungen. Darüber hinaus gibt der Ausdruck time: treat-Interaktion an, ob sich die durchschnittliche Steigung für A und B unterscheidet.
Wolfgang,
Danke @Wolfgang! Kann ich Error(Subject/age), da ich ein Tutorial nachgeschlagen habe, sagen, dass dies /ageeine wiederholte Messung entlang dieses Faktors bedeutet? Ist das dasselbe wie bei dir Error(Subject)? Eine andere Frage ist: für unausgeglichene Daten aovund lmekann unterschiedliche Ergebnisse haben, richtig?
Breezeintopl
1

Ich möchte nur hinzufügen, dass Sie möglicherweise das carPaket installieren und verwenden möchten, Anova()das dieses Paket anstelle von anova()for aov()und lm()objects bereitstellt. Die Vanille anova()verwendet eine sequentielle Summe von Quadraten, die für ungleiche Stichprobengrößen das falsche Ergebnis liefert, während lme()sie entweder den Typ verwendet -I oder die Summe der Quadrate vom Typ III, je nach typeArgument, aber die Summe der Quadrate vom Typ III verletzt die Marginalität - dh sie behandelt Wechselwirkungen nicht anders als Haupteffekte.

Die R-Hilfe-Liste hat nichts Gutes über die Quadratsummen Typ I und Typ III zu sagen, und doch sind dies die einzigen Optionen! Stelle dir das vor.

Bearbeiten: Eigentlich sieht es so aus, als ob Typ-II nicht gültig ist, wenn es einen signifikanten Interaktionsbegriff gibt, und es scheint, dass das Beste, was jeder tun kann, Typ-III ist, wenn es Interaktionen gibt. Ich erhielt einen Hinweis auf eine meiner eigenen Fragen , die mich auf diesen Beitrag hinwiesen .

f1r3br4nd
quelle
0

Mir scheint, Sie haben zu jeder Zeit mehrere Kennzahlen für jede ID. Sie müssen diese für die AOV aggregieren, da dies die Leistung in dieser Analyse auf unfaire Weise erhöht. Ich sage nicht, dass das Aggregat die Ergebnisse gleich macht, aber es sollte sie ähnlicher machen.

dat.agg <- aggregate(UOP.kg ~ time + treat + id, raw3.42, mean)

Führen Sie dann Ihr aov-Modell wie vor dem Ersetzen der Daten durch dat.agg aus.

Außerdem glaube ich, dass anova (lme) eher das ist, was Sie tun möchten, um die Ergebnisse zu vergleichen. Die Richtung und Stärke eines Effekts entspricht nicht dem Verhältnis von Modellvarianz zu Fehler.

(Übrigens, wenn Sie die lme-Analyse für die aggregierten Daten durchführen, die Sie nicht sollten, und anova (lme) überprüfen, erhalten Sie fast die gleichen Ergebnisse wie aov.)

John
quelle