2017-09-05 5 views
1

Je suis aux prises avec la façon d'ajouter à la fois une ligne de tendance individuelle et une ligne de tendance de groupe à mes parcelles. (R et en utilisant ggplot2).R: Ajout de lignes de tendance polynomiales individuelles et de groupes à un tracé GMM

Voici le code que j'utilise:

MensHG.fm2=lmer(HGNewtons~Temperature+QuadTemp+Run+(1|Subject),MenstrualData) #model 

plot.hg<-data.frame([email protected],fitted.re=fitted(MensHG.fm2)) 

g1<-ggplot(plot.hg,aes(x=Temperature,y=HGNewtons))+geom_point() 

g2<-g1+facet_wrap(~Subject, nrow=6)+ylab(bquote('HG MVF (N)'))+xlab(bquote('Hand ' ~T[sk] ~(degree*C))) 

g3<-g2+geom_smooth(method="glm", formula=y~ploy(x,2), se=FALSE) #This gives me my individual trendlines 

Maintenant, je veux mettre sur la ligne de tendance pour la partie g1 des données (tendance générale) sur chacun de mes parcelles individuelles - quelle est la meilleure façon de le faire? Je peux voir la tendance si j'utilise le code:

g5=g1+geom_smooth(method="glm", formula=y~poly(x,2), se=FALSE) 

enter image description here

mais cette courbe de tendance disspears dès que je fais la facette-wrap (je reçois la même sortie que g3)

Il ne semble pas résoudre le problème en utilisant: g4 < + -g3 geom_smooth (data = MensHG.fm2)

+0

double possible de [Comment puis-je placer une lisse identique sur chaque facette d'un objet ggplot2?] (Https: //stackoverflow.com/questions/6673074/how-do-i-place-an-identical-smooth-on-each-facet-of-a-ggplot2-object) – aosmith

+0

Au lieu de 'geom_smooth', utilisez' geom_line (aes (Temperature, fitted.re)) 'pour générer une ligne connectant toutes les valeurs ajustées. – Brian

Répondre

1

Sans un exemple de travail minimale de vos données, je les utilise BUILTIN iris données. Ici, j'ai prétendu que les espèces étaient des sujets différents pour la démonstration.

library(lme4) 
library(ggplot2) 

fit.iris <- lmer(Sepal.Width ~ Sepal.Length + I(Sepal.Length^2) + (1|Species), data = iris) 

J'utilise aussi deux paquets supplémentaires pour simplifier, broom et dplyr. augment de broom fait la même chose que vous avez fait ci-dessus avec ..., fitted.re=fitted(MensHG.fm2), mais avec quelques cloches et sifflets supplémentaires. J'utilise également dplyr::select, mais ce n'est pas strictement nécessaire, en fonction de la sortie que vous désirez (la différence entre Fig 2 vs Fig 3).

library(broom) 
library(dplyr) 
augment(fit.iris) 
# output here truncated for simplicity 
Sepal.Width Sepal.Length I.Sepal.Length.2. Species .fitted  .resid .fixed ... 
1   3.5   5.1    26.01 setosa 3.501175 -0.001175181 2.756738 
2   3.0   4.9    24.01 setosa 3.371194 -0.371193601 2.626757 
3   3.2   4.7    22.09 setosa 3.230650 -0.030649983 2.486213 
4   3.1   4.6    21.16 setosa 3.156417 -0.056417409 2.411981 
5   3.6   5.0    25 setosa 3.437505 0.162495354 2.693068 
6   3.9   5.4    29.16 setosa 3.676344 0.223656271 2.931907 
ggplot(augment(fit.iris), 
     aes(Sepal.Length, Sepal.Width)) + 
    geom_line(#data = augment(fit.iris) %>% select(-Species), 
      aes(y = .fixed, color = "population"), size = 2) + 
    geom_line(aes(y = .fitted, color = "subject", group = Species), size = 2) + 
    geom_point() + 
    #facet_wrap(~Species, ncol = 2) + 
    theme(legend.position = c(0.75,0.25)) 

Notez que je # -commented deux déclarations: data = ... et facet_wrap(...). Avec ces lignes commentées, vous obtenez une sortie comme ceci:

enter image description here

Vous avez votre douce population (.fixed pour effets fixes) sur toute la gamme, et vous avez un groupe aplanit qui montrent le modèle ajusté valeurs (.fitted), en prenant en compte les interceptions de niveau sujet.

Ensuite, vous pouvez montrer à facettes en prenant la deuxième # marque -comment dans l'extrait de code:

enter image description here

C'est le même, mais étant donné que les valeurs ajustées existent uniquement dans la plage de les données d'origine pour chaque panneau de niveau sujet, la population lisse est tronquée à cette plage.

Pour contourner cette difficulté, nous pouvons supprimer la première # marque -comment:

enter image description here