J'ai un ensemble de données provenant d'une activité de tri de cartes en ligne. Les participants ont été présentés avec un sous-ensemble aléatoire de cartes (d'un ensemble plus grand) et ont été invités à créer des groupes de cartes qui leur semblaient similaires. Les participants ont pu créer autant de groupes qu'ils voulaient et nommer les groupes comme ils le souhaitaient.Création d'une matrice de similarité à partir de données de tri de cartes brutes
Un exemple ensemble de données est quelque chose comme ceci:
Data <- structure(list(Subject = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L), Card = structure(c(1L, 2L, 3L, 4L, 5L, 6L,
7L, 8L, 9L, 10L, 2L, 3L, 5L, 7L, 9L, 10L, 11L, 12L, 13L, 14L,
1L, 3L, 4L, 5L, 6L, 7L, 8L, 12L, 13L, 14L), .Label = c("A", "B",
"C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"), class = "factor"),
Group = structure(c(1L, 2L, 3L, 4L, 1L, 3L, 3L, 5L, 2L, 5L,
1L, 2L, 1L, 3L, 1L, 4L, 4L, 2L, 3L, 1L, 1L, 2L, 1L, 2L, 3L,
2L, 1L, 2L, 2L, 3L), .Label = c("Cat1", "Cat2", "Cat3", "Cat4",
"Cat5"), class = "factor")), .Names = c("Subject", "Card",
"Group"), class = "data.frame", row.names = c(NA, -30L))
A partir de ces données que je voudrais créer une matrice de similarité, idéalement de proportion ou le pourcentage de comptes totaux où ont été regroupés les éléments ensemble.
Quelque chose comme ceux-ci:
comte:
A B C D E F G H I J K L M N
A 0 0 1 1 0 0 1 0 0 0 0 0 0
B 0 0 0 1 0 0 0 2 0 0 0 0 1
C 0 0 0 0 1 2 0 0 0 0 2 1 0
D 1 0 0 0 0 0 1 0 0 0 0 0 0
E 1 1 0 0 0 1 0 1 0 0 1 1 1
F 0 0 1 0 0 1 0 0 0 0 0 0 1
G 0 0 2 0 1 1 0 0 0 0 1 2 0
H 1 0 0 1 0 0 0 0 1 0 0 0 0
I 0 2 0 0 1 0 0 0 0 0 0 0 1
J 0 0 0 0 0 0 0 1 0 1 0 0 0
K 0 0 0 0 0 0 0 0 0 1 0 0 0
L 0 0 2 0 1 0 1 0 0 0 0 1 0
M 0 0 1 0 1 0 2 0 0 0 0 1 0
N 0 1 0 0 1 1 0 0 1 0 0 0 0
Chaque sujet nommé leurs groupes différemment, il est donc impossible d'indexer par le Groupe.
En plus des comptes, je voudrais également générer une matrice de similarité qui rapporte le pourcentage de participants, qui ont été présentés avec une paire particulière de Cards
, qui ont regroupé ces deux Cards
ensemble.
Dans l'exemple ensemble de données, ceci comme résultat:
A B C D E F G H I J K L M N
A 0 0 50 50 0 0 50 0 0 0 0 0 0
B 0 0 0 50 0 0 0 100 0 0 0 0 100
C 0 0 0 0 50 67 0 0 0 0 100 50 0
D 50 0 0 0 0 0 50 0 0 0 0 0 0
E 50 50 33 0 0 33 0 50 0 0 33 50 50
F 0 0 50 0 0 50 0 0 0 0 0 0 100
G 0 0 67 0 33 50 0 0 0 0 50 100 0
H 50 0 0 50 0 0 0 0 100 0 0 0 0
I 0 100 0 0 50 0 0 0 0 0 0 0 100
J 0 0 0 0 0 0 0 100 0 100 0 0 0
K 0 0 0 0 0 0 0 0 0 100 0 0 0
L 0 0 100 0 33 0 50 0 0 0 0 50 0
M 0 0 50 0 50 0 100 0 0 0 0 50 0
N 0 100 0 0 50 100 0 0 100 0 0 0 0
Toute suggestion serait grandement appréciée!
Editer: Alors que la réponse ci-dessous fonctionne pour les données d'exemple. Il ne semble pas fonctionner pour mes données réelles affichées ici: https://www.dropbox.com/s/mhqwyok0nmvt3g9/Sim_Example.csv?dl=0
Par exemple, dans ces données, je compte manuellement 22 paires de "Aircraft" et "Airport", ce qui serait ~ 55%. Mais la réponse donne ci-dessous un compte de 12 et 60%
Je reçois une erreur au-dessus 'Erreur dans select (., -G1, -G2): arguments non utilisés (-G1, -G2) ' Les pourcentages semblent également désactivés. Je pense que les pourcentages devraient être le pourcentage par rapport au nombre total – JLC
@JLC: changer cela en 'dplyr :: select (., -G1, -G2)'. Je suppose que vous avez un autre paquet avec une fonction nommée similaire chargée quelque part? J'avais l'habitude d'obtenir cette erreur moi-même quand 'MASS :: select' masqué' dplyr :: select'. –
Merci! Cela a fonctionné, mais les pourcentages sont décalés d'un peu – JLC