有一个很好的解释这里的如何使用GGPLOT2创建散点图,利用NLS拟合数据,并绘制配合,都在一条线,像这样
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))
Run Code Online (Sandbox Code Playgroud)
我的问题是:使用这种结构,是否有可能从该调用中拉出实际的nls对象?我想知道我的系数等.现在我无法弄清楚如何在不进行单独的nls调用的情况下获取它们.
我的问题是:使用这种结构,是否有可能从该调用中拉出实际的nls对象?我想知道我的系数等.
这在ggplot2中目前是不可能的.ggplot2函数从模型返回预测,但不返回模型对象本身.因此,您无法nls从ggplot对象中提取对象以查找系数等.
ggplot2和ggplot2-dev邮件列表中有两个相关的讨论:
https://groups.google.com/d/topic/ggplot2/7tiUB2sjCxM/discussion
https://groups.google.com/d/topic/ggplot2-dev/dLGJnzIg4ko/discussion
快速简介:
虽然许多用户要求从ggplot对象中提取统计数据,但开发人员正在考虑它,但似乎有点反对.他们希望用户使用ggplot2进行可视化,并使用适当的建模函数来探索建模参数.但是,Hadley支持实现将模型对象传递给ggplot()调用的能力的想法.因此,您不会尝试nls从ggplot对象中提取对象,而是:
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)
Run Code Online (Sandbox Code Playgroud)
这样,模型只需要调用一次,你可以做任何你想做的事情,而且你不必去搜索ggplot对象来找到它.但是,我不知道何时或是否会实施.