Proszę podać kod R, który pozwala przeprowadzić ANOVA między podmiotami z kontrastami -3, -1, 1, 3. Rozumiem, że jest debata na temat odpowiedniego rodzaju sumy kwadratów (SS) do takiej analizy. Jednak jako domyślny typ SS używany w SAS i SPSS (typ III) jest uważany za standard w mojej okolicy. Dlatego chciałbym, aby wyniki tej analizy idealnie pasowały do tego, co generują te programy statystyczne. Aby zostać zaakceptowanym, odpowiedź musi bezpośrednio wywołać aov (), ale inne odpowiedzi mogą zostać poddane pod głosowanie (szczególnie jeśli są łatwe do zrozumienia / użycia).
sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
Edycja: Proszę zauważyć, że żądany kontrast nie jest prostym kontrastem liniowym lub wielomianowym, ale kontrastem wyprowadzonym z teoretycznej prognozy, tj. Rodzaju kontrastów omówionych przez Rosenthala i Rosnowa.
źródło
Odpowiedzi:
Suma kwadratów typu III dla ANOVA jest łatwo dostępna poprzez
Anova()
funkcję z pakietu samochodowego .Kontrast kodowanie może być wykonywane na wiele sposobów, przy użyciu
C()
, nacontr.*
rodziny (jak wskazano przez @nico) lub bezpośredniocontrasts()
funkcji / argumentu. Jest to szczegółowo opisane w § 6.2 (s. 144–151) Modern Applied Statistics with S (Springer, 2002, wydanie 4). Zauważ, żeaov()
jest to tylko funkcja otoki dla tejlm()
funkcji. Jest to interesujące, gdy chce się kontrolować termin błędu modelu (jak w projekcie wewnątrz przedmiotu), ale w przeciwnym razie oba dają te same wyniki (i niezależnie od tego, w jaki sposób dopasujesz swój model, nadal możesz wygenerować ANOVA lub LM- jak streszczenia zsummary.aov
lubsummary.lm
).Nie mam SPSS do porównania dwóch wyjść, ale coś w tym rodzaju
warto spróbować w pierwszej instancji.
O kodowaniu czynnikowym w R vs. SAS: R uważa poziom bazowy lub referencyjny za pierwszy poziom w porządku leksykograficznym, podczas gdy SAS uważa ostatni. Tak więc, aby uzyskać porównywalne wyniki, albo masz do wykorzystania
contr.SAS()
lub dorelevel()
swojej czynnika R.źródło
Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")
powinno być lepsze. Daj mi znać, jeśli ci to odpowiada.Może to wyglądać na autopromocję (i przypuszczam, że tak). Ale opracowałem pakiet lsmeans dla R (dostępny w CRAN), który został zaprojektowany do obsługi dokładnie tego rodzaju sytuacji. Oto jak to działa na twoim przykładzie:
Jeśli chcesz, możesz określić dodatkowe kontrasty na liście. W tym przykładzie uzyskasz takie same wyniki z wbudowanym liniowym kontrastem wielomianowym:
Aby to potwierdzić, należy zauważyć, że
"poly"
specyfikacja kieruje go do wywołaniapoly.lsmc
, co daje następujące wyniki:Jeśli chcesz wykonać wspólny test kilku kontrastów, użyj
test
funkcji za pomocąjoint = TRUE
. Na przykład,Spowoduje to wykonanie testu „typu III”. W przeciwieństwie do
car::Anova()
tego zrobi to poprawnie, niezależnie od kodowania kontrastu stosowanego na etapie dopasowania modelu. Wynika to z faktu, że testowane funkcje liniowe są określone bezpośrednio, a nie domyślnie, poprzez redukcję modelu. Dodatkową cechą jest wykrycie przypadku, w którym testowane kontrasty są liniowo zależne, oraz wygenerowanie prawidłowej statystyki testowej i stopni swobody.źródło
Możesz rzucić okiem na ten post na blogu:
Uzyskanie tej samej ANOVA skutkuje R jak w SPSS - trudności z sumami kwadratów typu II i typu III
( Spoiler: dodaj
options(contrasts=c("contr.sum", "contr.poly"))
na początku skryptu)źródło
Kiedy robisz kontrasty, robisz określoną, określoną liniową kombinację średnich komórek w kontekście odpowiedniego terminu błędu. W związku z tym koncepcja „typu SS” nie ma znaczenia w przypadku kontrastów. Każdy kontrast jest zasadniczo pierwszym efektem przy użyciu SS typu I. „Rodzaj SS” ma związek z tym, co jest podzielone lub uwzględnione w innych warunkach. W przypadku kontrastów nic nie jest podzielone ani rozliczane. Kontrast jest sam w sobie.
źródło
To, że testy typu III są używane w miejscu pracy, jest najsłabszym powodem do ich dalszego używania. SAS wyrządził poważne szkody w statystykach w tym zakresie. Egzegeza Billa Venablesa, o której mowa powyżej, jest świetnym źródłem informacji na ten temat. Po prostu powiedz „nie” typowi III; opiera się na błędnym pojęciu równowagi i ma niższą moc z powodu głupiego ważenia komórek w niezrównoważonym przypadku.
Bardziej naturalny i mniej podatny na błędy sposób uzyskiwania ogólnych kontrastów i opisywania tego, co zrobiłeś, zapewnia funkcja
rms
pakietu R.contrast.rms
Kontrasty mogą być bardzo złożone, ale dla użytkownika są bardzo proste, ponieważ są wyrażone w kategoriach różnic wartości predykcyjnych. Obsługiwane są testy i jednoczesne kontrasty. Obsługuje to efekty regresji nieliniowej, efekty interakcji nieliniowej, częściowe kontrasty, wszelkiego rodzaju rzeczy.źródło
Wypróbuj polecenie Anova w bibliotece samochodów. Użyj argumentu type = "III", ponieważ domyślnie jest to typ II. Na przykład:
źródło
Również autopromocja, napisałem funkcję do tego dokładnie: https://github.com/samuelfranssens/type3anova
Zainstaluj w następujący sposób:
Będziesz także musiał
car
zainstalować pakiet.źródło