2009-09-21 5 views
3

Où chaque point de données a un appariement de A et B et il y a plusieurs entrées dans A et multiple entame dans B. IE plusieurs syndromes et diagnostics multiples, bien que pour chaque point de données il y ait un seul syndrome-diagnostics paire.visualiser les associations entre deux groupes de données

exemples, des suggestions ou des idées très appréciées

est ici ce que les données est. Et je veux voir les connexions entre les valeurs de A et B (combien de GG sont liés à TTs etc). Les deux sont des types de données nominaux.

ID,A ,B 
1,GG,TT 
2,AA,SS 
3,BB,XX 
4,DD,SS 
5,DD,TT 
6,CC,XX 
7,HH,ZZ 
8,AA,TT 
9,CC,RR 
10,DD,ZZ 
11,AA,XX 
12,AA,TT 
13,DD,SS 
14,DD,XX 
15,AA,YY 
16,CC,ZZ 
17,FF,SS 
18,FF,XX 
19,BB,VV 
20,GG,VV 
21,GG,SS 
22,AA,RR 
23,AA,TT 
24,AA,SS 
25,CC,VV 
26,CC,TT 
27,FF,RR 
28,GG,UU 
29,CC,TT 
30,BB,ZZ 
31,II,TT 
32,FF,RR 
33,BB,SS 
34,GG,YY 
35,FF,RR 
36,BB,VV 
37,II,RR 
38,CC,YY 
39,FF,VV 
40,AA,XX 
41,AA,ZZ 
42,GG,VV 
43,BB,UU 
44,II,UU 
45,II,SS 
46,DD,SS 
47,AA,UU 
48,BB,VV 
49,GG,TT 
50,BB,TT 
+0

S'il vous plaît fournir des exemples de jeu de données - thx – Andreas

Répondre

5

C'est ce que je fais. Une couleur plus foncée indique une combinaison plus importante de A et B.

dataset <- data.frame(A = sample(LETTERS[1:5], 200, prob = runif(5), replace = TRUE), B = sample(LETTERS[1:5], 200, prob = runif(5), replace = TRUE)) 
Counts <- as.data.frame(with(dataset, table(A, B))) 
library(ggplot2) 
ggplot(Counts, aes(x = A, y = B, fill = Freq)) + geom_tile() + scale_fill_gradient(low = "white", high = "black") 

Ou si vous préférez les lignes

library(ggplot2) 
dataset <- data.frame(A = sample(letters[1:5], 200, prob = runif(5), replace = TRUE), B = sample(letters[1:5], 200, prob = runif(5), replace = TRUE)) 
Counts <- as.data.frame(with(dataset, table(A, B))) 
Counts$X <- 0 
Counts$Xend <- 1 
Counts$Y <- as.numeric(Counts$A) 
Counts$Yend <- as.numeric(Counts$B) 
ggplot(Counts, aes(x = X, xend = Xend, y = Y, yend = Yend, size = Freq)) + 
geom_segment() + scale_x_continuous(breaks = 0:1, labels = c("A", "B")) + 
scale_y_continuous(breaks = 1:5, labels = letters[1:5]) 

Cette troisième option ajouter des étiquettes aux points de données à l'aide geom_text().

library(ggplot2) 
dataset <- data.frame(
    A = sample(letters[1:5], 200, prob = runif(5), replace = TRUE), 
    B = sample(LETTERS[20:26], 200, prob = runif(7), replace = TRUE) 
) 
Counts <- as.data.frame(with(dataset, table(A, B))) 
Counts$X <- 0 
Counts$Xend <- 1 
Counts$Y <- as.numeric(Counts$A) 
Counts$Yend <- as.numeric(Counts$B) 
ggplot(Counts, aes(x = X, xend = Xend, y = Y, yend = Yend)) + 
geom_segment(aes(size = Freq)) + 
scale_x_continuous(breaks = 0:1, labels = c("A", "B")) + 
scale_y_continuous(breaks = -1) + 
geom_text(aes(x = X, y = Y, label = A), colour = "red", size = 7, hjust = 1, vjust = 1) + 
geom_text(aes(x = Xend, y = Yend, label = B), colour = "red", size = 7, hjust = 0, vjust = 0) 
+0

Merci Thierry, je voudrais un moyen de voir les connexions entre chaque paire Donc, je peux voir quels éléments du groupe A mènent à des éléments du groupe B. Je vais joindre un exemple de jeu de données –

+4

Voici le png pour la deuxième solution de Thierry: http://i38.tinypic.com /2d0juw6.png –

7

vos données sont bipartites, je suggère tracer des points dans le premier facteur d'un côté, les points dans l'autre facteur de l'autre, avec des lignes entre elles, comme ceci:

enter image description here

Le code que je l'habitude de générer c'était:

## Make up data. 
data <- data.frame(X1=sample(state.region, 10), 
        X2=sample(state.region, 10)) 

## Set up plot window. 
plot(0, xlim=c(0,1), ylim=c(0,1), 
    type="n", axes=FALSE, xlab="", ylab="") 

factor.to.int <- function(f) { 
    (as.integer(f) - 1)/(length(levels(f)) - 1) 
} 

segments(factor.to.int(data$X1), 0, factor.to.int(data$X2), 1, 
     col=data$X1) 
axis(1, at = seq(0, 1, by = 1/(length(levels(data$X1)) - 1)), 
    labels = levels(data$X1)) 
axis(3, at = seq(0, 1, by = 1/(length(levels(data$X2)) - 1)), 
    labels = levels(data$X2)) 
+3

Voici ce que vous devriez obtenir lorsque vous appliquez la technique de Jonathan à l'exemple de jeu de données: http://i33.tinypic.com/5ey26o.png –

+0

Nice. En regardant la sortie, je pense qu'il pourrait être agréable de colorer le code sur l'un des facteurs. –

3

Peut-être mosaicplot:

X <- structure(list(
    ID = 1:50, 
    A = structure(c(6L, 1L, 2L, 4L, 4L, 3L, 7L, 1L, 3L, 4L, 1L, 1L, 4L, 4L, 1L, 3L, 5L, 5L, 2L, 6L, 6L, 1L, 1L, 1L, 3L, 3L, 5L, 6L, 3L, 2L, 8L, 5L, 2L, 6L, 5L, 2L, 8L, 3L, 5L, 1L, 1L, 6L, 2L, 8L, 8L, 4L, 1L, 2L, 6L, 2L), .Label = c("AA","BB", "CC", "DD", "FF", "GG", "HH", "II"), class = "factor"), 
    B = structure(c(3L, 2L, 6L, 2L, 3L, 6L, 8L, 3L, 1L, 8L, 6L, 3L, 2L, 6L, 7L, 8L, 2L, 6L, 5L, 5L, 2L, 1L, 3L, 2L, 5L, 3L, 1L, 4L, 3L, 8L, 3L, 1L, 2L, 7L, 1L, 5L, 1L, 7L, 5L, 6L, 8L, 5L, 4L, 4L, 2L, 2L, 4L, 5L, 3L, 3L), .Label = c("RR", "SS", "TT", "UU", "VV", "XX", "YY", "ZZ"), class = "factor") 
), .Names = c("ID", "A", "B"), class = "data.frame", row.names = c(NA, -50L) 
) 

mosaicplot(with(X,table(A,B))) 

Pour vous par exemple ensemble de données:

mosaicplot

2

Merci! Je pense que la connectivité entre les éléments de chaque classe est mieux visualisée par les exemples de liens graphiques donnés par Jonathon et Thierry. La 2ème de Thierry qui montre l'ampleur est définitivement là où je vais commencer.

mise à jour merci à tous pour vos idées et conseils!

Je suis venu acrossthe le paquet bipartite qui a des fonctions pour visualiser ce genre de données. Je pense que c'est une visualisation claire des relations que j'essaie de montrer.

fait:

library(bipartite) 
    dataset <- data.frame(
     A = sample(letters[1:5], 200, prob = runif(5), replace = TRUE), 
     B = sample(LETTERS[20:26], 200, prob = runif(7), replace = TRUE) 
    ) 
    datamat <- as.matrix(table(dataset$A, dataset$B)) 
    visweb(datamat, text = "interaction", textsize = .8) 

donnant: visweb result

couldnt mettre l'image en tant que nouvel utilisateur :(

+0

bien que, je réalise maintenant que j'ai besoin de différents axes y, que je découvre, est impossible dans ggplot – julian

+0

vous pouvez utiliser geom_text() pour mettre les étiquettes – Thierry