Frage

erforsche ich einige Daten, so das erste, was ich tun wollte, war versuchen, eine normale (Gaussian) Verteilung, um es zu passen. Dies ist mein erstes Mal versucht, dies in R, so dass ich es einen Schritt zu einer Zeit nehme. Zuerst habe ich vor-binned meine Daten:

myhist = data.frame(size = 10:27, counts = c(1L, 3L, 5L, 6L, 9L, 14L, 13L, 23L, 31L, 40L, 42L, 22L, 14L, 7L, 4L, 2L, 2L, 1L) )

qplot(x=size, y=counts, data=myhist)

Plot1

Da ich zählt will, ich brauche einen Normalisierungsfaktor (N) hinzufügen, um die Dichte zu vergrößern:

fit = nls(counts ~ N * dnorm(size, m, s), data=myhist, start=c(m=20, s=5, N=sum(myhist$counts)) )   

Dann erstelle ich die angepassten Daten für die Anzeige und alles funktioniert gut:

x = seq(10,30,0.2)
fitted = data.frame(size = x, counts=predict(fit, data.frame(size=x)) )
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_line(data=fitted)

Plot2

Ich habe aufgeregt, wenn ich diesen Thread gefunden, die Gespräche über geom_smooth mit () alles in einem Schritt zu tun, aber ich kann es nicht an der Arbeit:

Hier ist, was ich versuche, ... und was ich bekommen:

ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_smooth(method="nls", formula = counts ~ N * dnorm(size, m, s), se=F, start=list(m=20, s=5, N=300, size=10))

Error in method(formula, data = data, weights = weight, ...) : 
  parameters without starting value in 'data': counts

Der Fehler scheint darauf hinzudeuten, dass es für die beobachtete Variable zu passen versucht, zählt , aber das macht keinen Sinn, und es Freaks vorhersagbar, wenn ich einen „Start“ Wert angeben, für zählt auch:

fitting parameters ‘m’, ‘s’, ‘N’, ‘size’, ‘counts’ without any variables

Error in eval(expr, envir, enclos) : object 'counts' not found

Jede Idee, was ich falsch mache? Es ist nicht das Ende der Welt, natürlich, aber weniger Schritte sind immer besser, und ihr immer mit den eleganten Lösungen für diese gemeinsame Aufgaben kommen.

Vielen Dank im Voraus!

Jeffrey

War es hilfreich?

Lösung

der erste Fehler zeigt an, dass ggplot2 nicht die Variable 'count' finden kann, die in der Formel verwendet wird, in Daten.

Statistik stattfinden, nachdem Mapping, das heißt, Größe -> x, und zählt -.> Y

Hier ist ein Beispiel für nls in geom_smooth mit:

ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + 
  geom_smooth(method="nls", formula = y ~ N * dnorm(x, m, s), se=F, 
              start=list(m=20, s=5, N=300)) 

Der Punkt ist, dass die Verwendung von x und y, anstelle von Größe und Zählungen, die in der Beschreibung der Formel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top