So Im using nls in ggplot2 to plot a power curve code is below:
mass <- c(4120,4740,5550,5610,6520,6870,7080,8500,8960,10350,10480,10550,11450,11930,12180,13690,13760,13800,14050,14700,15340,15790,15990,17300,18460,18630,18650,20050,23270,24530,25030,27540,28370,33460,33930,34450,34500)
solv_acc <- c(2760,2990,2990,3180,3900,4010,4140,4680,4750,5330,4980,5860,5930,5570,5910,6790,6690,7020,6240,6620,6600,6860,7940,7600,8250,8530,7410,9160,9140,10300,10440,10390,11020,12640,11920,12110,12650)
df <- data.frame(Mass=log(mass),Solv=log(solv_acc))
plotter <- (ggplot(df, aes(x=Mass, y=Solv)) + geom_point(shape=1) + stat_smooth(method = "nls", formula = y~i*x^z, start=list(i=1,z=0.2)))
plotter <- plotter + labs(x = "Mass kDa" ,y = "Solvent Accessibility")
print(plotter)
Running the above code I get the following error:
Error in pred$fit : $ operator is invalid for atomic vectors
I am assuming the error occurs when it tries to use predict()
?
When I perform nls
without the use of ggplot2 on the same data frame I do not get an error
> nls1=nls(Solv~i*Mass^z,start=list(i=1,z=0.2),data=df)
> predict(nls1)
[1] 7.893393 7.997985 8.115253 8.123230 8.234519 8.273135 8.295350 8.429871 8.468550 8.574147 8.583270 8.588134 8.647895 8.677831 8.692939 8.777944 8.781648 8.783757 8.796793 8.829609
[21] 8.860502 8.881445 8.890558 8.947512 8.994380 9.000995 9.001769 9.053953 9.161073 9.198919 9.213390 9.281841 9.303083 9.420894 9.430834 9.441670 9.442703
Can anyone point out why I am getting the error?
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
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 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
The geom_smooth () function in ggplot2 can plot fitted lines from models with a simple structure. Supported model types include models fit with lm (), glm (), nls (), and mgcv::gam (). Fitted lines can vary by groups if a factor variable is mapped to an aesthetic like color or group.
Your question is answered in this question on the ggplot2 mailing list. Briefly,
According to the documentation for predict.nls, it is unable to create standard errors for the predictions, so that has to be turned off in the stat_smooth call. .
So, we need to turn off the standard errors:
ggplot(df, aes(x=Mass, y=Solv)) +
stat_smooth(method="nls", formula=y~i*x^z, se=FALSE,
start=list(i=1,z=0.2)) +
geom_point(shape=1)
Update 2019: for new versions of ggplot2, we need the start
argument to nls
to be passed like this:
ggplot(df, aes(x = Mass, y = Solv)) +
stat_smooth(method = "nls",
se = FALSE,
method.args = list(
formula = y ~ i*x^z,
start = list(i=1, z=2)
)) +
geom_point()
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