Jak zaimplementować zmienną fikcyjną przy użyciu zmiennych n-1?

9

Jeśli mam zmienną z 4 poziomami, teoretycznie muszę użyć 3 zmiennych zastępczych. W praktyce, jak się to faktycznie odbywa? Czy używam 0-3, czy używam 1-3 i zostawiam puste 4? Jakieś sugestie?

UWAGA: Będę pracował w R.

AKTUALIZACJA: Co by się stało, gdybym użył tylko jednej kolumny, która używa 1-4 odpowiadającej AD? Czy to zadziała lub wprowadzi problemy?

screechOwl
źródło
3
Myślę, że ta strona z UCLA ATS wyjaśnia to całkiem dobrze.
karakal
4
Dla jasności należy zauważyć, że kodowanie tej zmiennej jako liczb całkowitych 0-3 lub 1-4 lub 1-3 nie jest kodem fikcyjnym i nie będzie mieć takiego samego efektu jak trzy zmienne fikcyjne. Jednak takie niepoprawne kodowanie będzie działać w formułach regresji i oprogramowaniu i będzie prawdopodobne, że będzie to wynik wyjściowy: po prostu nie będzie odpowiadało zamierzonemu modelowi. (Uwaga: odpowiada to na ostatnią aktualizację pytania. )
whuber

Odpowiedzi:

11

W praktyce zwykle pozwala się, aby wybrane oprogramowanie obsługiwało tworzenie i manipulowanie zmiennymi fikcyjnymi. Można to rozwiązać na kilka sposobów; Oto kilka typowych możliwości dla zestawu danych z czterema obserwacjami, po jednej na każdym poziomie A, B, C i D. Są to różne parametryzacje; zapewniają dokładnie takie same dopasowanie modelu, ale z różnymi interpretacjami parametrów. Można łatwo konwertować między sobą za pomocą podstawowej algebry; zauważ, że wszystkie są liniowymi kombinacjami; w rzeczywistości można zastosować dowolną kombinację liniową.

Użyj różnic od pierwszego poziomu (domyślnie w R):

A 0 0 0
B 1 0 0
C 0 1 0
D 0 0 1

Używaj różnic z ostatniego poziomu (domyślnie w SAS):

A 1 0 0
B 0 1 0
C 0 0 1
D 0 0 0

Użyj kontrastów „sum”:

A    1    0    0
B    0    1    0
C    0    0    1
D   -1   -1   -1

Użyj kontrastów „Helmert”:

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3
Aaron opuścił Stack Overflow
źródło
1
Powiedziałbym, ze względu na czystość, że zmienne obojętne , w ścisłym tego słowa znaczeniu, są tylko 1. i 2. twoim przykładem. Zmienne manekina są również znane jako zmienne kontrastowe wskaźnika . Helmert , odchylenie i inne alternatywne typy zmiennych kontrastowych nie powinny być dla mnie nazywane obojętnym .
ttnphns
1
@ttnphns Zgadzam się, że kontrasty Helmert nie stanowią fałszywego kodowania z technicznego punktu widzenia, ale myślę, że jest to całkowicie rozsądne, aby je tutaj uwzględnić. Nie mogę powiedzieć, czy wskazujesz to ze względu na jasność, czy sugerujesz zmianę odpowiedzi. @ Aaron +1, ta odpowiedź byłaby jeszcze lepsza, gdybyś krótko wyjaśnił, w jaki sposób interpretacja tych różnych schematów kodowania różni się.
gung - Przywróć Monikę
7

Załóżmy, że twoje poziomy zmiennych to A, B, C i D. Jeśli masz regres stały w regule, musisz użyć trzech zmiennych pozornych, w przeciwnym razie musisz mieć wszystkie cztery.

Istnieje wiele matematycznie równoważnych sposobów implementacji zmiennych zastępczych. Jeśli masz regresję w stałym wyrażeniu, jednym ze sposobów jest wybranie jednego z poziomów jako poziomu „podstawowego” i porównanie z nim pozostałych trzech. Powiedzmy, dla konkretności, że poziom bazowy to A. Wtedy twoja pierwsza zmienna fikcyjna przyjmuje wartość 1, ilekroć poziom to B, a 0 w przeciwnym razie; drugi przyjmuje wartość 1 za każdym razem, gdy poziom wynosi C, a w przeciwnym razie przyjmuje wartość 1, a trzeci przyjmuje wartość 1, gdy poziom to D, a w przeciwnym razie 0. Ponieważ twój stały składnik jest cały czas równy 1, szacowany współczynnik pierwszej zmiennej zastępczej będzie oszacowaniem różnicy między poziomem B i A, i podobnie dla innych zmiennych zastępczych.

Jeśli nie masz stałego terminu, możesz po prostu użyć czterech zmiennych zastępczych, skonstruowanych jak w poprzednim przykładzie, dodając tylko jedną dla poziomu A.

łucznik
źródło
Niezła notatka o tym, jak ważne jest posiadanie stałego terminu w regresji.
Aaron opuścił Stack Overflow
5

W R zdefiniuj zmienną jako czynnik, która zaimplementuje ją dla Ciebie:

x <- as.factor(sample(LETTERS[1:4], 20, replace = TRUE))
y <- rnorm(20)
lm (y ~ x)

który zwraca

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)           xB           xC           xD  
     1.0236      -0.6462      -0.9466      -0.4234  

Dokumentacja „lm”, „współczynnik” i „wzór” w R wypełnia niektóre szczegóły.

Szary
źródło
1
+1 To miłe uzupełnienie już wymienionych odpowiedzi. Możemy również zauważyć, że jeśli masz już zmienną z nazwami grup (np. AD), można to zrobić w wywołaniu funkcji analizy bez dodatkowego kroku: lm(y ~ as.factor(x))
Gung - Przywróć Monikę
Głównym powodem, dla którego patrzę na zmienne fikcyjne, jest to, że pracuję z dużym zestawem danych z wieloma poziomami czynników (> 32), a niektóre pakiety w R (mianowicie randomforest) nie mogą obsłużyć czynników z wieloma poziomami, więc próbowałem aby sprawdzić, czy manekiny są dobrym rozwiązaniem.
screechOwl,
1
Możesz skonstruować macierz projektowania regresji za pomocą 'model.matrix': model.matrix (y ~ x) (x nadal jest czynnikiem) da macierz ze zmiennymi fikcyjnymi. Nie jestem zaznajomiony z pakietem randomforest, ale podejrzewam, że możesz nadać dowolnej funkcji wyraźną macierz projektową, którą otrzymujesz z model.matrix, a model.matrix wydaje się działać z wieloma (tj. Setkami) poziomami.
Gray
ps: możesz edytować pytanie, aby było jasne, że zależy Ci na rozwiązaniach, które działają na wielu poziomach. Pytanie dotyczy 4.
Gray
4

whuber powiedział ci w komentarzach, że kodowanie kodowania 0-3 lub 1-4 zamiast tworzenia zmiennych zastępczych nie jest tym, czego chcesz. To jest próba - mam nadzieję, że wyjaśnię, co zrobiłbyś z tym modelem i dlaczego jest on błędny.

Jeśli kodujesz zmienną X tak, że jeśli A to X = 1, jeśli B to X = 2, jeśli C to X = 3, jeśli D to X = 4, to po wykonaniu regresji otrzymasz tylko jeden parametr. Powiedzmy, że ostatecznie oszacowany parametr związany z X wynosił 2. Oznaczałoby to, że oczekiwana różnica między średnią B i średnią A wynosi 2. Mówi również, że oczekiwana różnica między średnią C a średnia B wynosi 2. Niektóre dla D i C. Wymusilibyście różnice w średnich dla tych grup, aby stosować ten bardzo ścisły wzór. Ten jeden parametr mówi dokładnie, jak wszystkie grupy oznaczają wzajemne relacje.

Więc jeśli wykonałeś tego rodzaju kodowanie, musisz założyć, że nie tylko poprawnie zamówiłeś (ponieważ w tym przypadku, jeśli spodziewasz się wzrostu z A do B, musisz spodziewać się wzrostu z B do C i z C do D), ale musisz także założyć, że ta różnica jest taka sama!

Jeśli zamiast tego wykonasz zasugerowane kodowanie, pozwalasz każdej grupie mieć własne środki - bez ograniczeń. Ten model jest znacznie bardziej rozsądny i odpowiada na pytania, które chcesz.

Dason
źródło