5

这里有一个很好的解释如何使用 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)) 

我的问题是:使用这种结构,是否可以从该调用中提取实际的 nls 对象?我想知道我的系数等。现在我不知道如何在不进行单独的 nls 调用的情况下获得它们。

4

1 回答 1

7

我的问题是:使用这种结构,是否可以从该调用中提取实际的 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()调用的能力的想法。因此,与其尝试nlsggplot对象中提取对象,不如:

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) 

这样,模型只需要被调用一次,你可以对它做任何你想做的事情,而且你不必通过搜索ggplot对象来找到它。但是,我不知道何时或是否会实施。

于 2012-05-23T19:14:58.217 回答