Comment ggplot calcule-t-il les intervalles de confiance pour les régressions?

15

Le package de traçage R ggplot2 a une fonction impressionnante appelée stat_smooth pour tracer une ligne (ou courbe) de régression avec la bande de confiance associée.

Cependant, j'ai du mal à comprendre exactement comment cette bande de confiance est générée, à chaque fois que la ligne de régression (ou "méthode"). Comment puis-je trouver ces informations?

static_rtti
la source
2
Voir la section intitulée «Détails» dans votre lien.
Stéphane Laurent
1
@ StéphaneLaurent: J'ai lu cette section, mais j'ai toujours du mal à connecter les points. J'utilise la méthode "rlm" pour ajuster une ligne, comment est calculé l'intervalle de confiance (mathématiquement, quelle équation / algorithme?)? Comment puis-je trouver ces informations?
static_rtti
1
Je pense donc que vous devriez poser une question plus précise.
Stéphane Laurent
1
Je pense que votre question est assez précise ... mais je suppose que vous n'obtiendrez pas de réponse ici. Vous aurez peut-être plus de chance au sein du groupe google ggplot2
russellpierce

Réponses:

22

De la Detailssection de l'aide

Le calcul est effectué par la fonction générique Predictdf (actuellement non documentée) et ses méthodes. Pour la plupart des méthodes, les limites de confiance sont calculées à l'aide de la méthode de prédiction - les exceptions sont le loess qui utilise une approximation basée sur t, et pour glm où l'intervalle de confiance normal est construit sur l'échelle du lien, puis retransformé à l'échelle de la réponse.

Donc Predictdf appellera généralement stats::predict, qui à son tour appellera la bonne predictméthode pour la méthode de lissage. D'autres fonctions impliquant stat_smooth sont également utiles à considérer.

La plupart des fonctions d'ajustement du modèle auront une predictméthode associée classau modèle. Ceux-ci prendront généralement un newdataobjet et un argument se.fitqui indiqueront si les erreurs standard seront ajustées. (voir ?predict) pour plus de détails.

se
afficher l'intervalle de confiance autour de lisse? (VRAI par défaut, voir le niveau à contrôler

Ceci est transmis directement à la méthode de prédiction pour renvoyer les erreurs standard appropriées (selon la méthode)

fullrange
si l'ajustement doit couvrir toute la plage du tracé, ou uniquement les données

Ceci définit les newdatavaleurs pour xlesquelles les prédictions seront évaluées

level niveau d'intervalle de confiance à utiliser (0,95 par défaut)

Passé directement à la méthode de prédiction afin que l'intervalle de confiance puisse définir la valeur critique appropriée (par exemple predict.lmutilisations qt((1 - level)/2, df)des erreurs standard à multiplier par

n nombre de points pour évaluer plus en douceur à

Utilisé conjointement avec fullrangepour définir les xvaleurs de l' newdataobjet.

Dans un appel à, stat_smoothvous pouvez définir sece qui correspond partiellement à se.fit(ou se) et définir l' intervalargument si nécessaire. leveldonnera le niveau de l'intervalle de confiance (par défaut 0,95).

L' newdataobjet est défini dans le traitement, en fonction de votre réglage fullrangesur une séquence de longueur ndans la plage complète du tracé ou des données.

Dans votre cas, en utilisant rlm, cela utilisera predict.rlm, qui est défini comme

predict.rlm <- function (object, newdata = NULL, scale = NULL, ...)
{
    ## problems with using predict.lm are the scale and
    ## the QR decomp which has been done on down-weighted values.
    object$qr <- qr(sqrt(object$weights) * object$x)
        predict.lm(object, newdata = newdata, scale = object$s, ...)
}

Il s'agit donc d'un appel interne predict.lmavec une mise à l'échelle appropriée de la qrdécomposition et de l' scaleargument.

mnel
la source
... et Predict.rlm est caché dans MASS ... et l'appel à Predictdf passe les arguments Model, Xseq, SE et Level à Predict.rlm ... mais d'où viennent ces valeurs? Eh bien, je suppose que cela dépend de ce qui se passe lorsque les arguments sont passés de stat_smooth à StatSmooth $ new ... qui à son tour appelle ...
russellpierce
1
Ce que je veux dire, c'est que votre réponse est un pas dans la bonne direction, mais répondre entièrement à la question OP n'est pas aussi trivial qu'il y paraît à première vue (bien que l'on s'attende à ce que le code se comporte de manière sensée ... on n'est pas sûr à moins de le retracer complètement )
russellpierce
2
On s'attend à ce que le code se comporte de manière sensée, si la predictméthode a été configurée de manière standard. J'ai modifié ma réponse pour répondre aux problèmes soulevés dans votre premier commentaire.
mnel
@mnel: merci beaucoup pour cette réponse très détaillée et utile!
static_rtti