1
votes

Puis-je calculer l'erreur standard de toutes les colonnes avec la fonction "summary_all" dans R dplyr

Je prépare le matériel de cours pour le dplyr en R. En supposant que notre ensemble de données est "iris", quelqu'un peut calculer la moyenne et le SD de toutes les colonnes avec la fonction "Tout résumer"

iris %>% 
  group_by(Species) %>% 
  summarise_all(funs(mean, sd, se = sd/sqrt(n)), na.rm=TRUE)

Cependant, lorsque j'essaie de calculer l'erreur standard, je prends un message d'erreur.

iris %>% 
  group_by(Species) %>% 
  summarise_all(funs(mean, sd), na.rm=TRUE)

Toute aide est grandement appréciée


0 commentaires

3 Réponses :


4
votes

Vous pouvez utiliser :

iris %>% group_by(Species) %>% summarise_all(list(mean, sd, se = ~sd(./sqrt(.))))

Ou probablement plus court mais ne vous donne pas les noms de colonnes que vous désirez:

library(dplyr)
iris %>% 
  group_by(Species) %>% 
  summarise_all(list(mean = ~mean(.), sd = ~sd(.), se = ~sd(./sqrt(.))))


3 commentaires

Merci Ronak! Que signifie le point entre (.) Et que signifie le «~».


~ est une syntaxe de style formule pour appliquer des fonctions (c'est une alternative aux fonctions anonymes) et . ici signifie les valeurs de colonne dans chaque groupe.


ou dans le prochain dplyr 1.0.0: iris%>% group_by (Species)%>% summary (across (.fns = list (mean = mean, sd = sd, se = ~ sd (./ sqrt (.)))) )



1
votes

Nous pouvons utiliser summarise avec across dans les nouvelles versions

library(dplyr)
iris %>%
     group_by(Species) %>%
    summarise(across(everything(), list(mean = mean, sd = sd, se = ~sd(.)/sqrt(.))))


1 commentaires

@einar je ne l'ai pas vu quand j'ai posté. Il est préférable de publier comme réponse au lieu de commentaires car les gens ne relisent généralement pas tous les commentaires. Merci



1
votes

Pour tous ceux qui trébuchent sur cela, je suis assez sûr que les autres commentaires calculent mal le SE comme sd / sqrt au lieu du sd / (sqrt de la taille de l'échantillon). Je n'ai pas la réputation de répondre à ceux-ci, mais en remplaçant

se = ~sd(.x)/sqrt(length(.x))

dans les formules ci-dessus devrait fonctionner.


0 commentaires