R ggplot2 指数回归与 R² 和 p

R ggplot2 exponential regression with R² and p

我正在尝试在 ggplot2 中进行指数回归。所以首先是我的脚本:

g <- ggplot(data, aes(x=datax, y=datay), color="black") +
 geom_point(shape=1) +  stat_smooth(method = 'nls', formula = y~a*exp(b*x), aes(colour = 'Exponential'), se = FALSE)
g <- g + theme_classic()
g <- g + theme(panel.grid.major=element_blank())
g <- g + theme(panel.grid.minor=element_blank())
g <- g + theme(axis.line.x=element_line(color="black"),
           axis.line.y=element_line(color="black"),
           panel.border=element_blank(),
           panel.background=element_blank())
g <- g + labs(x="\ndatax",y="datay\n")
g <- g + theme(axis.text.y=element_text(size=14))
g <- g + theme(axis.text.x=element_text(size=14))
g <- g + theme(axis.title.y=element_text(size=18,vjust=1))
g <- g + theme(axis.title.x=element_text(size=18,vjust=1))
g

这是我得到的图片

作为 R 初学者,我通过混合自己的脚本和互联网来编写脚本。我总是收到以下错误:

"In (function (formula, data = parent.frame(), start, control = nls.control(), : No starting values specified for some parameters. Initializing ‘a’, ‘b’ to '1.'.Consider specifying 'start' or using a selfStart model"

我还没有找到更好的方法来绘制指数图。

此外,我想将图表的颜色更改为黑色并删除图例,我希望图表中有 R² 和 p 值。 (也许还有置信区间?)

没有可复现的例子,问题那么多,不好回答。 您确定您报告的消息是错误而不是警告吗?在我自己的笔记本电脑上,使用数据集 'iris',我收到警告...

但是,如何在 R 文档的 ?nls 页面上阅读,您应该通过参数 "start" 提供一个初始值以开始估计,以帮助找到收敛性。如果您不提供它,nls() 本身应该使用一些虚拟默认值(在您的情况下,a 和 b 设置为 1)。

您可以尝试这样的操作:

g <- ggplot(data, aes(x=datax, y=datay), color="black") +
     geom_point(shape=1) +  stat_smooth(method = 'nls', 
     method.args = list(start = c(a=1, b=1)), 
     formula = y~a*exp(b*x), colour = 'black', se = FALSE)

你告诉 R 绘图的颜色是 "Exponential",我认为这会奏效(我尝试使用 R-base 数据集 'iris' 并奏效)。 您可以注意到我将 start 参数作为传递给 'method.args' 的列表的元素传递:这是 ggplot v2.0.0.

中的新功能

希望对您有所帮助

编辑: 为了完整起见,我附上了我在笔记本电脑上使用默认数据集复制的代码:(请注意它与这样的数据集没有指数拟合,但代码运行时没有警告)

library(ggplot2)
data('iris')
g1 <- ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
      geom_point(color='green') +geom_smooth(method = 'nls',
      method.args = list(start=c(a=1, b=1)), se = FALSE, 
      formula = y~a*exp(b*x), colour='black')
g1