如何解决使用ggplot的非线性模型绘图问题
我在通过 stat_smooth 绘制 NLS 拟合时遇到问题。有趣的是,拟合曲线在负 y 方向移动。有谁知道这可能是什么原因?下面是代码、数据和示例图(URL):
y<-c(0.686,0.674,0.631,0.580,0.520,0.440,0.411,0.401,0.338,0.262,0.218,0.703,0.628,0.584,0.547,0.513,0.457,0.395,0.372,0.326,0.255,0.213,0.760,0.684,0.622,0.577,0.550,0.463,0.352,0.311,0.244,0.212)
x<-c(0.03,0.08,0.15,0.23,0.30,0.75,1.50,2.25,3.01,7.52,15.03,0.03,15.03)
df<-as.data.frame(cbind(x,y))
ggplot(df,aes(x=x,y=y))+
geom_point()+
stat_smooth(method = "nls",formula = log10(y) ~ c1*log10(x)+c2,method.args=list(start=list(c1=-0.2,c2=-0.4)),se=FALSE)
非常感谢 XEZ
解决方法
就像评论中提到的 stefan 一样,那是因为你适合 log10(y)
。转换输入值的另一种解决方案是在计算拟合后反转对数转换。您可以使用 stage()
函数执行此操作:
library(ggplot2)
y<-c(0.686,0.674,0.631,0.580,0.520,0.440,0.411,0.401,0.338,0.262,0.218,0.703,0.628,0.584,0.547,0.513,0.457,0.395,0.372,0.326,0.255,0.213,0.760,0.684,0.622,0.577,0.550,0.463,0.352,0.311,0.244,0.212)
x<-c(0.03,0.08,0.15,0.23,0.30,0.75,1.50,2.25,3.01,7.52,15.03,0.03,15.03)
df<-as.data.frame(cbind(x,y))
ggplot(df,aes(x=x,y=y))+
geom_point()+
stat_smooth(method = "nls",formula = log10(y) ~ c1*log10(x)+c2,method.args=list(start=list(c1=-0.2,c2=-0.4)),aes(y = stage(y,after_stat = 10^y)),se=FALSE)
由 reprex package (v1.0.0) 于 2021 年 6 月 29 日创建
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。