Як реалізувати фіктивну змінну за допомогою змінних n-1?


9

Якщо у мене є змінна з 4 рівнями, теоретично мені потрібно використовувати 3 фіктивні змінні. На практиці, як це насправді здійснюється? Чи використовую 0-3, чи використовую 1-3, а 4 залишаю порожнім? Будь-які пропозиції?

ПРИМІТКА. Я буду працювати в Р.

ОНОВЛЕННЯ: Що буде, якщо я просто використовую один стовпець, який використовує 1-4, що відповідає AD? Це спрацює чи створить проблеми?


3
Я думаю, що ця сторінка від UCLA ATS це досить добре пояснює.
каракал

4
Щоб зрозуміти, зауважте, що кодування цієї змінної як цілих чисел 0-3 або 1-4 або 1-3 не є фіктивним кодуванням і не матиме такого ж ефекту, як три манекенні змінні. Однак таке неправильне кодування буде працювати в регресійних формулах і програмному забезпеченні, і буде правдоподібний вихід: він просто не відповідає заданій моделі. (NB: це відповідає на нещодавнє оновлення до питання. )
whuber

Відповіді:


11

На практиці, як правило, дозволяється програмне забезпечення вибору, створюючи та маніпулюючи фіктивними змінними. Існує кілька способів впоратися з ним; тут є кілька загальних можливостей для набору даних із чотирма спостереженнями, по одному на кожному рівні A, B, C та D. Це різні параметризації; вони призводять до точно такої самої моделі, але з різною інтерпретацією параметрів. Можна легко перетворити з одного на інший за допомогою основної алгебри; зауважте, що це всі лінійні комбінації один одного; насправді можна використовувати будь-яку лінійну комбінацію.

Використовуйте відмінності від першого рівня (за замовчуванням у R):

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

Використовуйте відмінності від останнього рівня (за замовчуванням у SAS):

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

Використовуйте "суми" контрастів:

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

Використовуйте контрасти "гельмінт":

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3

1
Я б сказав, для чистоти, що фіктивні змінні, суворо, лише ваші приклади. Манекенні змінні також відомі як змінні індикатори контрасту. Гельмерта , відхилення та інших альтернативних типів контрастних змінних для мене не слід називати фіктивними .
ttnphns

1
@ttnphns Я погоджуюся, що контрасти Гельмерта не складають фіктивне кодування з технічної точки зору, але я вважаю, що цілком розумно їх включити сюди. Я не можу сказати, чи вказуєте ви це на ясність чи пропонуєте змінити відповідь. @ Aaron +1, ця відповідь була б ще кращою, якби ви коротко пояснили, як трактуються ці різні схеми кодування.
gung - Відновіть Моніку

7

Припустимо, що ваші змінні рівні A, B, C і D. Якщо у вас регресія має постійний термін, вам потрібно використовувати три манекенні змінні, інакше потрібно мати усі чотири.

Існує багато математично еквівалентних способів реалізації фіктивних змінних. Якщо в регресії у вас постійний термін, один із способів - вибрати один із рівнів як базовий рівень та порівняти інші три з ним. Скажімо, для конкретності, що базовим рівнем є A. Тоді ваша перша змінна манекена набирає значення 1, коли рівень B і 0 в іншому випадку; другий приймає значення 1, коли рівень C і 0 в іншому випадку, а третій приймає значення 1, коли рівень D і 0 в іншому випадку. Оскільки ваш постійний термін весь час дорівнює 1, розрахунковим коефіцієнтом першої манекенної змінної буде оцінка різниці між рівнем B і A і аналогічно для інших змінних манекена.

Якщо у вас немає постійного терміна, ви можете просто використовувати чотири манекенні змінні, побудовані як у попередньому прикладі, просто додавши одну для рівня А.


Приємна примітка про те, як має значення постійний термін у регресії.
Аарон вийшов із переповнення стека

5

У R визначте змінну як фактор, і вона реалізує її для вас:

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

який повертається

Call:
lm(formula = y ~ x)

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

Документація для 'lm', 'factor' та 'formula' в R заповнює деякі деталі.


1
+1 Це приємне доповнення до вже перелічених відповідей. Ми також можемо відзначити, що якщо у вас вже є змінна з назвами груп (наприклад, AD), це можна зробити у виклику функції аналізу без зайвого кроку:lm(y ~ as.factor(x))
gung - Повторно

Основна причина, з якою я дивлюся на використання фіктивних змінних, полягає в тому, що я працюю з великим набором даних з багатьма рівнями факторів (> 32), а деякі пакети в R (а саме випадковий ліс) не можуть обробляти фактори з багатьма рівнями, тому я намагався щоб побачити, чи були манекени.
screechOwl

1
Ви можете побудувати матрицю дизайну регресії за допомогою 'model.matrix': model.matrix (y ~ x) (x все ще є фактором) дасть вам матрицю з фіктивними змінними. Я не знайомий з пакетом випадкових лісів, але я підозрюю, що ви можете надати будь-яким функціям явну дизайнерську матрицю, яку ви отримуєте від model.matrix, а model.matrix, здається, працює з багатьма (тобто сотнями) рівнями.
Сірий

ps: ви можете відредагувати питання, щоб зрозуміти, що ви дбаєте про рішення, які працюють на багатьох рівнях. Питання задається про 4.
Сірий

4

whuber сказав вам у коментарях, що кодування 0-3 або 1-4 кодування замість створення фіктивних змінних - це не те, що ви хочете. Це спробу - я сподіваюся пояснити, що ви зробили б із цією моделлю і чому це неправильно.

Якщо ви кодуєте змінну X таким, що якщо A, то X = 1, якщо B, то X = 2, якщо C, то X = 3, якщо D, то X = 4, тоді, коли ви робите регресію, ви отримаєте лише один параметр. Скажімо, що в кінцевому підсумку було так, що розрахунковий параметр, пов'язаний з X, був 2. Це дозволить вам сказати, що очікувана різниця між середнім значенням B і середнім значенням A дорівнює 2. Це також говорить вам, що очікувана різниця між середнім значенням C а середнє значення B - 2. Деякі для D і C. Ви б змусили різниці в засобах для цих груп слідувати цій дуже суворій схемі. Цей один параметр вказує вам, як усі засоби вашої групи відносяться один до одного.

Отже, якщо ви робили такий вид кодування, вам потрібно буде припустити, що ви не лише отримали правильне впорядкування (адже в цьому випадку, якщо ви очікуєте збільшення від A до B, тоді вам слід очікувати збільшення від B до C і від C до D), але ви також повинні припустити, що ця різниця однакова!

Якщо замість цього ви робите фіктивне кодування, яке було запропоновано, ви дозволяєте кожній групі мати власне значення - ніяких обмежень. Ця модель набагато розумніша і відповідає на потрібні питання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.