ggplot2中的nls和对数刻度

用户名

我正在尝试在ggplot2中绘制3个非线性模型。它在自动缩放下工作,但在log10缩放下却无法工作,在此我得到“奇异梯度误差”。可能是什么问题?

我要拟合的数据(df1):

x   y
4.17    0.55
10.08   0.48
40.25   0.38
101.17  0.32
400.33  0.24

我试过的代码:

plot <- ggplot(df1, aes(x=x, y=y))+
  stat_smooth(method="nls",
              formula=y~I(a*x^(-n)),
              data=df1,
              start=list(a=1,n=1),
              se=FALSE,
              colour="red")+
  stat_smooth(method="nls",
              formula=y~m*(x+m^(1/n))^(-n),
              data=df1,
              start=list(m=0.7, n=0.17),
              se=FALSE,
              colour="blue")+
  stat_smooth(method="nls",
              formula=y~m*(x+m^(1/n))^(-n)+b,
              data=df1,
              start=list(m=0.7, n=0.17, b=1),
              se=FALSE,
              colour="green")+
  geom_point()+
  scale_x_log10()+
  scale_y_log10()+
  theme_bw()
plot
弗里克先生

问题似乎是,当您指定scale_x_log10或时scale_y_log10,数据的值在传递给不同的统计信息或几何之前先进行转换。这意味着,尽管您的nls可以处理未转换的数据,但不适用于日志转换的数据。

#OK
nls(y~m*(x+m^(1/n))^(-n), df1, start=list(m=0.7, n=0.17))
#NOT OK
nls(y~m*(x+m^(1/n))^(-n), log10(df1), start=list(m=0.7, n=0.17))

ggplot2解决这个问题似乎没什么可做的相反,您可以提前在未转换的比例尺上拟合NLS模型,并使用ggplot2绘制结果。例如

mods<-list(
    list(y~I(a*x^(-n)), list(a=1,n=1)),
    list(y~m*(x+m^(1/n))^(-n), list(m=0.7, n=0.17)),
    list(y~m*(x+m^(1/n))^(-n)+b, list(m=0.7, n=0.17, b=1))
)

fits<-lapply(mods, function(x, xr) {
    mod<-nls(x[[1]], data=df1, start=x[[2]])
    xx<-seq(xr[1], xr[2], length.out=100)
    yy<-predict(mod, newdata=data.frame(x=xx))
    data.frame(x=xx, y=yy)
}, xr=range(df1$x))

library(ggplot2)
ggplot(df1, aes(x=x, y=y))+
  geom_line(data=fits[[1]], color="red") +
  geom_line(data=fits[[2]], color="blue") +
  geom_line(data=fits[[3]], color="green") +
  geom_point()+
  scale_x_log10()+
  scale_y_log10()+
  theme_bw()

会产生

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ggplot2错误:手动刻度中的值不足

来自分类Dev

使用ggplot2更改R中的x轴刻度标签

来自分类Dev

R中的NLS和对数周期幂定律(LPPL)

来自分类Dev

ggplot2中的nls和对数刻度

来自分类Dev

与ggplot2,geom_smooth和nls拟合

来自分类Dev

如何使stat_binhex在ggplot2中以对数刻度显示

来自分类Dev

ggplot2 geom_bar,刻度和限制

来自分类Dev

在ggplot2中控制x轴上的时间刻度和binwidth

来自分类Dev

ggplot2在R中的对数刻度转换

来自分类Dev

在ggplot2中对数据进行方面分析时,如何在刻度上设置不同的中断和标签?

来自分类Dev

控制由ggplot2中的因子变量生成的饼图中的刻度和奇数文字

来自分类Dev

更改ggplot2中特定刻度的颜色

来自分类Dev

在ggplot2中的小节之间放置刻度线

来自分类Dev

为什么NLS功能在ggplot2中不起作用

来自分类Dev

减少ggplot2中刻度线之间的空间

来自分类Dev

将y轴刻度之间的距离用作ggplot2中的变量

来自分类Dev

如何更改ggplot2中类别刻度之间的距离?

来自分类Dev

如何使用ggplot2和刻度将轴标签从科学格式更改为幂格式?

来自分类Dev

如何在dplyr工作流程中为ggplot2的刻度编写函数?

来自分类Dev

如何使用ggplot2在此图中获取轴刻度和刻度?

来自分类Dev

在ggplot2中的coord_flip()之后手动设置X轴上的限制和刻度

来自分类Dev

R中的NLS和对数周期幂定律(LPPL)

来自分类Dev

ggplot2在R中的对数刻度转换

来自分类Dev

R:ggplot2:在没有网格的情况下刻度和标签的位置

来自分类Dev

ggplot2-以对数刻度强制10 ^ 0

来自分类Dev

刻度线和标签引起ggplot2混乱

来自分类Dev

R ggplot2:在对数刻度上绘制对角线

来自分类Dev

用对数刻度在 R (ggplot2) 中绘制一条海峡线?

来自分类Dev

R ggplot2 y 轴刻度

Related 相关文章

  1. 1

    ggplot2错误:手动刻度中的值不足

  2. 2

    使用ggplot2更改R中的x轴刻度标签

  3. 3

    R中的NLS和对数周期幂定律(LPPL)

  4. 4

    ggplot2中的nls和对数刻度

  5. 5

    与ggplot2,geom_smooth和nls拟合

  6. 6

    如何使stat_binhex在ggplot2中以对数刻度显示

  7. 7

    ggplot2 geom_bar,刻度和限制

  8. 8

    在ggplot2中控制x轴上的时间刻度和binwidth

  9. 9

    ggplot2在R中的对数刻度转换

  10. 10

    在ggplot2中对数据进行方面分析时,如何在刻度上设置不同的中断和标签?

  11. 11

    控制由ggplot2中的因子变量生成的饼图中的刻度和奇数文字

  12. 12

    更改ggplot2中特定刻度的颜色

  13. 13

    在ggplot2中的小节之间放置刻度线

  14. 14

    为什么NLS功能在ggplot2中不起作用

  15. 15

    减少ggplot2中刻度线之间的空间

  16. 16

    将y轴刻度之间的距离用作ggplot2中的变量

  17. 17

    如何更改ggplot2中类别刻度之间的距离?

  18. 18

    如何使用ggplot2和刻度将轴标签从科学格式更改为幂格式?

  19. 19

    如何在dplyr工作流程中为ggplot2的刻度编写函数?

  20. 20

    如何使用ggplot2在此图中获取轴刻度和刻度?

  21. 21

    在ggplot2中的coord_flip()之后手动设置X轴上的限制和刻度

  22. 22

    R中的NLS和对数周期幂定律(LPPL)

  23. 23

    ggplot2在R中的对数刻度转换

  24. 24

    R:ggplot2:在没有网格的情况下刻度和标签的位置

  25. 25

    ggplot2-以对数刻度强制10 ^ 0

  26. 26

    刻度线和标签引起ggplot2混乱

  27. 27

    R ggplot2:在对数刻度上绘制对角线

  28. 28

    用对数刻度在 R (ggplot2) 中绘制一条海峡线?

  29. 29

    R ggplot2 y 轴刻度

热门标签

归档