Как реализовать фиктивную переменную, используя n-1 переменные?

9

Если у меня есть переменная с 4 уровнями, теоретически мне нужно использовать 3 фиктивные переменные. На практике, как это на самом деле осуществляется? Я использую 0-3, я использую 1-3 и оставляю 4 пустыми? Какие-либо предложения?

ПРИМЕЧАНИЕ: я собираюсь работать в R.

ОБНОВЛЕНИЕ: Что случилось бы, если бы я только использовал один столбец, который использует 1-4, соответствующий AD? Это сработает или создаст проблемы?

screechOwl
источник
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

Используйте контрасты "helmert":

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3
Аарон оставил переполнение стека
источник
1
Ради чистоты я бы сказал, что фиктивные переменные в строгом смысле - это только 1-й и 2-й ваши примеры. Фиктивные переменные также известны как индикаторные переменные контрастности. Хельмерта , отклонения и другие альтернативные типы контрастных переменных не должны называться для меня фиктивными .
ttnphns
1
@ttnphns Я согласен с тем, что контрасты Хельмерта не являются фиктивным кодированием с технической точки зрения, но, тем не менее, я считаю, что их вполне разумно включить сюда. Я не могу сказать, указываете ли вы на это ради ясности или предлагаете изменить ответ. @ Аарон +1, этот ответ был бы еще лучше, если бы ты кратко объяснил, как будет различаться интерпретация этих разных схем кодирования.
gung - Восстановить Монику
7

Предположим, ваши уровни переменных A, B, C и D. Если у вас есть постоянный член в регрессии, вам нужно использовать три фиктивные переменные, в противном случае вам нужно иметь все четыре.

Существует много математически эквивалентных способов реализации фиктивных переменных. Если у вас есть постоянный член в регрессии, один из способов - выбрать один из уровней в качестве «базового» уровня и сравнить остальные три с ним. Скажем для конкретности, что базовый уровень равен A. Тогда ваша первая фиктивная переменная принимает значение 1, когда уровень равен B, и 0 в противном случае; вторая принимает значение 1, когда уровень равен C, и 0 в противном случае, а третья принимает значение 1, когда уровень равен D, и 0 в противном случае. Поскольку ваш постоянный член все время равен 1, оценочный коэффициент первой фиктивной переменной будет оценкой разницы между уровнем B и A, и аналогично для других фиктивных переменных.

Если у вас нет постоянного члена, вы можете просто использовать четыре фиктивные переменные, сконструированные как в предыдущем примере, просто добавив одну для уровня A.

jbowman
источник
Хорошая заметка о том, как важно иметь постоянный член в регрессии.
Аарон оставил переполнение стека
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' и 'формула' в R заполняет некоторые детали.

Серый
источник
1
+1 Это хорошее дополнение к уже перечисленным ответам. Также можно отметить, что если у вас уже есть переменная с именами групп (например, AD), это можно сделать в вызове функции анализа без дополнительного шага: lm(y ~ as.factor(x))
gung - восстановить Monica
Основная причина, по которой я смотрю на использование фиктивных переменных, заключается в том, что я работаю с большим набором данных со многими уровнями факторов (> 32), и некоторые пакеты в R (а именно randomforest) не могут обрабатывать факторы с несколькими уровнями, поэтому я пытался чтобы увидеть, если манекен был работа вокруг.
screechOwl
1
Вы можете построить матрицу регрессионного проектирования, используя 'model.matrix': model.matrix (y ~ x) (x все еще фактор) даст вам матрицу с фиктивными переменными. Я не знаком с пакетом randomforest, но подозреваю, что вы можете дать любым функциям явную матрицу проектирования, которую вы получаете из model.matrix, а model.matrix, похоже, работает со многими (то есть сотнями) уровней.
Серый
PS: вы можете отредактировать вопрос, чтобы было ясно, что вы заботитесь о решениях, которые работают с множеством уровней. Вопрос задается о 4.
Серый
4

Уабер сказал вам в комментариях, что кодирование 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) но вы также должны предположить, что эта разница та же!

Если вместо этого вы делаете фиктивное кодирование, которое было предложено, вы позволяете каждой группе иметь свое собственное значение - никаких ограничений. Эта модель гораздо разумнее и отвечает на вопросы, которые вы хотите.

Dason
источник