Comment puis-je définir des variables en tant que groupe de comparaison incluant toutes les variables sauf X ?

J'ai une base de données avec une colonne qui a le pays d'occurrence différent et une autre colonne avec le type d'événement qui s'est produit (plus de 3000 entrées) et est structurée comme illustré ci-dessous :

#> country event
#> 1 USA Abdominal discomfort
#> 2 USA Abdominal discomfort
#> 3 Canada Vomiting
#> 4 UK Alopecia
#> 5 Hungary Agitation
#> 6 France Abscess

Donc, comme vous pouvez l'imaginer, j'ai des milliers de variables différentes !

Je veux calculer les valeurs d'un tableau de contingence comme celui-ci:





















X événementPas X événement
Sunb
Cc

Solution du problème

Il semble que vos données soient dans ce format :

df <- data.frame(country = c('USA', 'USA', 'Canada', 'UK', 'UK', 'France',
'Hungary', 'Hungary', 'France', 'Canada'),
event = c('Vomiting', 'Agitation', 'Headache', 'Headache',
'Abdominal pain', 'Vomiting', 'Agitation',
'Abdominal pain', 'Anaphylaxis', 'Vomiting'))
df
#> country event
#> 1 USA Vomiting
#> 2 USA Agitation
#> 3 Canada Headache
#> 4 UK Headache
#> 5 UK Abdominal pain
#> 6 France Vomiting
#> 7 Hungary Agitation
#> 8 Hungary Abdominal pain
#> 9 France Anaphylaxis
#> 10 Canada Vomiting

Cela étant, vous auriez besoin d'un tableau pour chaque condition dans chaque pays, ce qui peut entraîner des dizaines ou des centaines de tableaux différents à traiter (par exemple, il y aurait 25 tableaux même pour ce petit exemple de jouet).

Pour vous aider à résumer vos données, vous pouvez obtenir directement le rapport de cotes et la valeur p pour chaque condition dans chaque pays en créant chaque tableau dans un lapplyappel et en effectuant un test de Fisher pour en extraire les statistiques. Ensuite, vous pouvez transformer le tout en une trame de données :

`row.names<-`(do.call(rbind, lapply(sort(unique(df$event)), function(x) {
do.call(rbind, lapply(sort(unique(df$country)), function(y) {
tab <- table(df$country == y, df$event == x)
ft <- fisher.test(tab)
data.frame(country = y, condition = x, event = tab[2, 2], no_event = tab[2, 1],
ROW_event = tab[1, 2], ROW_no_event = tab[1, 1],
odds_ratio = ft$estimate,
p_value = ft$p.value)
}))
})), NULL)
#> country condition event no_event ROW_event ROW_no_event odds_ratio
#> 1 Canada Abdominal pain 0 2 2 6 0.000000
#> 2 France Abdominal pain 0 2 2 6 0.000000
#> 3 Hungary Abdominal pain 1 1 1 7 5.291552
#> 4 UK Abdominal pain 1 1 1 7 5.291552
#> 5 USA Abdominal pain 0 2 2 6 0.000000
#> 6 Canada Agitation 0 2 2 6 0.000000
#> 7 France Agitation 0 2 2 6 0.000000
#> 8 Hungary Agitation 1 1 1 7 5.291552
#> 9 UK Agitation 0 2 2 6 0.000000
#> 10 USA Agitation 1 1 1 7 5.291552
#> 11 Canada Anaphylaxis 0 2 1 7 0.000000
#> 12 France Anaphylaxis 1 1 0 8 Inf
#> 13 Hungary Anaphylaxis 0 2 1 7 0.000000
#> 14 UK Anaphylaxis 0 2 1 7 0.000000
#> 15 USA Anaphylaxis 0 2 1 7 0.000000
#> 16 Canada Headache 1 1 1 7 5.291552
#> 17 France Headache 0 2 2 6 0.000000
#> 18 Hungary Headache 0 2 2 6 0.000000
#> 19 UK Headache 1 1 1 7 5.291552
#> 20 USA Headache 0 2 2 6 0.000000
#> 21 Canada Vomiting 1 1 2 6 2.645752
#> 22 France Vomiting 1 1 2 6 2.645752
#> 23 Hungary Vomiting 0 2 3 5 0.000000
#> 24 UK Vomiting 0 2 3 5 0.000000
#> 25 USA Vomiting 1 1 2 6 2.645752
#> p_value
#> 1 1.0000000
#> 2 1.0000000
#> 3 0.3777778
#> 4 0.3777778
#> 5 1.0000000
#> 6 1.0000000
#> 7 1.0000000
#> 8 0.3777778
#> 9 1.0000000
#> 10 0.3777778
#> 11 1.0000000
#> 12 0.2000000
#> 13 1.0000000
#> 14 1.0000000
#> 15 1.0000000
#> 16 0.3777778
#> 17 1.0000000
#> 18 1.0000000
#> 19 0.3777778
#> 20 1.0000000
#> 21 1.0000000
#> 22 1.0000000
#> 23 1.0000000
#> 24 1.0000000
#> 25 1.0000000

Créé le 2022-04-14 par le paquet reprex (v2.0.1)

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"