visualisation d'une fonction cachée

Questions ne rentrant pas dans les rubriques ci-dessus.

Modérateur : Groupe des modérateurs

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

visualisation d'une fonction cachée

Messagepar Tillard » 08 Aoû 2006, 17:59

Bonjour
dans le package survival, il y a une fonction nommée survfit.coxph que j'arrive à lister avec

Code : Tout sélectionner

methods(class="coxph")


mais dont je n'arrrive pas a visualiser le code.

Quelqu'un aurait-il une solution ?
Cordialement
Emmanuel Tillard
UMR ERRC (Elevage des Ruminants en Regions Chaudes)
CIRAD - St PIERRE (La Réunion)
tel: 02 62 49 92 54

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 09 Aoû 2006, 07:26

bonjour,

voici une proposition un peu brutale :
tu peux récupérer le code dans le "package source" (ex. survival_2.26.tar.gz) et farfouiller ensuite dans le dossier "survival_2.26.tar\survival\R". Une grande partie des fichiers portent l’extension « .s »*.
c’est peut-être (sûrement) pour cela que l’on ne peut pas visualiser le code.

en espérant t'avoir aidé un peu :)

@++

Pierre


*survival est un package de S-plus proposé initialement par Terry Therneau et porté sous R par Thomas Lumley :
voir dans :

Code : Tout sélectionner

library(help=survival)
=@===--------¬-------¬------¬-----¬
liens utiles :
http://www.gnurou.org/Writing/SmartQuestionsFr
http://neogrifter.free.fr/welcomeOnInternet.jpg
]<((((*< -------------------------------

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

visualisation fonction cachée

Messagepar Tillard » 09 Aoû 2006, 16:03

merci beaucoup pour ta reponse
ca m'a vraiment aidé; j'ai pu récupérer la fonction cachée sans probleme
c'est étonnant que ce package ne soit pas encore aujourd'hui completement R-ifier
Emmanuel
Emmanuel Tillard

UMR ERRC (Elevage des Ruminants en Regions Chaudes)

CIRAD - St PIERRE (La Réunion)

tel: 02 62 49 92 54

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 09 Aoû 2006, 16:32

Salut Manu,

Tu peux aussi faire:

Code : Tout sélectionner

survival:::survfit.coxph


pour récupérer le code. Ce n'est pas équivalent à l'examen des sources qui est préférable car des lignes de commentaires peuvent sauter lors de l'installation du package.

NB: tout le code est en R mais les auteurs contrôlent les fonctions visibles par les utilisateurs avec un mécanisme NAMESPACE. Voir le manuel "Writing R extensions" p. 18 (p. 23 du pdf).

Amitiés,

Renaud

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 09 Aoû 2006, 21:56

bonjour,


NB: tout le code est en R mais les auteurs contrôlent les fonctions visibles par les utilisateurs avec un mécanisme NAMESPACE. Voir le manuel "Writing R extensions" p. 18 (p. 23 du pdf).


merci pour l'info :)

Pierre
=@===--------¬-------¬------¬-----¬

liens utiles :

http://www.gnurou.org/Writing/SmartQuestionsFr

http://neogrifter.free.fr/welcomeOnInternet.jpg

]<((((*< -------------------------------

Romain François
Messages : 42
Enregistré le : 08 Déc 2005, 19:23
Contact :

Messagepar Romain François » 12 Aoû 2006, 16:28

Il y a aussi :

> getAnywhere(survfit.coxph)

Romain
--
Romain François
Consultant R Indépendant
http://romainfrancois.blog.free.fr

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

qqmath appliquée à un objet de type ranef

Messagepar Tillard » 21 Aoû 2006, 13:48

Bonjour
On peut lire dans l'aide de la fonction ranef (package Matrix):

To produce a “caterpillar plot” of the random effects apply qqmath to the result of ranef with postVar = TRUE.
exemple

Code : Tout sélectionner

library(lme4)
data(sleepstudy)
fm1 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
ranef(fm1)
rr1 <- ranef(fm1, postVar = TRUE)
qqmath(rr1)


je souhaiterais visualiser le code de la fonction "qqmath" pour refaire les calculs à la main
quelqu'un a une idée ?
Emmanuel Tillard

UMR ERRC (Elevage des Ruminants en Regions Chaudes)

CIRAD - St PIERRE (La Réunion)

tel: 02 62 49 92 54

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 21 Aoû 2006, 14:22

Code : Tout sélectionner

> library(lattice)
> qqmath
function (x, data, ...)
UseMethod("qqmath")
<environment: namespace:lattice>
> methods(qqmath)
[1] qqmath.formula* qqmath.numeric*

   Non-visible functions are asterisked
> lattice:::qqmath.formula
function (x, data = NULL, allow.multiple = is.null(groups) ||
    outer, outer = !is.null(groups), distribution = qnorm, f.value = NULL,
    auto.key = FALSE, aspect = "fill", panel = "panel.qqmath",
    prepanel = NULL, scales = list(), strip = TRUE, groups = NULL,
    xlab, xlim, ylab, ylim, drop.unused.levels = lattice.getOption("drop.unused.levels"),
    ..., default.scales = list(), subscripts = !is.null(groups),
    subset = TRUE)
{
    formula <- x

[...]

Bon courage,

Renaud

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

qqmath et objet de classe ranef.lmer

Messagepar Tillard » 21 Aoû 2006, 16:03

Merci renaud pour la réponse

je reformule la question, qui n'etait pas vraiment précise je l'avoue
ce n'est pas la fonction graphique en elle même qui m'intéresse (et que je connais deja)
ce que je souhaite en fait, c'est retrouver le calcul de la longueur des segments de l'intervalle de confiance des effets aléatoires lorsque qqmath est appliquée à un objet de classe ranef.lmer

j'ai refait les calculs à la main à partir des effets aléatoires fournis par la fonction ranef(), à partir de la variance postérieure des effets aléatoires fournie par la fonction ranef() mais ne retrouve pas exactement les mêmes resultats graphiques que ceux donnés par qqmath()

ps: question subsidiaire qui a son importance: comment activer les smilies dans GuR

amicalement
Emmanuel Tillard

UMR ERRC (Elevage des Ruminants en Regions Chaudes)

CIRAD - St PIERRE (La Réunion)

tel: 02 62 49 92 54

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 22 Aoû 2006, 17:09

Ah ! Petit canaillou: il aurait fallu commencer un nouveau sujet !

Bon, là c'est subtil. Il y a une méthode qqmath cachée dans le code de Matrix (le package, pas le film ;-) ). Je m'en doutais car il y a qques temps, Matrix était livré avec un package latticeExtra ou qqe chose comme ça. J'ai pu vérifier en chargeant les sources de Matrix et en regardant dans le code du fichier NAMESPACE, qui comporte, en fin de fichier:

Code : Tout sélectionner

## lmer-related
exportMethods("BIC", "anova", "coef", "confint", "deviance", "fitted",
              "fixef", "formula", "head", "lmer", "logLik", "mcmcsamp",
              "plot", "qqmath", "ranef", "residuals",
              "resid", "simulate", "summary", "tail", "terms", "update",
              "vcov", "VarCorr", "with")


(entre parenthèses, c'est quand même beau d'arriver à mélanger du S3 et du S4 !)

Donc après, il ne restait plus qu'à chercher le mot qqmath dans les fichiers du package, ce qui m'a conduit au fichier source lmer.R, et d'y découvrir:

Code : Tout sélectionner

setMethod("qqmath", signature(x = "ranef.lmer"),
          function(x, data, ...) {
              prepanel.ci <- function(x, y, se, subscripts, ...) {
                  y <- as.numeric(y)
                  se <- as.numeric(se[subscripts])
                  hw <- 1.96 * se
                  list(ylim = range(y - hw, y + hw, finite = TRUE))
              }
              panel.ci <- function(x, y, se, subscripts, pch = 16, ...)  {
                  panel.grid(h = -1,v = -1)
                  panel.abline(h = 0)
                  x <- as.numeric(x)
                  y <- as.numeric(y)
                  se <- as.numeric(se[subscripts])
                  ly <- y - 1.96 * se
                  uy <- y + 1.96 * se
                  panel.segments(x, y - 1.96*se, x, y + 1.96 * se,
                                 col = 'black')
                  panel.xyplot(x, y, pch = pch, ...)
              }
              f <- function(x) {
                  if (!is.null(attr(x, "postVar"))) {
               #       require("lattice", quietly = TRUE)
                      pv <- attr(x, "postVar")
                      cols <- 1:(dim(pv)[1])
                      se <- unlist(lapply(cols, function(i) sqrt(pv[i, i, ])))
                      nr <- nrow(x)
                      nc <- ncol(x)
                      ord <- unlist(lapply(x, order)) +
                          rep((0:(nc - 1)) * nr, each = nr)
                      rr <- 1:nr
                      ind <- gl(ncol(x), nrow(x), labels = names(x))
                      xyplot(unlist(x)[ord] ~
                             rep(qnorm((rr - 0.5)/nr), ncol(x)) | ind[ord],
                             se = se, prepanel = prepanel.ci, panel = panel.ci,
                             scales = list(y = list(relation = "free")),
                             xlab = "Standard normal quantiles",
                             ylab = NULL, aspect = 1, ...)
                  } else {
                      qqmath(~values|ind, stack(x),
                             scales = list(y = list(relation = "free")),
                             xlab = "Standard normal quantiles",
                             ylab = NULL, ...)
                  }
              }
              lapply(x, f)
          })


D'après ce que je comprends, le calcul est trivial: se sert de la variance des effets alaétoires pour calculer leur écart-type et trace un IC autour de la moyenne avec approximation normale.

Si tu veux faire les choses bien, je pense qu'il vaut mieux passer par mcmcsamp, stocker les effets aléatoires et étudier leur distribution.

Amitiés,

Renaud


Retourner vers « Archives : Autres »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité