R ggplot2指数回归与R²和p

时间:2016-07-18 18:23:33

标签: r ggplot2 nls

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

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

这是我得到的图像

enter image description here

作为R-beginner,我通过混合我和互联网的脚本来完成脚本。我总是收到以下错误:

  

“在(函数(公式,数据= parent.frame(),start,control = nls.control(),):没有为某些参数指定起始值。   将'a','b'初始化为'1'。考虑指定'start'或使用selfStart模型“

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

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

1 个答案:

答案 0 :(得分:3)

如果没有可重复的例子和许多问题,要回答并不容易。 您确定您报告的消息是错误而不是警告吗?在我自己的笔记本电脑上,数据集'iris',我收到了警告......

但是,如何阅读R文档中的文件页面,您应该通过参数“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,情节的颜色是“指数”,我认为这样可行(我尝试使用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