2016-08-08 8 views
0

Вопрос обновлен !!

У меня есть 15 столбцов категориальных переменных, и я хочу корреляцию между ними. Набор данных в длину и 20000 набор данных выглядит следующим образом:Корреляция для нескольких категориальных переменных tableau

state | job | hair_color | car_color | marital_status 
NY | cs | brown  | blue  | s 
FL | mt | black  | blue  | d 
NY | md | blond  | white  | m 
NY | cs | brown  | red  | s 

Обратите внимание, что первая строка и последний ряд NY, cs и s повторы. Я хочу узнать, какие шаблоны. NY и cs сильно коррелированы. Мне нужно ранжировать комбинацию значений в столбцах. Надеюсь, теперь вопрос имеет смысл. Обратите внимание, что это NOT 0Cили cs. О том, сколько раз NY и blond появляются вместе в одной строке. Мне нужно сделать это для всех значений по строкам. Надеюсь, теперь это имеет смысл.

Я попытался использовать cor() с R, но поскольку это категориальные переменные, функция не работает. Как я могу работать с этим набором данных, чтобы найти корреляцию между ними?

+0

Можете ли вы уточнить, что вы пытаетесь измерить с 'кор()'? Например, это 'cor (c (« красный »,« синий »), c (« красный »,« желтый »))' больше, чем, или меньше, чем cor (c («красный», синий "), c (" красный "," коричневый "))? –

+0

Нет, не обычный. Для id 1 у меня есть 15 цветов, для id 2 других 15 цветов, и у меня 20 000 id. Цвета не повторяются по id. Я хочу найти, как каждый цвет коррелирует с другими цветами. С 'cor()', R возвращает матрицу таблицы со всеми переменными и как каждая переменная коррелирует. Цвета переменной не являются обычными, они просто категоричны. Есть смысл, что я пытаюсь сделать? – Gilbert

+0

Да, но для 16 переменных вместо 2. – Gilbert

ответ

0

Возможно, вы захотите обратиться к Ways to calculate similarity. Предположим, что ваши данные

d <- structure(list(state = structure(c(2L, 1L, 1L, 2L, 2L), .Label = c("FL", 
"NY"), class = "factor"), job = structure(c(2L, 1L, 4L, 3L, 2L 
), .Label = c("bs", "cs", "md", "mt"), class = "factor"), hair_color = structure(c(3L, 
3L, 1L, 2L, 3L), .Label = c("black", "blond", "brown"), class = "factor"), 
    car_color = structure(c(1L, 2L, 1L, 3L, 2L), .Label = c("blue", 
    "red", "white"), class = "factor"), marital_status = structure(c(3L, 
    1L, 1L, 2L, 3L), .Label = c("d", "m", "s"), class = "factor")), .Names = c("state", 
"job", "hair_color", "car_color", "marital_status"), class = "data.frame", row.names = c(NA, 
-5L)) 

данных:

> d 
    state job hair_color car_color marital_status 
1 NY cs  brown  blue    s 
2 FL bs  brown  red    d 
3 FL mt  black  blue    d 
4 NY md  blond  white    m 
5 NY cs  brown  red    s 

Мы можем вычислить "несходства" между наблюдениями:

library(cluster) 
daisy(d, metric = "euclidean") 

Выход:

> daisy(d, metric = "euclidean") 
Dissimilarities : 
    1 2 3 4 
2 0.8    
3 0.8 0.6   
4 0.8 1.0 1.0  
5 0.2 0.6 1.0 0.8 

Metric : mixed ; Types = N, N, N, N, N 
Number of objects : 5 

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

out <- daisy(d, metric = "euclidean") 
pairs <- expand.grid(2:5, 1:4) 
pairs <- pairs[pairs[,1]!=pairs[,2],] 
similars <- pairs[which(out<.8),] 

Учитывая порог 0,8,

> similars 
    Var1 Var2 
4 5 1 
6 3 2 
8 5 2