Daj mi pomysł, jak efektywnie przekodować zmienną kategorialną (czynnik) do zestawu ortogonalnych wielomianowych zmiennych kontrastowych.
W przypadku wielu typów zmiennych kontrastu (np. Odchylenie, prosty, Helmert itp.) Przejście jest następujące:
- Skomponuj macierz współczynników kontrastu odpowiadającą typowi.
- Odwróć lub uogólnij-odwróć, aby uzyskać macierz kodów.
Na przykład:
Suppose there is 3-group factor and we want to recode it into a set of deviation contrast variables.
The last group is treated as reference. Then the contrast coefficients matrix L is
Group1 Group2 Group3
var1 2/3 -1/3 -1/3
var2 -1/3 2/3 -1/3
and ginv(L) is then the sought-for coding matrix
var1 var2
Group1 1 0
Group2 0 1
Group3 -1 -1
(We might also use inv(L) instead if we add a row for constant, equal to 1/3, at the head of L.)
Czy istnieje taki sam lub podobny sposób uzyskania wielomianowych zmiennych kontrastowych? Jeśli tak, to jak wyglądałaby matryca C i jak ją skomponować? Jeśli nie, co nadal jest sposobem na skuteczne obliczanie wielomianowych zmiennych kontrastowych (np. Za pomocą algebry macierzowej).
contrasts
polynomial
ttnphns
źródło
źródło
qr.qy()
zgadzają się z ręcznymi obliczeniami,qr.Q(qr(X))
a następnieQ%*%z
w moim poście. Naprawdę zastanawiam się, czy mogę powiedzieć coś innego, aby odpowiedzieć na twoje pytanie bez powielania. Naprawdę nie chcę wykonywać złej roboty ... Przeczytałem wystarczająco dużo twoich postów, aby mieć dla ciebie duży szacunek ... Jeśli znajdę sposób na wyrażenie tej koncepcji bez kodu, tylko koncepcyjnie za pomocą algebry liniowej, Wrócę do tego. Cieszę się jednak, że odkryłem, że zgłębiłem zagadnienie o pewnej wartości. Najlepsze życzenia, Toni.Odpowiedzi:
Jako fragment mojego wcześniejszego postu na ten temat chcę podzielić się pewną próbną (choć niepełną) eksploracją funkcji stojących za algebrą liniową i pokrewnymi funkcjami R. To ma być praca w toku.
Część nieprzejrzystości funkcji ma związek z „kompaktową” formą rozkładu Householder Ideą dekompozycji Householdera jest odbicie wektorów w poprzek hiperpłaszczyzny określonej przez wektor jednostkowy u, jak na poniższym schemacie, ale wybranie tej płaszczyzny w celowy sposób, aby rzutować każdy wektor kolumny oryginalnej macierzy A na e 1 standardowy wektor jednostki. Znormalizowany normą-2 1 wektor U mogą być wykorzystane do obliczenia RÓŻNYCH Transformations Householder I - 2Q R. u ZA mi1 1 u .I - 2u ciebieT.x
Wynikową projekcję można wyrazić jako
Wektor reprezentuje różnicę między wektorami kolumnowymi w macierzy , którą chcemy rozkładać, a wektorami odpowiadającymi odbiciu w podprzestrzeni lub „lustrze” wyznaczonemu przez .v x ZA Uy u
Metoda zastosowana przez LAPACK uwalnia potrzebę przechowywania pierwszego wpisu w reflektorach Householder, zamieniając je w . Zamiast normalizować wektor do pomocą , jest to tylko pierwszy wpis konwertowany na ; jednak te nowe wektory - nazywaj je nadal mogą być używane jako wektory kierunkowe.v u ‖ u ‖ = 1 1 w1 v u ∥ u ∥ = 1 1 w
Piękno tej metody jest to, że biorąc pod uwagę, że w sposób dekompozycja jest górna trójkątna, możemy rzeczywiście skorzystać z elementów poniżej przekątnej, aby wypełnić je z tymi reflektorów. Na szczęście wszystkie wiodące wpisy w tych wektorach są równe , co zapobiega problemowi z „sporną” przekątną macierzy: wiedząc, że wszystkie one są , nie trzeba ich uwzględniać i mogą dać przekątną wpisy do .Q R 0 R w 1 1 RR Q R. 0 R w 1 1 R
Macierz „kompaktowego QR” w funkcjiR
qr()$qr
można z grubsza rozumieć jako dodatek macierzy i dolnej trójkątnej macierzy „przechowywania” dla „zmodyfikowanych” reflektorów.Projekcja Householder nadal będzie miała postać , ale nie będziemy pracować z ( ), ale raczej z wektorem , z czego tylko pierwszy wpis to , i u ‖ x ‖ = 1 w 1I - 2u ciebieT.x u ∥x∥=1 w 1
Można by przypuszczać, że byłoby dobrze, aby przechowywać te reflektorów poniżej przekątnej lub wyłączeniem pierwszego wejścia , i nazywają to dzień. Jednak rzeczy nigdy nie są tak łatwe. Zamiast tego to, co jest przechowywane pod przekątną, to kombinacja i współczynników w transformacji Householdera wyrażonych jako (1), tak że definiując jako:w R 1 w tau
qr()$qr
reflektory=w/τRQRτ=wTw2=∥w∥2 , reflektory można wyrazić jako . Te wektory „odblaskowe” są przechowywane bezpośrednio pod w tak zwanym „compact ”.reflectors=w/τ R QR
Teraz jesteśmy o jeden stopień od wektorami, a pierwsza pozycja nie jest już , stąd wyjście będzie musiał zawierać klucz do ich przywrócenia ponieważ nalegają na wykluczeniu pierwszego wpisu z „odblaskowe” wektory do zmieści wszystko . Więc widzimy wartości na wyjściu? Cóż, nie, to byłoby przewidywalne. Zamiast tego w wynikach (gdzie ten klucz jest przechowywany) znajdujemy .1 τ ρ = ∑ reflektory 2w 1 τ ρ=∑reflectors22=wTwτ2/2
qr()
qr()$qr
qr()$qraux
Tak więc obramowane na czerwono poniżej, widzimy „reflektory” ( ), wyłączając ich pierwszy wpis.w/τ
Cały kod jest tutaj , ale ponieważ ta odpowiedź dotyczy przecięcia kodowania i algebry liniowej, dla ułatwienia wkleję wynik:
Teraz napisałem funkcję
House()
w następujący sposób:Porównajmy wynik z wbudowanymi funkcjami R. Najpierw funkcja domowej roboty:
do funkcji R:
źródło