2013-08-16 3 views
3

Я ищу способ создания фиктивных переменных, которые разделяют данные категории на все возможные комбинации группировок. Например, если мы имеем три категории (например, А, В и С), существует пять возможных группировок:Как сгенерировать сгруппированные фиктивные переменные?

Three groups: A/B/C 
Two groups: A&B/C 
Two groups: A&C/B 
Two groups: A/B&C 
One group: A&B&C 

Затем фиктивная переменная для каждой группы будет выводиться различным колонкам кадра данных. Таким образом, конечный результат я хочу выглядит следующей таблице:

sample_num category grouping1 grouping2 grouping3 grouping4 grouping5 
         A; B; C  A&B; C  A&C; B  A; B&C  A&B&C 
-----------+---------+------------+-----------+-----------+-----------+---------- 
     1   A   1   1   1   1   1 
     2   A   1   1   1   1   1 
     3   A   1   1   1   1   1 
     4   A   1   1   1   1   1 
     5   B   2   1   2   2   1 
     6   B   2   1   2   2   1 
     7   B   2   1   2   2   1 
     8   C   3   2   1   2   1 
     9   C   3   2   1   2   1 
    10   C   3   2   1   2   1 
    11   C   3   2   1   2   1 
    12   C   3   2   1   2   1 
+1

Ваш окончательный результат не ясен - что входит в какую категорию? – thelatemail

+0

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

+0

Спасибо. Я новичок в этом сайте, и я как-то отменил ваше редактирование. Попытка вернуть их. –

ответ

2

Функция model.matrix в stats пакет (загружается по умолчанию) будет строить «фиктивные переменные», хотя и не такого рода как вы описали. Первый аргументом является «формулой» R:

>dat <- read.table(text="sample_num category 
+  1   A  
+  2   A  
+  3   A  
+  4   A  
+  5   B  
+  6   B  
+  7   B  
+  8   C  
+  9   C  
+  10   C  
+  11   C  
+  12   C", header=TRUE) 
> model.matrix(~category, data=dat) 

    (Intercept) categoryB categoryC 
1   1   0   0 
2   1   0   0 
3   1   0   0 
4   1   0   0 
5   1   1   0 
6   1   1   0 
7   1   1   0 
8   1   0   1 
9   1   0   1 
10   1   0   1 
11   1   0   1 
12   1   0   1 
attr(,"assign") 
[1] 0 1 1 
attr(,"contrasts") 
attr(,"contrasts")$category 
[1] "contr.treatment" 

I (сильно) подозревает, что ваша четыре колонки группа манекенов должна быть линейно зависима и один из них получили бы отвергнут функцией регрессии. Возможны другие контрастные аргументы. Вы должны изучить:

?model.matrix 
?contrasts 

Это SUM-контрастов, без перехвата:

> model.matrix(~category+0, data=dat, contrasts = list(category = "contr.sum")) 
    categoryA categoryB categoryC 
1   1   0   0 
2   1   0   0 
3   1   0   0 
4   1   0   0 
5   0   1   0 
6   0   1   0 
7   0   1   0 
8   0   0   1 
9   0   0   1 
10   0   0   1 
11   0   0   1 
12   0   0   1 
attr(,"assign") 
[1] 1 1 1 
attr(,"contrasts") 
attr(,"contrasts")$category 
[1] "contr.sum" 

Если вы хотите посмотреть на автоматическое вычисление различных уровней взаимодействия, вам понадобится три переменные, а не один переменная с тремя уровнями:

> dat <- expand.grid(A=letters[1:3], B=letters[4:6], C=letters[7:9]) 
> str(model.matrix(~ A*B*C)) 
Error in str(model.matrix(~A * B * C)) : 
    error in evaluating the argument 'object' in selecting a method for function 'str': Error in model.frame.default(object, data, xlev = xlev) : 
    invalid type (closure) for variable 'C' 
> str(model.matrix(~ A*B*C, data=dat)) 
num [1:27, 1:27] 1 1 1 1 1 1 1 1 1 1 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:27] "1" "2" "3" "4" ... 
    ..$ : chr [1:27] "(Intercept)" "Ab" "Ac" "Be" ... 
- attr(*, "assign")= int [1:27] 0 1 1 2 2 3 3 4 4 4 ... 
- attr(*, "contrasts")=List of 3 
    ..$ A: chr "contr.treatment" 
    ..$ B: chr "contr.treatment" 
    ..$ C: chr "contr.treatment" 

model.matrix(~ A*B*C, data=dat) 

omitted output 
+0

Спасибо DWin. Но что, если у нас есть более трех категорий? Когда у нас есть четыре категории (такие как A, B, C и D), мы будем иметь группы с двумя фиктивными переменными, и каждая из них включает две категории (например, фиктивная переменная «0» для A и B и «1» для C и D и т. Д.). –

Смежные вопросы