Jak określić macierz kontrastu (w R) dla różnicy między jednym poziomem a średnią innych?


9

Mam model regresji, który wygląda następująco:

Y=β0+β1X1+β2X2+β3X3+β12X1X2+β13X1X3+β123X1X2X3

... lub w notacji R: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3

Powiedzmy X1 i X2 są zmiennymi kategorialnymi i X3jest liczbowy. Komplikacja jest takaX1 ma trzy poziomy X1a,X1b,X1c i zamiast standardowych kontrastów muszę przetestować:

  • Czy przechwycenie poziomu X1a znacznie różni się od przeciętnego przechwytywania poziomów X1b i X1c.
  • Czy odpowiedź X2 różni się znacznie między poziomem X1a i średnia poziomów X1b i X1c.
  • Czy nachylenie X3 różni się znacznie między poziomem X1a i średnia poziomów X1b i X1c.

Na podstawie tego postu wydaje się, że matryca, której chcę, to ...

 2
-1
-1

Tak robię contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1))). Szacunek dlaβ1zmiany, ale także inne. Mogę odtworzyć nowe oszacowaniebeta1 odejmując przewidywane wartości X1b i X1c grupa oznacza (kiedy X3=0 i X2 jest na poziomie odniesienia) od dwukrotności wartości X1ana tych poziomach. Ale nie mogę ufać, że poprawnie podałem swoją matrycę kontrastu, chyba że mogę również podobnie wyprowadzić inne współczynniki.

Czy ktoś ma jakąś radę, jak owinąć głowę wokół związku między środkami komórkowymi a kontrastami? Dzięki. Czy istnieje standardowa nazwa dla tego rodzaju kontrastu?


Aha! Zgodnie z linkiem opublikowanym w odpowiedzi Glen_b , dolna linia jest taka, że ​​DOWOLNE porównanie konwersji grupy oznacza, że ​​chcesz, w atrybut kontrastu w stylu R w następujący sposób:

  1. Zrób kwadratową macierz. Wiersze przedstawiają poziomy twojego współczynnika, a kolumny przedstawiają kontrasty. Z wyjątkiem pierwszego, który mówi modelowi, co powinien reprezentować punkt przecięcia.
  2. Jeśli chcesz, aby przecięcie było główną wartością, wypełnij pierwszą kolumnę tą samą niezerową wartością, nie ważne co. Jeśli chcesz, aby przecięcie było jednym ze środków poziomu, wstaw liczbę w tym wierszu i wypełnij resztę zerami. Jeśli chcesz, aby przecięcie było średnią z kilku poziomów, umieść liczby w tych wierszach i zera w pozostałych. Jeśli chcesz, aby był to środek ważony, użyj różnych liczb, w przeciwnym razie użyj tej samej liczby. Możesz nawet wprowadzić wartości ujemne w kolumnie przechwytywania i to prawdopodobnie coś też znaczy, ale to całkowicie zmienia inne kontrasty, więc nie mam pojęcia, do czego to służy
  3. Wypełnij pozostałe kolumny dodatnimi i ujemnymi wartościami wskazującymi, jakie poziomy chcesz w porównaniu z innymi. Zapominam, dlaczego sumowanie do zera jest ważne, ale dostosuj wartości, aby kolumny sumowały się do zera.
  4. Transponuj macierz za pomocą t()funkcji.
  5. Użyj ginv()z MASSopakowania lub, solve()aby uzyskać odwrotność transponowanej macierzy.
  6. Upuść pierwszą kolumnę, np mycontrast<-mycontrast[,-1]. Masz teraz macierz apx p-1, ale informacje wprowadzane do przechwytywania zostały zakodowane w macierzy jako całości podczas kroku 5.
  7. Jeśli chcesz, aby etykiety w wynikach podsumowania były przyjemniejsze do odczytania niż lm()domyślne dane wyjściowe et al., Odpowiednio nazwij kolumny macierzy. Jednak przechwytywanie zawsze będzie automatycznie nazwane (Intercept).
  8. Uczyń swoją matrycę nowym kontrastem dla danego czynnika, np contrasts(mydata$myfactor)<-mymatrix
  9. Uruchomienie lm()(i prawdopodobnie wiele innych funkcji, które korzystają z wzorów) w normalny sposób standardowy R bez obciążenia glht, doBy, i contrasts.

Glen_b, dziękuję i dziękuję UCLA Statistics Consulting Group. Mój profesor ds. Statystyk spędził kilka dni na ręcznym rozwiązywaniu tego tematu i nadal nie miałem pojęcia, jak napisać własną matrycę kontrastu. A teraz godzina czytania i zabawy z R. I wreszcie myślę, że rozumiem. Zgaduję, że powinienem był złożyć podanie na UCLA. Lub University of StackExchange.

Odpowiedzi:


5

To porównanie jednego ze średnią wszystkich późniejszych zmiennych jest (oprócz skali), nazywane kodowaniem Helmerta lub kontrastami Helmerta . Ten, który podajesz, jest pierwszym kontrastem, drugi byłby skalowaną wersją(0,1,1).

To, co R nazywa kodowaniem Helmerta, nazywa to „reverse Helmert”. Są równoważne zmianie kolejności zmiennych.


Czy równoważne „aż do zmiany kolejności zmiennych” powinno być „biorąc pod uwagę odwrócenie kolejności poziomów”? Aby uzyskać typ helmerta SAS / SPSS (w porównaniu do średniej pozostałych poziomów), należałoby albo odwrócić kolejność poziomów danego współczynnika, albo rev () każdej kolumny, a następnie rev () każdego wiersza macierzy wrócił przez contra.helmert?
tim

@tim „zmiana kolejności zmiennych” nie ma oznaczać „ żadnej zmiany kolejności zmiennych”, ale dosłownie zmiana zmiennej kolejności (czyli jeden w szczególności).
Glen_b
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.