2016-07-18 17 views
0

Ich versuche, eine exponentielle Regression in ggplot2 zu tun. Also zuerst mein skript:R ggplot2 exponentielle Regression mit R² und p

g <- ggplot(data, aes(x=datax, y=datay), color="black") + 
geom_point(shape=1) + stat_smooth(method = 'nls', formula = y~a*exp(b*x), aes(colour = 'Exponential'), se = FALSE) 
g <- g + theme_classic() 
g <- g + theme(panel.grid.major=element_blank()) 
g <- g + theme(panel.grid.minor=element_blank()) 
g <- g + theme(axis.line.x=element_line(color="black"), 
      axis.line.y=element_line(color="black"), 
      panel.border=element_blank(), 
      panel.background=element_blank()) 
g <- g + labs(x="\ndatax",y="datay\n") 
g <- g + theme(axis.text.y=element_text(size=14)) 
g <- g + theme(axis.text.x=element_text(size=14)) 
g <- g + theme(axis.title.y=element_text(size=18,vjust=1)) 
g <- g + theme(axis.title.x=element_text(size=18,vjust=1)) 
g 

Dies ist das Bild, das ich bekam

enter image description here

Als R-Anfänger ich das Drehbuch tat durch Skripte von mir und dem Internet zu mischen. Ich bekomme immer folgende Fehlermeldung:

"In (function (formula, data = parent.frame(), start, control = nls.control(), : No starting values specified for some parameters. Initializing ‘a’, ‘b’ to '1.'.Consider specifying 'start' or using a selfStart model"

ich keine bessere Art und Weise zu tun, um die exponentielle Graph, noch nicht gefunden hat.

Außerdem möchte ich die Farbe des Graphen in schwarz ändern und die Legende löschen, und ich möchte den R² und p Wert in der Grafik haben. (vielleicht auch die Konfidenzintervalle?)

+0

rate ich würde versuchen, die 'nls' Funktion ausführen und Werte außerhalb von ggplot beginnend ersten, so können Sie sehen, was Sie tun. nicht wirklich verwandt, aber r2 macht keinen Sinn für die nichtlineare Regression (http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2892436/) – user20650

+0

Könnten Sie bitte einige Daten zum Testen bereitstellen? – Eugen

+0

Es sieht nicht wie ein Fehler aus, wie Sie eine Handlung erhalten. All is sagt, dass, weil Sie keine Startwerte für Ihre Parameter angegeben haben (wie Sie in nls tun müssen), dass sie bei eins initialisiert wurden. Beachten Sie, dass das Nicht-Spezifizieren von vernünftigen Startwerten oft dazu führt, dass es nicht konvergiert, so dass es wert ist, in dieses hinein zu schauen. – user20650

Antwort

1

Es ist nicht einfach, ohne ein reproduzierbares Beispiel und so viele Fragen zu beantworten. Sind Sie sicher, dass die von Ihnen gemeldete Nachricht ein Fehler und keine Warnung ist? Auf meinem eigenen Laptop, mit Datensatz 'Iris', bekam ich eine Warnung ...

Wie Sie jedoch lesen können? Nls Seite auf R-Dokumentation, sollten Sie über den Parameter "Start" einen Anfangswert für den Start bereitstellen die Schätzungen helfen, die Konvergenz zu finden. Wenn Sie es nicht angeben, sollte nls() selbst einige Dummy-Standardwerte verwenden (in Ihrem Fall sind a und b auf 1 gesetzt).

Man könnte so etwas wie dies versuchen:

g <- ggplot(data, aes(x=datax, y=datay), color="black") + 
    geom_point(shape=1) + stat_smooth(method = 'nls', 
    method.args = list(start = c(a=1, b=1)), 
    formula = y~a*exp(b*x), colour = 'black', se = FALSE) 

Sie R gesagt, dass die Farbe der Handlung ist „Exponential“, denke ich, dass so funktionieren wird (Ich habe versucht, mit R-Basis-Datensatz ‚Iris 'und arbeitete). Sie können feststellen, dass ich den Start-Parameter als Element einer Liste an "method.args" übergeben: Dies ist eine neue Funktion in GGPLOT v2.0.0.

this helps

bearbeiten: nur der Vollständigkeit halber, lege ich den Code, den ich auf meinem Laptop mit Standard-Datensatz wiedergegeben: (bitte darauf achten, dass es keinen Sinn, eine exponentielle Anpassung mit einer solchen Datenmenge hat, aber der Code ausgeführt wird, ohne Warnung)

library(ggplot2) 
data('iris') 
g1 <- ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
     geom_point(color='green') +geom_smooth(method = 'nls', 
     method.args = list(start=c(a=1, b=1)), se = FALSE, 
     formula = y~a*exp(b*x), colour='black') 
g1 
+0

Großartig, Ihr Skript hat funktioniert! Danke vielmals! – Sofia