There's a nice explanation here of how to use ggplot2 to create a scatterplot, fit the data using nls, and plot the fit, all in one line, like so
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) )
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))
My question is: using this construction, is it possible to pull out the actual nls object from that call? I'd like to know my coefficients, etc. Right now I can't figure out how to get them without doing a separate nls call.
5 Extract coefficients from ggplot2-created nls fit 1 Plot a smooth and extrapolated curve using an nls model with several fitted parameters 1 Combine nls function in geom_smooth with ggplot2 3 geom_smooth gives different fit than nls alone 1 Using nls and ggplot2 to fit a logarithmic curve to data 2
5 Extract coefficients from ggplot2-created nls fit 1 Plot a smooth and extrapolated curve using an nls model with several fitted parameters 1 Combine nls function in geom_smooth with ggplot2 3 geom_smooth gives different fit than nls alone
How to extract data from a plot created by ggplot2 in R? Of course, a plot is created with some data but we might want to get the data from plot as well. This is possible in R with ggplot_build function but it works only for ggplot objects, if we create a plot with plot function then we cannot extract the data with the plot using ggplot_build.
How get plot from nls in R? 5 Extract coefficients from ggplot2-created nls fit 1 Plot a smooth and extrapolated curve using an nls model with several fitted parameters 1 Combine nls function in geom_smooth with ggplot2
My question is: using this construction, is it possible to pull out the actual nls object from that call? I'd like to know my coefficients, etc.
This is currently not possible in ggplot2. The ggplot2 functions return predictions from the model, but not the model object itself. Thus, you cannot extract an nls
object from the ggplot
object to find the coefficients, etc.
There are two relevant discussions in the ggplot2 and ggplot2-dev mailing lists:
https://groups.google.com/d/topic/ggplot2/7tiUB2sjCxM/discussion
https://groups.google.com/d/topic/ggplot2-dev/dLGJnzIg4ko/discussion
Quick synopsis:
While many users have asked for the ability to extract statistics from ggplot
objects, the developers are considering it but seem somewhat opposed. They would prefer users to use ggplot2 for visualization, and appropriate modelling functions to explore modelling parameters. However, Hadley supports the idea of implementing the ability to pass a model object to a ggplot()
call. So, instead of trying to extract the nls
object from your ggplot
object, you would instead:
mod <- nls(y ~ N * dnorm(x, m, s), se = F, start = list(m = 20, s = 5, N = 300),
data = myhist)
ggplot(data = myhist, aes(x = size, y = counts)) + geom_point() +
geom_smooth(mod)
That way, the model only needs to be called once, you can do anything you want to it, and you don't have to go searching through ggplot
objects to find it. However, I don't know when or if this will be implemented.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With