2010-09-15 3 views
3

Existe-t-il un moyen facile de récupérer les quartiles traditionnels retournés par summary.formula avec method="reverse" à partir de la bibliothèque Hmisc R? Je voudrais obtenir la moyenne/SD + Min/Max pour chacune de mes variable continue mais je n'ai pas réussi. Il est possible de passer un appel de fonction personnalisée via l'argument fun, mais cela ne fonctionne pas lorsque method="reverse".Modifier les variables récapitulatives retournées par Hmisc summary()

+3

http://www.mail-archive.com/[email protected]/msg86002.html - une chose que vous pourriez faire est de manipuler le résumé de la fonction elle-même et créer votre propre paquet avec une fonction summary2: P – Gnark

+0

Un exemple autonome serait vraiment utile ... surtout pour ceux d'entre nous qui ne sont pas familiers avec 'summary.formula'. –

+0

@Gnark Je n'aime pas vraiment réécrire les fonctions de Frank Harrell, à moins que je ne pense bénéficier de son backend d'exportation LaTeX. De toute façon, c'est toujours une option :) – chl

Répondre

1

La réponse est non. L'auteur du paquet a décidé (comme il l'indique dans le post Gnark lié à) que les erreurs minimum, maximum et standard sont (paraphrasant) "certainement pas descriptif" de variables continues par groupe catégoriel.

Vous pouvez définir prmsd=TRUE dans print.summary.formula.reverse pour obtenir la moyenne et l'écart-type, mais il n'y a aucun moyen d'obtenir le minimum ou le maximum.

> Data <- data.frame(y=sample(1:2,20,TRUE),x=rnorm(20)) 
> print(summary.formula(y ~ x,data=Data,method="reverse"),prmsd=TRUE) 


Descriptive Statistics by y 

+-+---------------------------------------------------------+---------------------------------------------------------+ 
| |1              |2              | 
| |(N=11)             |(N=9)             | 
+-+---------------------------------------------------------+---------------------------------------------------------+ 
|x|-0.5382053/-0.3375862/ 0.3093839 -0.1434995+/- 1.1113628|-0.4464168/-0.1677906/ 0.3007129 0.1234988+/- 0.9666382| 
+-+---------------------------------------------------------+---------------------------------------------------------+ 
+0

Il semble que nous ayons écrit notre réponse tout à fait en même temps ... En fait, Harrell utilise une fonction interne appelée 'sfn' qui appelle la fonction' quantile() ', donc je pense nous pouvons le remplacer par un appel à 'range()' pour obtenir nos résultats, et écraser la fonction interne, non? – chl

+0

@chl: vous pouvez essayer, mais je doute que ce soit aussi simple. La fonction (ou les autres que vous utilisez) peut attendre ces trois quantiles plus tard. –

2

Est-ce que ce doit être dans le package Hmisc? Si vous avez une trame de données de variables continues, vous pouvez obtenir le même résultat avec une simple utilisation du paquet Reshape:

df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100)) 

f.summary <- function(x) { 
x <- melt(x) 
x <- cast(x, variable ~ ., c(mean, sd, min, max)) 
return(x) 
} 

f.summary(df) 

HTH

+0

Merci! En fait, j'ai réussi à écrire quelque chose de similaire, mais sans "remodeler"; Votre solution semble de loin meilleure que la mienne :) – chl

3

Arf ... Je regarde juste le code de summary.formula() dans le Hmisc paquet et je peux confirmer que Mean et SD sont en effet calculés mais pas montrés lors de l'impression sur la ligne de commande. Donc, nous devons le demander explicitement en appelant la fonction print(), par ex.

library(Hmisc) 
df <- data.frame(g=sample(LETTERS[1:3], 100, rep=TRUE), replicate(3, rnorm(100))) 
s <- summary(g ~ ., method="reverse", data=df) 
latex(s, prmsd=TRUE, digits=2) # replace latex by print to output inline 

qui donne le tableau suivant:

alt text

Questions connexes