2016-08-08 42 views
0

Frage aktualisiert !!

Ich habe 15 Spalten kategoriale Variablen und ich möchte die Korrelation zwischen ihnen. Der Datensatz ist 20.000+ lang und der Datensatz sieht wie folgt aus:Korrelation für mehrere kategoriale Variablen 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 

Beachten Sie, dass der 1. Reihe und letzten Reihe NY, cs und s wiederholt. Ich möchte diese Art von Mustern herausfinden. NY und CS ist stark korreliert. Ich muss die Kombination von Werten in den Spalten einstufen. Hoffe jetzt macht die Frage Sinn. Bitte beachten Sie, dass NICHT zählt NY oder cs ist. Ist ungefähr herauszufinden, wie oft NY und blond zusammen in der gleichen Zeile erscheint. Ich muss das für alle Werte nach Zeile tun. Hoffe, das macht jetzt Sinn.

Ich habe versucht, cor() mit R zu verwenden, aber da dies kategoriale Variablen sind, funktioniert die Funktion nicht. Wie kann ich mit diesem Datensatz arbeiten, um die Korrelation zwischen diesen zu finden?

+0

Können Sie erklären, was Sie mit 'cor()' zu messen versuchen? Zum Beispiel ist 'cor (c (" rot "," blau "), c (" rot "," gelb "))" höher als, gleich oder kleiner als "cor (c (" rot "," rot ") blau "), c (" rot "," braun "))'? –

+0

Nein, ist nicht gewöhnlich. Für ID 1 habe ich 15 Farben, für ID 2 andere 15 Farben und ich habe 20.000 IDs. Farben wiederholen sich nicht nach ID. Ich möchte herausfinden, wie jede Farbe mit den anderen Farben korreliert. Mit 'cor()' liefert R eine Tabellenmatrix mit allen Variablen und wie jede Variable korreliert. Farbenvariable sind nicht gewöhnlich, sie sind nur kategorisch. Machen Sie Sinn, was ich versuche zu tun? – Gilbert

+0

Ja, aber für 16 Variablen statt 2. – Gilbert

Antwort

0

Sie können sich auf Ways to calculate similarity beziehen. Angenommen, Ihre Daten

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)) 

Daten:

> 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 

Wir können berechnen die "Unterschiede" zwischen Beobachtungen:

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

Ausgang:

> 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 

, die uns sagt, dass Beobachtungen 1 und 5 sind am wenigsten ähnlich. Bei vielen Beobachtungen ist es offensichtlich unmöglich, die Unähnlichkeitsmatrix visuell zu untersuchen, aber wir können die Paare herausfiltern, die unter einen bestimmten Schwellenwert fallen, z.

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

ein Schwellenwert von 0,8 gegeben,

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