Używam lmera w R, aby sprawdzić wpływ warunku ( cond
) na jakiś wynik. Oto niektóre skompilowane dane, gdzie s jest identyfikatorem podmiotu i a
, b
i c
są warunkami.
library("tidyr")
library("dplyr")
set.seed(123)
temp <- data.frame(s = paste0("S", 1:30),
a = rnorm(30, -2, 1),
b = rnorm(30, -3, 1),
c = rnorm(30, -4, 1))
Chciałbym porównać
- poziom
a
do średniej poziomówb
ic
i - poziom
b
do poziomuc
.
Moje pytanie brzmi: jak ustawić kontrasty, aby zrobić to w taki sposób, aby punkt przecięcia odzwierciedlał średnią z trzech warunków, a dwa obliczone oszacowania bezpośrednio odzwierciedlały różnice zdefiniowane w punktach 1. i 2.?
Próbowałem z
c1 <- cbind(c(-0.5, 0.25, 0.25), c(0, -0.5, 0.5))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c1))
gdzie cond2
wydaje się być OK, ale cond1
nie jest.
Po Jak interpretować te niestandardowe kontrasty? , Zamiast tego próbowałem użyć uogólnionej odwrotności, ale te szacunki też nie mają sensu.
c2 <- t(ginv(c1))
gather(temp, cond, result, a, b, c) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = c2))
Próbowałem też kontrastów Helmerta, ale środki wciąż się nie zgadzają.
gather(temp, cond, result, a, b, c) %>%
mutate(cond = factor(cond, levels = c("c", "b", "a"))) %>%
lmer(result ~ cond + (1|s), data = ., contrasts = list(cond = contr.helmert))
Jaki jest właściwy sposób to zrobić?
Odpowiedzi:
W poniższych krokach potrzebujemy ramki danych w długim formacie. Ramka danych
dat
zawiera zmienną zależnąresult
kategoryczne predykcyjnecond
(poziomy:a
,b
, ac
) i czynnik losowys
.Poniżej zilustruję dwa podejścia do stworzenia matrycy kontrastu odpowiadającej warunkom, które chcesz porównać:
Niestandardowe kontrasty
Matryca
mat
odpowiada różnicom poziomów.Aby utworzyć rzeczywistą macierz kontrastu, obliczamy uogólnioną odwrotność za pomocą
ginv
(zMASS
).Ta matryca kontrastu
cMat
może być używana wlmer
.Jak widać, szacunki efektu stałego odpowiadają różnicom określonym powyżej. Ponadto punkt przecięcia reprezentuje ogólną średnią.
Helmert kontrastuje z
contr.helmert
Możesz także użyć wbudowanej
contr.helmert
funkcji, aby utworzyć matrycę kontrastu.Jednak zamówienie nie odpowiada zamówieniu podanemu w pytaniu. Dlatego musimy odwrócić kolejność kolumn i wierszy. Pierwsza kolumna odpowiada
b
vs,a
a druga odpowiadac
vs. średniejb
ia
.Porównaj matrycę kontrastu
cHelmert2
zcMat
. Zauważysz, że kolumny są skalowanymi wersjami drugiej matrycy.Wynikiem
lmer
jest:Ta matryca kontrastu pozwala na takie same porównania jak niestandardowa matryca kontrastu. Ponieważ jednak wartości w macierzy są różne, współczynniki efektów stałych są również różne. Nic dziwnego, żet -wartości są takie same.
źródło
mat
byłabyc(1, -1/3, -1/3, -1/3)
? Zawsze więc ustawiam liczby tak, jak byłyby we wzorze (a + (b + c + d) / 3), a następnieginv
odpowiednio skaluję, aby współczynniki bezpośrednio odzwierciedlały różnicę. A kiedy zmieniłeś kolejność w przykładzie Helmerta, to było po prostu dopasowanie do pytania? W przeciwnym razie wyniki powinny być takie same, niezależnie od kolejności kontrastów, prawda?