2016-05-28 10 views
10

Jaka jest różnica między specyfikacjami receptury aov(depvar~timevar+Error(id)) i aov(depvar~timevar+Error(id/timevar))? Te dwa warianty dają nieco inne wyniki.aov() termin błędu w R: jaka jest różnica bw Error (id) i Error (id/timevar) specyfikacja?

To samo pytanie zostało zadane tutaj: https://stats.stackexchange.com/questions/60108/how-to-write-the-error-term-in-repeated-measures-anova-in-r Chciałbym jednak powtórzyć to z bardziej odpowiednim przykładem.

Oto przykład, że stworzył:

var=rep(NA,180) 
id=rep(1:20,each=180/20) 
group=rep(rep(1:2,each=9),180/(9*2)) 
time1=rep(rep(1:3,each=3),180/(3*3)) 
time2=rep(c(8,15,20),180/3) 

var[group==1&time1==1&time2==8]=runif(10,105,115) 
var[group==2&time1==1&time2==8]=runif(10,105,115) 
var[group==1&time1==1&time2==15]=runif(10,95,105) 
var[group==2&time1==1&time2==15]=runif(10,95,105) 
var[group==1&time1==1&time2==20]=runif(10,85,95) 
var[group==2&time1==1&time2==20]=runif(10,85,95) 

var[group==1&time1==2&time2==8]=runif(10,95,105) 
var[group==2&time1==2&time2==8]=runif(10,95,105) 
var[group==1&time1==2&time2==15]=runif(10,85,95) 
var[group==2&time1==2&time2==15]=runif(10,75,85) 
var[group==1&time1==2&time2==20]=runif(10,75,85) 
var[group==2&time1==2&time2==20]=runif(10,65,75) 

var[group==1&time1==3&time2==8]=runif(10,95,105) 
var[group==2&time1==3&time2==8]=runif(10,95,105) 
var[group==1&time1==3&time2==15]=runif(10,85,95) 
var[group==2&time1==3&time2==15]=runif(10,75,85) 
var[group==1&time1==3&time2==20]=runif(10,75,85) 
var[group==2&time1==3&time2==20]=runif(10,65,75) 

df=data.frame(id,var,group,time1,time2) 
df$id=factor(df$id) 
df$group=factor(df$group) 
df$time1=factor(df$time1) 
df$time2=factor(df$time2) 

Performing AOV() na ten pobiera nieznacznie różne wyniki w zależności od błędu() określenie terminu:

termin Tylko na jeden raz:

> summary(aov(var~time1+Error(id),data=df)) 
Error: id 
     Df Sum Sq Mean Sq F value Pr(>F) 
     Residuals 19 958.4 50.44    
Error: Within 
     Df Sum Sq Mean Sq F value Pr(>F)  
     time1  2 7538 3769 30.41 6.72e-12 *** 
     Residuals 158 19584  124   

> summary(aov(var~time1+Error(id/time1),data=df)) 
Error: id 
     Df Sum Sq Mean Sq F value Pr(>F) 
     Residuals 19 958.4 50.44    
Error: id:time1 
     Df Sum Sq Mean Sq F value Pr(>F)  
     time1  2 7538 3769 211.5 <2e-16 *** 
     Residuals 38 677  18     
     --- 
    Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
Error: Within 
     Df Sum Sq Mean Sq F value Pr(>F) 
     Residuals 120 18907 157.6  

Albo w przypadku obu terminów (nie wypisz tutaj, dla własnego wyboru, sprawdź to na własne życzenie):

summary(aov(var~group*time1*time2+Error(id/(group*time1*time2)),data=df)) 
summary(aov(var~group*time1*time2+Error(id),data=df)) 

Dlaczego tak się dzieje? Który wariant jest poprawny?

+2

To pytanie naprawdę należy do stats.stackexchange.com. – Chris

Odpowiedz

2

Oto blog, który pomoże zepsuć to, co każdy oznacza w sekcji "Losowe efekty w klasycznej ANOVA".

Poniżej znajduje się podsumowanie tego, co "dzielenie" oznacza Error.

aov(Y ~ Error(A), data=d)    # Lone random effect 
aov(Y ~ B + Error(A/B), data=d)   # A random, B fixed, B nested within A 
aov(Y ~ (B*X) + Error(A/(B*X)), data=d) # B and X interact within levels of A 

więc z pytaniem,

aov(depvar~timevar+Error(id/timevar)) 

oznacza, że ​​masz losowy efekt z id ale potem naprawić timevar z timevar zagnieżdżone w id poziomach w porównaniu

aov(depvar~timevar+Error(id)) 

który jest po prostu biorąc id jako efekty losowe bez ograniczeń dla innych zmiennych.

Źródło: http://conjugateprior.org/2013/01/formulae-in-r-anova/

This może okazać się przydatna, a także, co jest jakiś kod podchodząc analizy wariancji, który ma pewne zalecenia dotyczące uczenia ANOVA.

0

Różnica między aov(depvar~timevar+Error(id)) a aov(depvar~timevar+Error(id/timevar)) polega na tym, że jako efekt losowy można dołączyć timevar.

Należy zauważyć, że istnieje więcej niż jeden sposób uwzględnienia zmiennej jako efektu losowego. Możesz również użyć aov(depvar~timevar+Error(id*timevar)) lub aov(depvar~timevar+Error(id + timevar)). Każde z nich oznacza coś zupełnie innego, ale może być mylące, ponieważ często dają one podobne wyniki, gdy są stosowane do tego samego zestawu danych, ze względu na ograniczenia samych danych.

Przecięcie / użyte w aov() oznacza. Kiedy używasz /, R automatycznie rozszerza go do głównego efektu dolnej zmiennej plus interakcja między dolną i górną. Na przykład A/B automatycznie rozwija się do A + A:B.Jest to podobne do sposobu, w jaki A*B ulega automatycznemu rozwinięciu do A + B + A:B, ale z zagnieżdżaniem, zmienna w gnieździe nigdy nie pojawia się poza jego gniazdem (to znaczy nie może być samodzielnego efektu głównego).

Widać to ekspansja dzieje w twojej mocy:

> summary(aov(var~time1+Error(id/time1))) 

Error: id 
      Df Sum Sq Mean Sq F value Pr(>F) 
Residuals 1 52.24 52.24    

Error: id:time1 
     Df Sum Sq Mean Sq 
time1 1 4291 4291 

Error: Within 
      Df Sum Sq Mean Sq F value Pr(>F) 
time1  1 1239 1238.7 10.19 0.00167 ** 
Residuals 176 21399 121.6     
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

W Error terminy oznaczają losowe efekty. Zauważ dostać jeden dla głównego efektu id bo to podstawa gniazda, a drugi dla interakcji między id i time1, ponieważ time1 jest zagnieżdżony w id (również uzyskać Error wpływ na Within który jest podstawowym terminem rezydualna dla model, tj. losowy efekt samych obserwacji indywidualnych).

Jakie jest właściwe podejście do twoich danych?

To zależy od 1) sposobu, w jaki dane są rzeczywiście uporządkowane i 2) jaki model zamierzasz uruchomić. Uwaga: Nie ma ostatecznego testu, który można uruchomić na danych w celu ustalenia struktury lub prawidłowego modelu; jest to ćwiczenie myślące, a nie obliczeniowe.

W przykładowych modeli przewidzianych ty, masz wynik var, a następnie, co wydaje się być grupowanie zmiennych group i id, a następnie dwie zmienne czasowe time1 i time2. Każdy id jest tylko w 1 grupie, nie w obu grupach, co sugeruje, że id jest zagnieżdżony w grupie.

> table(group, id) 
    id 
group 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
    1 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 
    2 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 

będzie zakładać, że id odnosi się do jednego uczestnika oraz 9 pomiarów na time1 i time2 są pomiędzy zwierzętami Badania każdego uczestnika (każdy uczestnik miał 9 razy w var, więc jest to repeated measures design).

Aby to beton, powiedzmy var to wynik na jakiś problem rozwiązywania zadania, a time1 i time2 są minut uczestnicy mogą studiować problem i czas są one podane do ukończenia problemu, odpowiednio . Od time1 i time2 są przekraczane, każdy uczestnik wykonuje zadanie 9 razy, pod każdą kombinacją okoliczności.

> table(time1, time2) 
    time2 
time1 8 15 20 
    1 20 20 20 
    2 20 20 20 
    3 20 20 20 
> table(time1, time2, id) 
, , id = 1 

    time2 
time1 8 15 20 
    1 1 1 1 
    2 1 1 1 
    3 1 1 1 

, , id = 2 

    time2 
time1 8 15 20 
    1 1 1 1 
    2 1 1 1 
    3 1 1 1 
(output truncated) 

uczestnicy są testowane w grupach, przy czym połowa uczestników grupy 1, a drugą połowę w grupie 2. Może badania prowadzonego w klasach, a grupa 1 jest grupa i grupa 2 Druga klasa . Prawdopodobnie tożsamość grupowa nie jest w rzeczywistości zmienną interesującą, ale nie powinniśmy jej opuszczać poza model, ponieważ może istnieć pewna uciążliwa wariancja wynikająca z różnic między grupami. Na przykład pierwsza klasa może mieć lepsze oświetlenie, dając wszystkim członkom grupy 1 większą szansę na dobre wyniki w układaniu puzzli niż członkowie grupy 2.

Wyniki, ID i grupa powinny być efektami losowymi , a time1 i time2 powinny być stałymi efektami (uwaga ta może się różnić dla tych samych danych, jeśli masz inne myśli w modelu, np. możesz chcieć rozważyć grupę jako ustaloną w zależności od twojego pytania badawczego).

Biorąc pod uwagę ten model, będzie to najbardziej kompletna wersja modelu, korzystając aov():

aov(var~time1*time2 + Error(group/id/(time1*time2)),data=df) 

Oto wynik:

> summary(aov(var~time1*time2 + Error(group/id/(time1*time2)),data=df)) 

Error: group 
      Df Sum Sq Mean Sq F value Pr(>F) 
Residuals 1 771.7 771.7    

Error: group:id 
      Df Sum Sq Mean Sq F value Pr(>F) 
Residuals 18 243.8 13.55    

Error: group:id:time1 
      Df Sum Sq Mean Sq F value Pr(>F)  
time1  2 7141 3571 181.6 <2e-16 *** 
Residuals 38 747  20     
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Error: group:id:time2 
      Df Sum Sq Mean Sq F value Pr(>F)  
time2  2 16353 8176 434.6 <2e-16 *** 
Residuals 38 715  19     
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Error: group:id:time1:time2 
      Df Sum Sq Mean Sq F value Pr(>F) 
time1:time2 4 214.5 53.63 5.131 0.00103 ** 
Residuals 76 794.3 10.45     
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
Warning message: 
In aov(var ~ time1 * time2 + Error(group/id/(time1 * time2)), data = df) : 
    Error() model is singular 

(Wraz z powyższych linków, tutaj jest kilka dodatkowe wskazówki na temat random vs. fixed effects)

Powiązane problemy