R + ggplot: comment utiliser une plus lisse personnalisée (gaussien)
-
24-10-2019 - |
Question
J'utilise R. J'ai 25 variables de plus de 15 points de temps, avec 3 ou plus réplicats par variable par point de temps. J'ai melt
ed cela dans un data.frame
, que je peux tracer en utilisant heureusement (entre autres) la commande de facet_wrap()
ggplot. Mon cadre de données fondu est appelé lis
; voici sa tête et la queue, donc vous aurez une idée des données:
> head(lis)
time variable value
1 10 SELL 8.170468
2 10 SELL 8.215892
3 10 SELL 8.214246
4 15 SELL 8.910654
5 15 SELL 7.928537
6 15 SELL 8.777784
> tail(lis)
time variable value
145 1 GAS5 10.92248
146 1 GAS5 11.37983
147 1 GAS5 10.95310
148 1 GAS5 11.60476
149 1 GAS5 11.69092
150 1 GAS5 11.70777
Je peux obtenir un beau terrain de toutes les séries chronologiques, ainsi que d'une spline ajustée et 95% des intervalles de confiance à l'aide des commandes de ggplot2 suivantes:
p <- ggplot(lis, aes(x=time, y=value)) + facet_wrap(~variable)
p <- p + geom_point() + stat_smooth(method = "lm", formula = y ~ ns(x,3))
Le problème est que le plus lisse n'est pas à mon goût - les intervalles de confiance à 95% sont loin. Je voudrais utiliser des processus gaussiennes (GP) pour obtenir une meilleure régression et estimation de covariance pour ma série chronologique.
Je peux adapter à un médecin généraliste en utilisant quelque chose comme
library(tgp)
out <- bgp(X, Y, XX = seq(0, 200, length = 100))
X
qui prend du temps, les observations Y
et fait des prédictions à chaque point dans XX
. Le out
objet contient un tas de choses au sujet de ces prédictions, y compris une matrice de covariance je peux utiliser à la place de l'intervalle, je reçois la confiance de 95% (je pense?) De ns()
.
Le problème est que je ne suis pas comment emballer cette fonction pour faire l'interface avec ggplot2::stat_smooth()
. Toutes les idées ou des pointeurs quant à la façon de procéder serait grandement appréciée!
La solution
Stat_smooth a y
, ymin
et esthétique ymax
que vous pouvez utiliser avec une plus lisse personnalisé, comme indiqué ici: http://had.co.nz/ggplot2/stat_smooth.html . Vous créez une trame de données avec les prévisions et CI de votre plus lisse personnalisé et l'utilisation que directement dans stat_smooth
(spécifiant un nouvel argument de données). Vous pourriez être en mesure d'utiliser stat_smooth(method="tgp::bgp",XX=seq(0,200,length=100))
mais je n'avez pas essayé.
Autres conseils
On dirait que bgp
ne suit pas le style standard R pour les fonctions de modélisation. Cela signifie que vous ne pouvez pas l'utiliser à l'intérieur geom_smooth
et vous devrez adapter à l'extérieur du modèle de l'appel ggplot2. Vous pouvez également envoyer un courriel l'auteur du paquet tgp
et les encourager à suivre les normes R.