2016-07-14 11 views
1

Ich habe ein einfachen Daten-Set mit zwei kontinuierlichen Variablen (Vesicle und Zellen) und einer einzigen Gruppierung Variable mit zwei Ebenen (HC und RA), hier simuliert:Wie zeichnen Sie nichtlineare Regressionslinien innerhalb von Gruppen und Gesamtdaten in ggplot2?

###Simulate Vesicle variable### 
Vesicle.hc <- sort(runif(23, 0.98, 5)) #HC group 
Vesicle1.ra <- sort(runif(5, 0.98, 3)) #RA group 
Vesicle <- c(Vesicle.hc, Vesicle1.ra) #Combined 

###Simulate Cells variable### 
z <- seq(23) 
Cells.hc <- (rnorm(23, 50 + 30 * z^(0.2), 8))*runif(1, 50000, 400000) #HC group 
Cells.ra <- c(8.36e6, 6.35e6, 1.287e7, 1.896e7, 1.976e7)    #RA group 
Cells <- c(Cells.hc, Cells.ra)           #Combined 

###Define groups and create dataframe### 
Group <- rep("HC",23)        #HC group 
Group1 <- rep("RA",5)        #RA Group 
Group <- c(Group, Group1)       #Combined 
df <- data.frame(Cells, Vesicle, Group)    #Data frame 

Ich habe ein Streudiagramm der Daten aufgetragen mit ggplot2 mit nicht-linearen Regressionsgeraden (gezeigt here), die zu jeder Gruppe ausgestattet einzeln mit:

###Plot data### 
library(ggplot2) 
ggplot(df, aes(x = Cells, y = Vesicle, colour=Group)) + 
    xlab("Stimulated neutrophils") + 
    ylab("MV/cell") + 
    stat_smooth(method = 'nls', formula = 'y~a*exp(b*x)',      #Fit nls model 
       method.args = list(start=c(a=0.1646, b=9.5e-8)), se=FALSE) + #Starting values 
    geom_point(size=4, pch=21,color = "black", stroke=1.5, aes(fill=Group)) #Change point style 

Meine Frage ist, zusätzlich zu den nicht-linearen Regressionsfunktionen jeder Gruppe Plotten, wie kann ich auch Grundstück eine Regressionslinie passt zu alle die Daten, d.h. die Daten modellieren, wobei der Beitrag der Gruppierungsvariablen ignoriert wird?

+1

Sie haben ein unerwartetes Symbol dort bei der Erstellung von 'Cells.hc' bekommen. Außerdem sehe ich nicht, wo 'z' erzeugt wird. –

+0

Fügen Sie ein weiteres 'stat_smooth' mit' aes (group = NULL) 'hinzu, denke ich. – Axeman

+0

Oh meine aufrichtige Entschuldigung, ich hatte diese Variablen in meiner Umgebung schon, als ich das Arbeitsbeispiel machte - wie schlampig von mir. Der bearbeitete Code sollte nun funktionieren. Ich habe Ihren Vorschlag @ Axeman versucht, aber obwohl keine Fehler geworfen werden, gibt es auch keine Änderung an der Handlung. – Hefin

Antwort

0
ggplot(df, aes(x = Cells, y = Vesicle, colour=Group)) + 
    xlab("Stimulated neutrophils") + 
    ylab("MV/cell") + 
    stat_smooth(method = 'nls', formula = 'y~a*exp(b*x)', 
       method.args = list(start=c(a=0.1646, b=9.5e-8)), se=FALSE) + 
    stat_smooth(color = 1, method = 'nls', formula = 'y~a*exp(b*x)', 
       method.args = list(start=c(a=0.1646, b=9.5e-8)), se=FALSE) + 
    geom_point(size=4, pch=21,color = "black", stroke=1.5, aes(fill=Group)) 

enter image description here

+0

Schön danke. Wenn Sie also "color = 1" hinzufügen, wird verhindert, dass stat_smooth die Gruppenklassifikationen erbt. – Hefin

+0

Ja das ist es. Es gibt auch ein "inherit.aes" -Argument, aber das bedeutet, dass Sie wieder 'x' und' y' definieren müssen, so oft ist es einfacher, die Gruppierung zu annullieren. – Axeman